使用 CentOS Syslog 进行性能监控的可落地方案
一、总体思路
- Syslog 本身不直接采集性能指标,但可作为“统一通道”承载由监控工具或脚本产生的告警与状态信息。常见做法是:用监控工具采集指标并生成日志/告警,通过 rsyslog 按设施与级别写入本地或远程日志,再用 Logwatch/ELK/Prometheus+Grafana 做汇总、可视化与告警。为降低对业务的影响,建议对 Syslog 做异步写入、合理日志级别与日志轮转等性能优化。
二、快速落地步骤
- 步骤1 安装并启用 rsyslog
- 确认或安装服务:sudo yum install -y rsyslog && sudo systemctl enable --now rsyslog
- 步骤2 配置日志分类与本地落地
- 在 /etc/rsyslog.d/ 下新增例如 10-performance.conf,按“设施/级别”将性能相关日志分流,便于后续分析与容量规划:
- 将性能告警统一到 local0.warning:
- :syslogtag, isequal, “perf:” /var/log/perf-alert.log
- :syslogtag, isequal, “perf:” ~
- 将内核/系统性能相关(如内核日志)单独落盘:
- kern.warning /var/log/kernel-perf.log
- kern.warning ~
- 步骤3 配置日志轮转(避免磁盘被撑满)
- 新建 /etc/logrotate.d/perf,示例(按日轮转、保留 7 天、压缩):
- /var/log/perf-alert.log, /var/log/kernel-perf.log {
- daily
- rotate 7
- compress
- missingok
- notifempty
- create 0644 root root
- sharedscripts
- postrotate
- /usr/bin/systemctl kill -s HUP rsyslog >/dev/null 2>&1 || true
- endscript
- }
- 步骤4 远程集中监控(可选)
- 在“日志服务器”启用接收:在 /etc/rsyslog.conf 取消注释并加载模块
- module(load=“imudp”); input(type=“imudp” port=“514”)
- module(load=“imtcp”); input(type=“imtcp” port=“514”)
- 在“业务主机”将性能类日志发往服务器(示例为 TCP):
- :syslogtag, isequal, “perf:” @@192.0.2.10:514
- 防火墙放行:sudo firewall-cmd --permanent --add-port=514/{udp,tcp} && sudo firewall-cmd --reload
- 步骤5 验证
- 发送测试性能告警:logger -t perf “cpu_load=95% mem=88% disk=/var=92%”
- 查看本地与远程是否落盘:tail -f /var/log/perf-alert.log;服务器端检查按主机/程序分发的日志目录。
三、将性能数据送入 Syslog 的三种常用方式
- 方式A 轻量脚本 + logger(快速接入)
- 采集脚本(示例):
- #!/usr/bin/env bash
- ts=$(date ‘+%F %T’)
- cpu=$(awk ‘/^cpu /{printf “%.1f”, 100-($5*100/($1+$2+$3+$4+$5))}’ /proc/stat)
- mem=$(free | awk ‘/Mem/{printf “%.1f”, $3/$2*100}’)
- disk=$(df / | awk ‘NR==2{printf “%.1f”, $5}’)
- echo “$ts cpu=$cpu mem=$mem disk=$disk” | logger -t perf -p local0.warning
- 定时采集:crontab -e 加入
- */5 * * * * /usr/local/bin/perf_report.sh
- 说明:通过 logger 的 -t 标签 与 -p 设施.级别 将性能数据打上统一标识,便于 rsyslog 分流与后续检索。
- 方式B Glances 输出到 Syslog(开箱即用)
- 安装:sudo yum install -y glances
- 运行:glances -w(以 Web 服务模式运行,结合告警规则可触发日志/通知;也可结合其 Syslog 通知能力将阈值告警送入 local0)
- 适用场景:需要更全面的资源监控(CPU、内存、磁盘、网络、进程)并快速接入告警通道。
- 方式C 日志分析报表(事后性能趋势)
- 安装 Logwatch:sudo yum install -y logwatch
- 生成报告(示例):/usr/sbin/logwatch --service All --range yesterday --detail High --mailto you@example.com
- 说明:适合做“日/周”性能与异常趋势汇总,而非实时告警。
四、可视化与告警
- 集中化与可视化
- 小规模:继续用 rsyslog 集中落盘,配合 Logwatch 做日报/周报。
- 中大规模:将 Syslog 接入 ELK(Elasticsearch+Logstash+Kibana) 或 Graylog,在 Kibana/Grafana 中做面板与阈值告警,统一展示多主机性能告警与趋势。
- 安全与基线
- 仅开放必要端口(如 514/UDP/TCP),为日志目录设置最小权限,定期审计与归档关键日志,满足合规与取证需求。
五、Syslog 性能优化要点
- 降低日志噪声:将采集脚本与监控工具的日志级别控制在 warning/err,避免 debug 洪泛。
- 启用异步与队列:在 rsyslog 配置中使用高级队列(action queue)与异步写入,避免阻塞业务。
- 精简规则:合并/删除无效规则,减少不必要的输出目标与动作。
- 合理轮转与压缩:使用 logrotate 控制单文件大小与保留天数,压缩历史日志节省空间。
- 传输可靠性:跨机房/跨公网优先 TCP 514,必要时启用 TLS 加密传输。
- 资源限制:通过 systemd 为 rsyslog 设置文件描述符上限与内存限制,防止异常膨胀影响系统。
- 持续分析:定期审计日志量与处理时延,针对高频来源做采样或降噪。