温馨提示×

linux syslog为何过大

小樊
42
2026-07-29 20:32:01
栏目: 智能运维

Linux 的 syslog 过大,通常不是“一个原因”,而是多个日志来源 + 配置不当 + 日志策略缺失共同导致的。下面按常见原因 → 排查方法 → 解决方案系统说明。


一、Syslog 变大的常见原因

1. 系统或应用疯狂打日志(最常见)

某些服务以极高频率写日志,例如:

  • 网络服务(Nginx / Apache / HAProxy)
  • 防火墙(iptables / nftables / firewalld)
  • 频繁重试的服务(SSH、cron、systemd)
  • 应用 bug(死循环打印日志)

典型表现:

message repeated 5000 times

2. rsyslog / syslog-ng 配置不当

  • 日志级别过低(如 debug
  • 所有日志都写入同一个文件
  • 没有过滤重复的日志

3. 没有日志轮转(logrotate 缺失或失效)

  • /var/log/messages/var/log/syslog 一直增长
  • 从未触发 logrotate

4. journald + syslog 双写

  • systemd-journald 本身已记录日志
  • rsyslog 又读一遍并写入文件
  • 导致“一份日志,两份存储”

5. 磁盘被日志占满(反向放大问题)

  • 磁盘满 → 服务异常 → 更多错误日志 → 日志更大

二、如何快速定位哪类日志在“撑大”

1️⃣ 查看日志文件大小

du -sh /var/log/*

重点看:

  • messages
  • syslog
  • kern.log
  • daemon.log

2️⃣ 查看哪个服务在疯狂写日志

journalctl -p err..alert --since "1 hour ago"

或统计频率:

grep "$(date +%b\ %e)" /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head

3️⃣ 查看是否有重复日志

tail -f /var/log/syslog

如果看到:

last message repeated 1000 times

说明日志去重失效或未配置。


三、日志轮转问题(90% 的老系统都踩过)

检查 logrotate 是否正常

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

四、常见解决方案(按优先级)

✅ 1. 限制日志级别(非常关键)

编辑 rsyslog 配置:

vim /etc/rsyslog.conf

避免:

*.*   /var/log/syslog

推荐:

*.info;mail.none;authpriv.none;cron.none   /var/log/syslog

✅ 2. 启用 logrotate(必须)

确保:

systemctl status logrotate

✅ 3. 限制 journald 大小

vim /etc/systemd/journald.conf
SystemMaxUse=200M
RuntimeMaxUse=100M

重启:

systemctl restart systemd-journald

✅ 4. 临时止血(不建议长期使用)

truncate -s 0 /var/log/syslog

或:

journalctl --vacuum-size=100M

五、真实案例总结

现象 原因 解决方案
syslog 一天几十 GB iptables log 未限制 关闭或限速
messages 无限增长 cron 死循环 修复脚本
journal + syslog 双重 默认配置 限制 journald
磁盘满 没有 logrotate 启用轮转

六、一句话总结

Syslog 过大 = 日志来源过多 + 级别太低 + 没有轮转 + 没有容量限制

如果你愿意,可以把下面信息发我,我可以帮你精准定位

  • Linux 发行版
  • /var/log 目录大小
  • rsyslog.confjournald.conf 内容

我可以帮你直接给出最小化、可执行的修复方案

0