Ubuntu syslog故障排查方法
一 快速定位与基础检查
sudo systemctl status rsyslog;若未运行则 sudo systemctl start rsyslog 并设置开机自启 sudo systemctl enable rsyslog。如使用 syslog-ng,将命令中的服务名替换为 syslog-ng。服务异常是日志不写或丢失的最常见原因。sudo journalctl -u rsyslog(或 -u syslog-ng),关注启动失败、权限拒绝、配置语法错误等线索。sudo tail -n 200 /var/log/syslog 或 tail -f 实时观察。若文件长时间不更新,多半是服务未运行或配置未生效。二 配置语法与日志级别验证
sudo rsyslogd -N1(语法无误才会退出码为0),随后 sudo systemctl restart rsyslog。*.info;mail.none;authpriv.none;cron.none /var/log/syslog 控制记录范围;或在单独设施上提升级别,例如 kern.alert /dev/console、mail.* -/var/log/mail.log。常见级别从低到高为:debug、info、notice、warning、err、crit、alert、emerg。if $programname == 'your-service-name' then /var/log/your-service-errors.log 与 & stop。修改后重启服务生效。-r,现代 rsyslog 多以模块方式配置),并确保网络与防火墙放行 UDP/TCP 514(TLS 为 6514)。三 磁盘空间与日志轮转处理
sudo du -h --max-depth=1 /var/log 逐级查找异常增长的文件或目录。sudo sh -c 'cat /dev/null > /var/log/syslog'(避免直接 rm 导致句柄占用与写入失败)。sudo journalctl --vacuum-size=300M(可按需调整为 100M–1G),并可在 /etc/systemd/journald.conf 中设置 SystemMaxUse=、MaxRetentionSec= 等长期策略后 sudo systemctl restart systemd-journald。/etc/logrotate.d/rsyslog(或针对单个日志文件),示例:/var/log/syslog {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
postrotate
systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
这能避免单日志无限增长、历史日志难追溯等问题。四 权限与网络连通性排查
logger -p local0.info "test message" 发送测试;在接收端 tail -f /var/log/syslog 观察是否到达。网络侧确保 514/6514 端口与防火墙策略正确。五 高频场景与对应处置
systemctl status rsyslog 与 journalctl -u rsyslog 查错;修复后 systemctl restart rsyslog。rsyslogd -N1 语法检查,再重启服务。df -h、df -i),其次查看是否触发了异常的高频日志循环。logger 做端到端测试。