如何用Syslog进行系统性能监控
导读:一、前置准备:配置Syslog收集性能日志 要让Syslog成为系统性能监控的数据源,需先确保其能收集与性能相关的日志。以rsyslog(Linux主流Syslog实现)为例,需完成两项基础配置: 开启远程日志接收(可选但推荐):修改/e...
一、前置准备:配置Syslog收集性能日志
要让Syslog成为系统性能监控的数据源,需先确保其能收集与性能相关的日志。以rsyslog(Linux主流Syslog实现)为例,需完成两项基础配置:
- 开启远程日志接收(可选但推荐):修改
/etc/rsyslog.conf
或/etc/rsyslog.d/50-default.conf
,取消以下行的注释(或新增),允许服务器接收来自其他主机的Syslog消息(UDP 514端口,若需更安全可选TCP):
重启rsyslog服务使配置生效:module(load="imudp") # 加载UDP模块 input(type="imudp" port="514") # 开启UDP监听 module(load="imtcp") # 加载TCP模块(可选) input(type="imtcp" port="514") # 开启TCP监听
sudo systemctl restart rsyslog
。 - 定向性能日志到独立文件:创建自定义配置文件(如
/etc/rsyslog.d/performance.conf
),通过关键字过滤性能相关日志(如“CPU usage”“Memory low”“Disk I/O error”),并写入专用文件(如/var/log/performance.log
)。示例配置:
重启rsyslog服务::msg, contains, "CPU usage" -/var/log/cpu_usage.log # 过滤含“CPU usage”的日志 & stop # 停止后续规则处理,避免重复记录 :msg, contains, "Memory low" -/var/log/memory_alert.log & stop :msg, contains, "Disk I/O error" -/var/log/disk_io_error.log & stop
sudo systemctl restart rsyslog
。
二、采集关键性能指标:定义日志内容
需通过脚本或工具主动采集系统性能数据,并以Syslog格式发送到服务器。常用指标及实现方法:
- CPU使用率:用
top
或/proc/stat
获取CPU利用率,通过logger
命令发送到Syslog。示例脚本(保存为/usr/local/bin/cpu_monitor.sh
):
添加定时任务(每5分钟执行一次):#!/bin/bash CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{ print 100 - $1} ') THRESHOLD=80 # 阈值设为80% if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then logger -t CPU_MONITOR "CPU usage is high: ${ CPU_USAGE} % (Threshold: ${ THRESHOLD} %)" fi
sudo crontab -e
,新增:*/5 * * * * /usr/local/bin/cpu_monitor.sh
。 - 内存占用:用
free
命令获取内存使用率,发送告警日志:#!/bin/bash MEM_USAGE=$(free | grep Mem | awk '{ print $3/$2 * 100.0} ') THRESHOLD=90 if (( $(echo "$MEM_USAGE > $THRESHOLD" | bc -l) )); then logger -t MEMORY_MONITOR "Memory usage is high: ${ MEM_USAGE} % (Threshold: ${ THRESHOLD} %)" fi
- 磁盘I/O:用
iostat
(需安装sysstat
包)获取磁盘读写负载,发送异常日志:
通过上述脚本,性能数据会以#!/bin/bash IO_WAIT=$(iostat -c 1 2 | tail -1 | awk '{ print $4} ') THRESHOLD=20 if (( $(echo "$IO_WAIT > $THRESHOLD" | bc -l) )); then logger -t DISK_MONITOR "Disk I/O wait is high: ${ IO_WAIT} % (Threshold: ${ THRESHOLD} %)" fi
logger
命令写入Syslog,便于后续集中分析。
三、日志解析与存储:结构化性能数据
原始Syslog日志为文本格式,需解析为结构化数据(如JSON)以便分析。常用工具:
- rsyslog内置过滤:在
performance.conf
中进一步解析日志,提取关键字段(如时间、主机名、CPU使用率)。示例:
此配置会将符合条件的日志转为JSON格式,存储到if $msg contains "CPU usage is high" then { action(type="mmjsonparse") # 解析为JSON格式 action(type="omfile" file="/var/log/structured_performance.log" template="RSYSLOG_TraditionalFileFormat") stop }
/var/log/structured_performance.log
。 - ELK Stack(Elasticsearch+Logstash+Kibana):
- Logstash:作为日志收集器,解析rsyslog发送的日志。编辑
/etc/logstash/conf.d/syslog.conf
,添加以下 pipeline:input { syslog { port => 514 type => "syslog" } } filter { if [type] == "syslog" { grok { # 使用正则提取字段 match => { "message" => "%{ SYSLOGTIMESTAMP:timestamp} %{ HOSTNAME:hostname} %{ DATA:program} \[%{ POSINT:pid} \]: %{ GREEDYDATA:message} " } } if [message] =~ /CPU usage/ { mutate { add_tag => ["cpu_perf"] } # 打标签便于后续过滤 } if [message] =~ /Memory low/ { mutate { add_tag => ["memory_perf"] } } } } output { elasticsearch { # 存储到Elasticsearch hosts => ["localhost:9200"] index => "syslog-performance-%{ +YYYY.MM.dd} " } stdout { codec => rubydebug } # 控制台输出(调试用) }
- Kibana:可视化分析。访问
http://localhost:5601
,创建索引模式(如syslog-performance-*
),通过Discover查看日志,或用Visualize构建仪表板(如CPU使用率趋势图)。
- Logstash:作为日志收集器,解析rsyslog发送的日志。编辑
四、可视化与告警:让性能监控“可见”
- 可视化工具:
- Kibana:通过Dashboard展示性能指标(如CPU使用率、内存占用的时间序列图),支持筛选、钻取(如按主机名查看特定主机的性能数据)。
- Grafana:搭配Prometheus(需将Syslog数据转换为Prometheus格式)或Elasticsearch数据源,创建更丰富的仪表板(如磁盘I/O负载热力图)。
- 告警机制:
- ELK Stack + Watcher:Elasticsearch的Watcher功能可根据日志内容触发告警(如CPU使用率超过80%时发送邮件)。示例Watcher配置:
PUT _watcher/watch/cpu_high_alert { "trigger": { "schedule": { "interval": "5m" } # 每5分钟检查一次 } , "input": { "search": { "request": { "indices": ["syslog-performance-*"], "body": { "query": { "bool": { "must": [ { "match": { "message": "CPU usage is high" } } , { "range": { "@timestamp": { "gte": "now-5m" } } } ] } } } } } } , "actions": { "email_alert": { "email": { "to": "admin@example.com", "subject": "CPU High Usage Alert", "body": "CPU usage is high on { { ctx.payload.hits.hits._source.hostname} } : { { ctx.payload.hits.hits._source.message} } " } } } }
- 传统监控工具:Nagios、Zabbix等可通过读取Syslog日志或直接采集性能指标(如
/proc/stat
),设置阈值告警(如内存使用率超过90%时触发SMS通知)。
- ELK Stack + Watcher:Elasticsearch的Watcher功能可根据日志内容触发告警(如CPU使用率超过80%时发送邮件)。示例Watcher配置:
五、优化与维护:提升监控有效性
- 日志轮转:用
logrotate
防止性能日志过大,占用磁盘空间。编辑/etc/logrotate.d/performance
:/var/log/cpu_usage.log { daily # 每天轮转 rotate 7 # 保留7天 compress # 压缩旧日志 missingok # 文件不存在不报错 notifempty # 空文件不轮转 }
- 调整日志级别:避免无关日志干扰性能监控。例如,将rsyslog的全局日志级别设为
warning
(只记录警告及以上级别的日志),在/etc/rsyslog.conf
中修改:.=warning; .=err; .=crit; .=alert; .=emerg /var/log/syslog & ~ # 忽略更低级别的日志
- 定期审查规则:根据业务需求调整性能指标的阈值(如CPU阈值从80%调整为70%)和日志过滤规则(如新增“Disk space low”的过滤条件),确保监控的针对性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何用Syslog进行系统性能监控
本文地址: https://pptw.com/jishu/731270.html