Linux 下 syslog 丢失是一个常见问题,通常不是“日志被删了”,而是写入路径、权限、缓冲、配置或存储某一环出了问题。下面按最常见原因 → 排查方法 → 解决办法来说明。
ps aux | grep rsyslog
# 或
systemctl status rsyslog
如果没跑:
systemctl start rsyslog
systemctl enable rsyslog
⚠️ 很多“丢失”其实是服务根本没启动
现代系统(CentOS 7+、Ubuntu 16+):
journalctl -xe
如果你只查 /var/log/messages 却什么都没有,但 journalctl 有:
解决:
# /etc/rsyslog.conf
module(load="imjournal")
df -h
df -i
如果 /var 满了:
解决:
很多程序(包括 rsyslog 自己)不会自动重新打开被 mv 的日志
表现:
检查:
lsof | grep deleted
解决:
systemctl restart rsyslog
或在 logrotate 中加:
postrotate
systemctl kill -s HUP rsyslog
endscript
很多程序:
例如 Docker / Java / Python:
docker logs xxx
或检查程序配置:
log4j.syslog=false
解决:
logger 测试logger "test message"
tail /var/log/messages
rsyslog 默认异步 系统崩溃时:
解决(关键业务):
# rsyslog.conf
$ActionFileEnableSync on
或:
omfile + flushInterval不要只依赖本地 syslog
✅ 推荐:
rsyslog示例:
*.* @@logserver:514
/var/log 有空间如果你愿意,可以告诉我:
我可以直接帮你定位到具体配置文件。