Ubuntu Syslog集成到监控系统的实用方案
一、总体架构与选择
- 典型路径有两条:一是走ELK/EFK(Rsyslog/Filebeat → Logstash → Elasticsearch → Kibana),适合做全文检索、可视化与复杂分析;二是走Loki/Prometheus(Promtail → Loki → Grafana/Alertmanager),更轻量,适合日志即指标的告警场景。也可在节点侧用syslog-ng做内容路由与本地预处理,再对接上述平台。
二、方案A ELK或EFK集中化日志
- 组件与职责
- Rsyslog/syslog-ng:采集与转发系统日志(支持 UDP/TCP 514 等)。
- Logstash:解析与丰富(Grok、Date、GeoIP 等),输出到 Elasticsearch。
- Elasticsearch:存储与检索。
- Kibana:可视化与仪表盘。
- 可选 Filebeat:在客户端侧轻量采集并转发到 Logstash/ES,减少本地资源占用。
- 服务端最小配置示例(Rsyslog 接收 + Logstash 入 ES)
- 启用 Rsyslog 接收(/etc/rsyslog.conf 或 /etc/rsyslog.d/ 下启用模块与端口)
- module(load=“imudp”) 与 input(type=“imudp” port=“514”)
- module(load=“imtcp”) 与 input(type=“imtcp” port=“514”)
- Logstash 配置(/etc/logstash/conf.d/syslog.conf)
- input { syslog { port => 514 type => “syslog” } }
- filter { grok { match => { “message” => “%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:[%{POSINT:pid}])?: %{GREEDYDATA:msg}” } date { match => [ “timestamp”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ] } }
- output { elasticsearch { hosts => [“localhost:9200”] index => “syslog-%{+YYYY.MM.dd}” } }
- 客户端转发(示例将所有日志发往集中 Logstash)
- 在客户端 /etc/rsyslog.d/forward.conf:. @logstash.example.com:514
- 验证
- 在 Kibana 创建索引模式 syslog-*,使用 Discover 查看日志;命令行生成测试日志:logger “Test syslog to ELK”。
三、方案B Loki与Prometheus告警
- 组件与职责
- Promtail:采集本地日志文件(如 /var/log/syslog、/var/log/auth.log),附加标签并发送到 Loki。
- Loki:按标签与内容存储日志,供 Grafana 查询。
- Grafana/Alertmanager:面板可视化与阈值/关键字告警(如 Failed password 等)。
- 快速落地
- 部署 Promtail → Loki → Grafana,在 Grafana 建立 Loki 数据源与面板。
- 在 Grafana 创建告警规则(例如:rate({job=“syslog”} |= “Failed password” [1m]) > 0),通过 Alertmanager 发送邮件/钉钉/Slack。
- 适用场景:需要轻量、云原生友好的日志告警与可视化,与 Prometheus 生态无缝衔接。
四、方案C 轻量脚本或专用工具做即时告警
- 使用 syslog-ng 直接触发脚本(适合安全类即时通知)
- 示例:匹配 auth.log 中的失败登录并调用脚本推送到 Slack/企业微信/钉钉。
- filter f_authfail { (facility(auth,authpriv) and match(“Failed password”)) or (facility(auth,authpriv) and match(“Disconnected from authenticating”)); }
- destination d_slack { program(“/opt/notify/slack.sh”); }
- log { source(s_src); filter(f_authfail); destination(d_slack); }
- 脚本通过 Webhook 发送消息,便于快速落地与二次开发。
- 使用 logwatch 做定时报告(适合日报/周报)
- 安装与配置:sudo apt-get install logwatch;编辑 /etc/logwatch/conf/logwatch.conf(如 Detail、Output=mail、MailTo)。
- 可结合 cron 每日发送关键日志摘要到邮箱。
五、实践要点与排错清单
- 协议与端口:Syslog 常用 UDP/TCP 514;生产建议优先 TCP 或配合 TLS 保障可靠性与机密性。
- 权限与路径:确保 /var/log/ 可读、日志管道/脚本具备执行权限;避免日志循环写入。
- 结构化与解析:尽量在 Logstash 或 Promtail/Loki 侧完成 Grok/正则解析,便于检索与聚合。
- 性能与存储:为 Elasticsearch 配置合理的分片与保留策略;为 Loki 配置压缩与保留;客户端可用 Filebeat/Promtail 降低本地开销。
- 高可用与缓冲:跨节点部署 Rsyslog/Loki 接收端,必要时加入 Kafka/Redis 缓冲,避免高峰丢日志。
- 快速自检
- 本机生成日志:logger “integration test”
- 查看本地接收:sudo tail -f /var/log/syslog
- 远程连通性:nc -vz logstash_or_loki_host 514
- 服务端日志:sudo journalctl -u rsyslog 或 sudo journalctl -u logstash