Debian 下 syslog 丢日志是一个比较常见的问题,原因通常不是“真的丢了”,而是被缓冲、被覆盖、被限流或配置不当。下面按最常见原因 → 排查方法 → 解决建议来说明。
Debian 默认:
/var/log如果 journal 没开持久化:
✅ 检查:
ls /var/log/journal
如果没有这个目录,说明 日志只存在内存里
✅ 解决:
mkdir -p /var/log/journal
systemctl restart systemd-journald
rsyslog 默认可能使用:
在高并发或崩溃时:
✅ 检查 rsyslog 配置:
grep -R "Action" /etc/rsyslog.conf /etc/rsyslog.d/
✅ 更安全的写法:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
并确保:
$ActionFileEnableSync on
systemd 默认限流:
✅ 现象:
journalctl 里也没有✅ 查看是否被限流:
journalctl -u your-service
✅ 修改限流(/etc/systemd/journald.conf):
RateLimitIntervalSec=0
RateLimitBurst=0
然后:
systemctl restart systemd-journald
这是最容易被忽略的。
✅ 检查:
df -h
df -i
✅ 表现:
✅ 解决:
错误示例:
postrotate✅ 正确示例:
/var/log/messages {
rotate 7
daily
missingok
notifempty
compress
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service
endscript
}
容器 / systemd 服务:
✅ 检查:
journalctl -u your-service
✅ 解决:
# 1. 是否持久化
ls /var/log/journal
# 2. 是否限流
grep -E "RateLimit" /etc/systemd/journald.conf
# 3. 磁盘
df -h; df -i
# 4. rsyslog 是否活着
systemctl status rsyslog
# 5. 对比 journal 和文件
journalctl -n 50
tail -n 50 /var/log/syslog
你可以补充:
cat /etc/debian_version)我可以直接给你一份可落地的配置。