Debian 系统中 syslog 体积过大,通常是由于日志配置、服务异常、或记录级别设置不当导致的。下面从原因到排查、再到解决方法,给你一个系统性的说明。
如果 /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf 中设置了:
*.* /var/log/syslog
或 debug 级别:
*.debug /var/log/syslog
会导致几乎所有日志都被写入 syslog,包括大量调试信息。
常见“日志炸弹”来源:
例如:
正常情况下:
/var/log/syslog 应由 logrotate 管理如果:
就会导致 syslog 无限增长。
Debian 同时启用了:
systemd-journaldrsyslog两者可能重复记录日志,造成冗余。
如果系统时间被回拨或跳变,rsyslog 可能:
ls -lh /var/log/syslog*
du -sh /var/log/syslog
tail -n 100 /var/log/syslog
或实时查看:
tail -f /var/log/syslog
重点看:
grep -c "" /var/log/syslog
或按时间分析:
head /var/log/syslog
cat /etc/rsyslog.conf
ls /etc/rsyslog.d/
重点看是否有:
*.debug
*.*
cat /etc/logrotate.d/rsyslog
确认包含:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf:
*.info;mail.none;authpriv.none;cron.none /var/log/syslog
然后重启:
systemctl restart rsyslog
sudo truncate -s 0 /var/log/syslog
⚠️ 不建议直接
rm,可能导致 rsyslog 继续写旧 inode
手动执行一次:
logrotate -vf /etc/logrotate.conf
sudo nano /etc/systemd/journald.conf
设置:
SystemMaxUse=200M
RuntimeMaxUse=100M
然后:
systemctl restart systemd-journald
例如屏蔽 docker:
echo "if $programname == 'docker' then stop" >> /etc/rsyslog.d/10-docker.conf
systemctl restart rsyslog
/var/logjournalctl -u 服务名 排查问题如果你愿意,可以把 syslog 的最后 50 行 或 rsyslog 配置贴出来,我可以帮你精准判断是哪一种情况。