温馨提示×

ubuntu syslog为何过大

小樊
60
2026-07-05 18:14:03
栏目: 智能运维

Ubuntu 的 syslog 过大,通常是因为 系统日志持续写入、未做轮转或被异常程序刷屏。下面按常见原因 → 排查方法 → 解决方式给你一个完整说明。


一、常见原因

1. 某个服务疯狂写日志(最常见)

例如:

  • Docker / Kubernetes
  • Nginx / Apache
  • 网络异常(DHCP、NetworkManager)
  • 某个程序死循环打印错误

表现:

syslog 每天几百 MB 甚至几 GB

2. rsyslog 没有正确轮转

Ubuntu 默认使用:

  • rsyslog 写日志
  • logrotate 做日志轮转

如果:

  • logrotate 配置错误
  • 或 cron 没运行
  • 或 rsyslog 没 reload

就会导致 syslog 无限增长。


3. systemd-journald 日志过大(容易混淆)

你看到的“syslog 大”可能是:

  • /var/log/syslog
  • /var/log/journal/

journal 日志默认 不会自动限制大小


4. 日志级别设置过低

例如:

  • debug / info 级别全部记录
  • 生产环境不应该这样

二、快速排查方法

1️⃣ 先看哪个日志最大

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

重点看:

  • syslog
  • kern.log
  • messages
  • journal/

2️⃣ 查看 syslog 里谁在刷日志

tail -f /var/log/syslog

或统计最近日志来源:

awk '{print $5}' /var/log/syslog | sort | uniq -c | sort -nr | head

3️⃣ 查看 journal 日志大小

journalctl --disk-usage

三、解决方案

✅ 方案一:立即清理 syslog(临时)

sudo truncate -s 0 /var/log/syslog

或:

sudo systemctl restart rsyslog

⚠️ 这只是临时止血,不是根因解决。


✅ 方案二:修复 logrotate(推荐)

检查配置:

cat /etc/logrotate.d/rsyslog

正常应包含:

/var/log/syslog
/var/log/mail.log
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

手动执行一次:

sudo logrotate -vf /etc/logrotate.conf

✅ 方案三:限制 journal 日志大小(非常重要)

编辑:

sudo nano /etc/systemd/journald.conf

设置:

SystemMaxUse=200M
RuntimeMaxUse=100M

然后:

sudo systemctl restart systemd-journald

✅ 方案四:减少日志级别

编辑 rsyslog 配置:

sudo nano /etc/rsyslog.conf

避免:

*.*    /var/log/syslog

改为:

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

然后:

sudo systemctl restart rsyslog

✅ 方案五:找出“写日志的元凶”

journalctl -p err -b

或:

grep -i error /var/log/syslog | tail -n 50

四、推荐的健康配置(生产环境)

项目 建议
syslog 轮转 每日 + 7 天
journal 最大 200–500M
日志级别 info / warning
定期清理 用 logrotate

五、如果你愿意,我可以帮你:

  • ✅ 精确分析你的 /var/log/syslog 内容
  • ✅ 给你一份 生产级 logrotate 配置
  • ✅ 判断是 Docker / Nginx / 内核问题

你可以直接发:

ls -lh /var/log/
journalctl --disk-usage
tail -n 50 /var/log/syslog

0