Linux日志分析始于手动查阅/var/log/messages,核心在于理清工具链分工:syslog是RFC 5424协议,rsyslog/syslog-ng/journald为实现;采集层需集中、分流、轮转;分析层强调结构化与轻量脚本结合;可视化层重在可操作告警与归档闭环。

Linux 日志分析不是从 ELK 开始的,而是从 /var/log/messages 里一行行翻出来的。真正有效的自动化监控,得先理清工具链的分工和演进逻辑——不是越新越好,而是哪一环该干什么事,就让它干好。
syslog 是日志协议,不是某个具体程序
很多人误以为“syslog”是一个软件,其实它是一套标准协议(RFC 5424),定义了日志消息的格式、优先级(debug/info/warn/error)、设施(kern/auth/mail)等字段。实际落地靠守护进程实现:
- rsyslog:当前主流,默认预装在 Ubuntu、CentOS 等发行版,支持模块化(如 imjournal 读取 journald)、TCP/UDP 转发、条件过滤、写入数据库等;
- syslog-ng:更强调灵活性和高性能,适合复杂路由与预处理(比如 JSON 格式化、敏感字段脱敏);
-
journald:systemd 的内置日志服务,二进制存储、自带结构化元数据(如 _PID、_UID、UNIT=),但原生不输出纯文本,需用
journalctl -o json或 rsyslog 的 imjournal 模块桥接。
日志采集层:本地收、远程聚、按需分流
单机看日志用 tail -f /var/log/syslog 就够,但生产环境必须解决三个问题:集中存储、避免磁盘打满、区分关键日志路径。核心动作是配置 rsyslog 或 syslog-ng:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 把
auth.log、kern.log、nginx/error.log等关键路径的日志,通过input()模块或$IncludeConfig引入; - 用
if $programname == 'sshd' and $msg contains 'Failed'这类规则,把暴力登录尝试单独写入/var/log/ssh_attacks.log; - 配置
*.* @logserver:514(UDP)或*.* @@logserver:514(TCP,带重传),把日志推到中心服务器; - 配合
logrotate设置轮转策略:每周压缩、保留 12 周、超过 100MB 强制切割。
日志分析层:轻量脚本够用,结构化才 scalable
日常排查靠命令组合,规模化监控必须结构化:
- 简单告警:用
grep -q 'Out of memory\|segmentation fault' /var/log/syslog && echo "OOM detected" | mail -s "ALERT" admin@local,配合 cron 每 5 分钟跑一次; - 字段提取:用
awk '{print $1,$2,$3,$9,$10}' /var/log/apache2/access.log | sort | uniq -c | sort -nr统计高频 URL; - 结构化入口:rsyslog +
mmjsonparse模块,或 syslog-ng 的json-parser(),把 nginx access log 解析成 JSON 再转发; - 避免重复造轮子:Logwatch 可每日邮件汇总异常;fail2ban 直接监听 auth.log 自动封 IP;Prometheus + syslog_exporter 把 error 计数暴露为指标。
可视化与响应层:别让日志只躺在磁盘里
日志的价值不在存储,而在触发动作。这一层的关键是「可操作性」:
- Kibana 不只是画图:给
sshd登录失败次数建仪表板,设置阈值告警,点击跳转到对应时间段原始日志; - Grafana + Prometheus:把 rsyslog 的
$!metadata!error_count或自定义 counter 指标接入,做同比环比趋势分析; - 告警联动:用 Alertmanager 或 Graylog 的 alerting 功能,把「3 分钟内出现 10 条 OOM」转成 Slack 消息 + 自动执行
free -h快照; - 归档闭环:用
aws s3 sync /var/log/archive s3://my-logs/$(hostname)/$(date +%Y%m)定期上传,保留合规周期。

















