Linux 的 syslog 缺失或不工作 通常不是“没有 syslog”,而是日志系统发生了变化或配置/服务异常。下面按常见原因系统说明,并给出排查方法。
systemd-journald很多发行版(CentOS 7+、RHEL 7+、Ubuntu 16.04+)默认 不再安装 rsyslog / syslog-ng,而是使用:
systemd-journald
日志查看方式也变了:
journalctl
journalctl -xe
journalctl -u sshd
✅ 这是最常见原因
检查是否安装:
rpm -qa | grep rsyslog # CentOS/RHEL
dpkg -l | grep rsyslog # Ubuntu/Debian
如未安装:
# Ubuntu / Debian
sudo apt install rsyslog
# CentOS / RHEL
sudo yum install rsyslog
systemctl status rsyslog
启动并设置开机自启:
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
/var/log/messages 等文件缺失不同系统日志路径不同:
| 系统 | 默认日志 |
|---|---|
| CentOS / RHEL | /var/log/messages |
| Ubuntu | /var/log/syslog |
| 旧系统 | /var/log/messages |
检查:
ls -l /var/log/
如果只有:
journal/
说明 只启用了 journald
检查配置:
cat /etc/rsyslog.conf
ls /etc/rsyslog.d/
常见问题:
stop 规则阻断重启 rsyslog:
sudo systemctl restart rsyslog
df -h /var/log
ls -ld /var/log
ls -l /var/log/syslog
修复示例:
chown root:adm /var/log/syslog
chmod 640 /var/log/syslog
Docker / Kubernetes 中:
查看方式:
docker logs 容器ID
查看:
journalctl --disk-usage
如为 0 或很小,可能未持久化。
开启持久化:
mkdir -p /var/log/journal
systemctl restart systemd-journald
你可以按顺序检查:
# 1. 是否使用 systemd
ps -ef | grep systemd
# 2. 是否有 rsyslog
which rsyslogd
# 3. 服务状态
systemctl status rsyslog
# 4. 日志路径
ls /var/log/
# 5. journal 日志
journalctl -n 50
Linux syslog “缺失” 90% 是因为系统已改用 systemd-journald,而不是真的没有日志。
如果你愿意,可以告诉我:
/var/log 目录内容我可以 精确判断你这台机器该用哪种日志系统,并给出修复方案。