在 Ubuntu 上 syslog 丢日志 是一个比较常见的问题,通常不是“真的丢了”,而是被截断、覆盖、限流或配置不当导致的。下面按最常见原因 → 排查方法 → 解决建议来说明。
Ubuntu 现在默认用 systemd-journald,而 syslog(rsyslog)只是从 journal 里取数据。
如果 journal 被限流,rsyslog 就收不到日志。
典型表现
journalctl 有日志/var/log/syslog 没有原因
# /etc/systemd/journald.conf
RateLimitInterval=30s
RateLimitBurst=1000
日志太多会被丢弃。
✅ 解决:
sudo vim /etc/systemd/journald.conf
修改为:
RateLimitInterval=0
RateLimitBurst=0
然后:
sudo systemctl restart systemd-journald
rsyslog 自身也会限速。
常见配置
# /etc/rsyslog.conf
$SystemLogRateLimitInterval 0
$SystemLogRateLimitBurst 0
或新版:
module(load="imjournal" RateLimit.Interval="0" RateLimit.Burst="0")
✅ 修改后:
sudo systemctl restart rsyslog
Ubuntu 默认:
/var/log/syslog
/var/log/auth.log
每天 rotate。
如果:
就会写到旧 inode,看起来像“丢日志”。
✅ 检查:
ls -li /var/log/syslog*
✅ 解决:
确保 rsyslog 支持 copytruncate 或 rotate 后 reload。
df -h
df -i
如果 /var 满了,syslog 会直接停止写。
✅ 清理或扩容。
systemctl status rsyslog
journalctl -u rsyslog
常见错误:
✅ 临时关闭远程日志测试。
很多程序:
结果:
journalctl -u xxx 有/var/log/syslog 没有✅ 这是正常行为,不是丢。
# 1. journal 有没有
journalctl -n 100
# 2. syslog 有没有
tail -n 100 /var/log/syslog
# 3. rsyslog 状态
systemctl status rsyslog
# 4. 是否限流
grep -R RateLimit /etc/systemd/journald.conf /etc/rsyslog.conf
# 5. 磁盘
df -h /var
Storage=persistent
RateLimitInterval=0
RateLimitBurst=0
$SystemLogRateLimitInterval 0
$SystemLogRateLimitBurst 0
你可以告诉我:
22.04 / 20.04)我可以直接帮你给一份精准配置。