CentOS syslog无法正常工作的常见原因及排查方向
CentOS系统默认使用rsyslog作为syslog服务,若服务未启动或未配置开机自启,会导致日志无法收集。需通过以下命令检查服务状态:sudo systemctl status rsyslog;若未运行,使用sudo systemctl start rsyslog启动服务,并通过sudo systemctl enable rsyslog设置开机自启。
rsyslog的主配置文件/etc/rsyslog.conf或/etc/rsyslog.d/目录下的子配置文件可能存在语法错误、日志路径设置不当或日志级别配置不合理(如过滤了所有日志)。例如,默认配置中*.* @remote_host:514(远程日志转发)若格式错误,会导致日志无法发送。需仔细检查配置文件语法(可通过rsyslogd -N1测试配置有效性),修改后重启服务使更改生效。
syslog服务需要具备访问日志文件和网络端口的权限。常见情况包括:
/var/log/messages的属主/属组非root:adm,或权限过严);ls -l /var/log/messages检查日志文件权限(正确应为-rw-r----- 1 root adm),并通过chown root:adm /var/log/messages、chmod 640 /var/log/messages修正;若启用SELinux,可使用audit2allow工具生成允许规则或临时设置setenforce 0测试。rsyslog默认使用UDP 514端口(远程日志)或TCP 445端口(Syslog over TCP),若端口被其他进程占用(如netstat -tuln | grep 514显示已被占用),会导致服务异常;此外,防火墙未开放对应端口会拦截日志传输(如CentOS 7/8的firewalld默认阻止UDP 514)。需通过systemctl stop firewalld临时关闭防火墙测试,或通过firewall-cmd --permanent --add-service=syslog、firewall-cmd --reload开放syslog服务端口。
若系统根分区或/var分区磁盘空间耗尽(可通过df -h检查),rsyslog无法写入新的日志文件。需清理无用文件(如/var/log/下的旧日志)或扩容分区以释放空间。
若需将日志发送至远程服务器,本地主机与远程服务器之间的网络连接必须正常(可通过ping remote_host测试连通性),且远程服务器的rsyslog服务需配置为监听对应端口(如module(load="imudp")加载UDP模块、input(type="imudp" port="514")开启UDP端口)。
部分应用程序需显式配置将日志发送至syslog(如通过logger命令或修改应用程序的日志配置文件),若应用程序未配置或配置错误(如日志级别低于syslog的过滤阈值),会导致日志未进入syslog。可通过logger "Test log message"手动发送测试日志,观察/var/log/messages是否记录。