温馨提示×

为何Debian syslog很大

小樊
68
2026-07-07 20:54:33
栏目: 智能运维

Debian 系统中 syslog 体积过大,通常是由于日志配置、服务异常、或记录级别设置不当导致的。下面从原因到排查、再到解决方法,给你一个系统性的说明。


一、常见原因

1. 日志级别设置过低(最常见)

如果 /etc/rsyslog.conf/etc/rsyslog.d/*.conf 中设置了:

*.* /var/log/syslog

或 debug 级别:

*.debug /var/log/syslog

会导致几乎所有日志都被写入 syslog,包括大量调试信息。


2. 某个服务疯狂写日志

常见“日志炸弹”来源:

  • 网络服务(sshd、nginx、docker)
  • 有 bug 的守护进程
  • 定时任务(cron)异常
  • 磁盘、网络、防火墙错误反复出现

例如:

  • SSH 被暴力破解
  • Docker 容器不断重启
  • 应用死循环打印日志

3. rsyslog 没有正确轮转(logrotate 失效)

正常情况下:

  • /var/log/syslog 应由 logrotate 管理
  • 默认每天轮转并压缩

如果:

  • logrotate 未运行
  • 配置文件被修改
  • 磁盘只读

就会导致 syslog 无限增长。


4. journald + rsyslog 同时记录

Debian 同时启用了:

  • systemd-journald
  • rsyslog

两者可能重复记录日志,造成冗余。


5. 系统时间异常

如果系统时间被回拨或跳变,rsyslog 可能:

  • 重复写入旧时间段的日志
  • 导致日志文件异常增长

二、快速排查方法

1️⃣ 查看 syslog 大小

ls -lh /var/log/syslog*
du -sh /var/log/syslog

2️⃣ 查看最近日志内容

tail -n 100 /var/log/syslog

或实时查看:

tail -f /var/log/syslog

重点看:

  • 哪个服务
  • 哪条日志重复出现
  • 是否有 error / failed / timeout

3️⃣ 找出“谁在写日志”

grep -c "" /var/log/syslog

或按时间分析:

head /var/log/syslog

4️⃣ 检查 rsyslog 配置

cat /etc/rsyslog.conf
ls /etc/rsyslog.d/

重点看是否有:

*.debug
*.*

5️⃣ 检查 logrotate

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

✅ 方案二:临时清空 syslog

sudo truncate -s 0 /var/log/syslog

⚠️ 不建议直接 rm,可能导致 rsyslog 继续写旧 inode


✅ 方案三:修复 logrotate

手动执行一次:

logrotate -vf /etc/logrotate.conf

✅ 方案四:限制 journald 日志大小

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

四、长期建议

  • ✅ 生产环境 不要开启 debug 日志
  • ✅ 定期检查 /var/log
  • ✅ 使用 journalctl -u 服务名 排查问题
  • ✅ 对公网服务器加强 SSH / 防火墙防护

如果你愿意,可以把 syslog 的最后 50 行rsyslog 配置贴出来,我可以帮你精准判断是哪一种情况。

0