在 Linux 里,syslog 排错通常分三步:
1️⃣ 确认日志系统是否在运行
2️⃣ 确认日志写到了哪里
3️⃣ 根据现象定位问题(不写日志 / 写错地方 / 日志丢失 / 权限问题)
下面按实战角度说明。
不同发行版不一样:
| 发行版 | 日志系统 |
|---|---|
| CentOS 6 | rsyslog / syslogd |
| CentOS 7+ | rsyslog + systemd-journald |
| Ubuntu 16.04+ | rsyslog + journald |
| 老系统 | syslog-ng |
查看:
ps -ef | grep -E "rsyslog|syslog|journal"
systemctl status rsyslog
journalctl -u rsyslog
如果没运行:
systemctl start rsyslog
systemctl enable rsyslog
常见位置:
/var/log/messages # CentOS
/var/log/syslog # Ubuntu
/var/log/secure # 认证
/var/log/cron
查看 rsyslog 配置:
cat /etc/rsyslog.conf
ls /etc/rsyslog.d/
示例规则:
*.info;mail.none;authpriv.none /var/log/messages
authpriv.* /var/log/secure
✅ 检查服务是否运行
✅ 检查磁盘是否满
df -h
✅ 检查 inode
df -i
测试 syslog:
logger "test syslog message"
然后看:
tail -f /var/log/messages
如果看不到:
/dev/log说明 rsyslog 没读 journal:
vim /etc/rsyslog.conf
确保有:
module(load="imjournal")
重启:
systemctl restart rsyslog
检查:
ls -l /var/log/
cat /etc/logrotate.d/rsyslog
日志文件权限:
ls -l /var/log/messages
常见应为:
-rw------- root root
journalctl -xe
journalctl -u nginx
journalctl --since "10 min ago"
systemctl status rsyslog
df -h
df -i
logger test
tail -f /var/log/messages
journalctl -xe
如果你愿意,可以告诉我:
我可以直接帮你给针对性排查命令或配置示例。