Debian Jessie下程序syslog日志部分未同步至rsyslog,仅可通过journalctl查看
Debian Jessie下syslog日志未同步至rsyslog的问题排查及解决
可能的原因及对应解决方法
1. journald未启用syslog转发
Debian Jessie默认使用systemd-journald接管系统日志,若journald未配置将日志转发给rsyslog,部分直接提交给journald的消息只会留在journal中。
- 解决方法:
- 编辑
/etc/systemd/journald.conf,确保FeedSyslog=yes(去掉注释并设置为yes) - 重启相关服务:
systemctl restart systemd-journald systemctl restart rsyslog
- 编辑
2. rsyslog未匹配到日志的设施/优先级
程序调用syslog()时指定的日志设施(facility)或优先级(priority)可能未被rsyslog的配置规则匹配,导致这些日志未被写入文件,但journald会记录所有日志。
- 解决方法:
- 确认程序中
syslog()调用的参数,比如使用的是LOG_LOCAL0/LOG_USER等设施,以及对应的优先级(如LOG_INFO) - 编辑rsyslog配置文件(如
/etc/rsyslog.conf或/etc/rsyslog.d/your-service.conf),添加匹配规则,例如:# 匹配LOG_LOCAL0设施的所有优先级日志,写入指定文件 local0.* /var/log/myservice.log - 用
logger命令测试规则是否生效:
检查目标日志文件是否收到该消息logger -p local0.info "Test log message"
- 确认程序中
3. rsyslog未配置从journald读取日志
若rsyslog未加载imjournal模块,无法从journald获取已被截获的日志消息,导致部分日志仅在journalctl中可见。
- 解决方法:
- 编辑
/etc/rsyslog.conf,确保添加以下配置:$ModLoad imjournal $IMJournalStateFile imjournal.state - 重启rsyslog服务:
systemctl restart rsyslog
- 编辑
4. rsyslog缓冲区溢出导致消息丢失
高负载场景下,rsyslog的默认缓冲区大小可能不足以处理突发日志,导致部分消息被丢弃。
- 解决方法:
- 编辑rsyslog配置文件,增大主消息队列大小:
$MainMsgQueueSize 10000 - 检查
/var/log/syslog中是否有queue overflow相关的错误日志,确认是否是缓冲区问题 - 重启rsyslog服务
- 编辑rsyslog配置文件,增大主消息队列大小:
5. 日志消息长度超过rsyslog限制
syslog()发送的消息若超过rsyslog的默认最大消息长度(2048字节),会被截断或直接丢弃。
- 解决方法:
- 编辑rsyslog配置文件,增大最大消息长度:
$MaxMessageSize 8192 - 重启rsyslog服务
- 编辑rsyslog配置文件,增大最大消息长度:
内容的提问来源于stack exchange,提问作者hpirlo
相关产品推荐
相关产品推荐

