Ubuntu日志自动化分析实用方案
一 基础与数据来源
journalctl -u ssh -p err --since "2025-05-22 08:00:00" --until "2025-05-22 10:00:00"。Storage=persistent,确保重启后日志仍可检索与分析。二 本地自动化脚本与定时任务
#!/usr/bin/env bash
set -Eeuo pipefail
OUT=/var/log/syslog_errors_$(date +%F).txt
journalctl --since "24 hours ago" \
-p err..emerg \
--no-pager \
-o short-iso \
| tee "$OUT"
echo "Top 50 errors:" >> "$OUT"
grep -i "error" "$OUT" | tail -n 50 >> "$OUT"
# 可选:邮件发送或推送到企业IM
# 每天 02:00 执行,结果压缩归档
0 2 * * * root /usr/local/bin/analyze_syslog.sh && gzip /var/log/syslog_errors_*.txt
/var/log/syslog {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
三 集中化与可视化平台
四 关键场景与命令清单
| 场景 | 命令或配置 | 说明 |
|---|---|---|
| 当前启动的错误 | journalctl -p err -b |
快速定位本次启动内的错误 |
| 指定服务的错误 | journalctl -u nginx -p err --since "2025-05-22 09:00" |
服务维度定位问题 |
| SSH 暴力破解 | grep "Failed password" /var/log/auth.log |
发现认证异常来源 |
| 内核报错 | `dmesg | grep -i error` 或查 /var/log/kern.log |
| 日志轮转策略 | 编辑 /etc/logrotate.d/syslog(daily/rotate 7/compress) | 控制体积与保留周期 |
| 集中转发 | 在 rsyslog 配置 *.* @remote:514 并重启服务 |
统一收集到日志服务器 |
五 落地实施建议