Linux 的 syslog 过大,通常不是“一个原因”,而是多个日志来源 + 配置不当 + 日志策略缺失共同导致的。下面按常见原因 → 排查方法 → 解决方案系统说明。
某些服务以极高频率写日志,例如:
典型表现:
message repeated 5000 times
debug)/var/log/messages、/var/log/syslog 一直增长logrotatedu -sh /var/log/*
重点看:
messagessyslogkern.logdaemon.logjournalctl -p err..alert --since "1 hour ago"
或统计频率:
grep "$(date +%b\ %e)" /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head
tail -f /var/log/syslog
如果看到:
last message repeated 1000 times
说明日志去重失效或未配置。
cat /etc/logrotate.d/syslog
常见正确配置示例:
/var/log/syslog {
rotate 7
daily
missingok
notifempty
compress
delaycompress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
手动测试:
logrotate -vf /etc/logrotate.conf
编辑 rsyslog 配置:
vim /etc/rsyslog.conf
避免:
*.* /var/log/syslog
推荐:
*.info;mail.none;authpriv.none;cron.none /var/log/syslog
确保:
systemctl status logrotate
vim /etc/systemd/journald.conf
SystemMaxUse=200M
RuntimeMaxUse=100M
重启:
systemctl restart systemd-journald
truncate -s 0 /var/log/syslog
或:
journalctl --vacuum-size=100M
| 现象 | 原因 | 解决方案 |
|---|---|---|
| syslog 一天几十 GB | iptables log 未限制 | 关闭或限速 |
| messages 无限增长 | cron 死循环 | 修复脚本 |
| journal + syslog 双重 | 默认配置 | 限制 journald |
| 磁盘满 | 没有 logrotate | 启用轮转 |
Syslog 过大 = 日志来源过多 + 级别太低 + 没有轮转 + 没有容量限制
如果你愿意,可以把下面信息发我,我可以帮你精准定位:
/var/log 目录大小rsyslog.conf 或 journald.conf 内容我可以帮你直接给出最小化、可执行的修复方案。