Debian 系统中 /var/log/syslog 文件过大,通常是日志记录未被合理限制或某个服务异常输出大量日志导致的。下面按常见原因 → 排查方法 → 解决方案来说明。
Debian 默认使用 rsyslog + logrotate,但如果:
logrotatelogrotate 配置错误syslog 就会一直增长。
常见于:
例如:
sshd[1234]: error: ...
dockerd[5678]: ...
/etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf 中:
*.* /var/log/syslog
导致所有级别日志全部写入 syslog
老服务器几个月甚至几年不重启,日志不断累积。
journal 本身也会记录日志,rsyslog 再写一份,造成“重复”。
ls -lh /var/log/syslog*
tail -n 100 /var/log/syslog
或按时间:
journalctl -u ssh --since "1 hour ago"
grep -o '[^ ]*: ' /var/log/syslog | sort | uniq -c | sort -nr | head
常见输出:
3000 sshd:
2000 dockerd:
1500 cron:
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
}
sudo truncate -s 0 /var/log/syslog
sudo systemctl restart rsyslog
⚠️ 不是根本解决方案,只是临时止血
sudo apt install logrotate
sudo systemctl enable cron
sudo systemctl start cron
验证:
logrotate -d /etc/logrotate.conf
避免记录 DEBUG / INFO 级别日志:
编辑:
sudo nano /etc/rsyslog.conf
改为:
*.warning;authpriv.none;cron.none /var/log/syslog
重启:
sudo systemctl restart rsyslog
sudo nano /etc/systemd/journald.conf
改为:
SystemMaxUse=200M
RuntimeMaxUse=100M
然后:
sudo systemctl restart systemd-journald
例如 SSH 暴力破解:
sudo apt install fail2ban
Docker 日志:
docker logs --tail 100 <container>
✅ 使用 logrotate
✅ rsyslog 只记录 warning 以上
✅ journal 限制大小
✅ 定期检查异常服务
✅ 避免 cron / docker / ssh 错误刷屏
如果你愿意,可以把 最近 50 行 syslog 或 logrotate 配置贴出来,我可以帮你精准判断是哪一个原因。