我的配置中,journald 设置为ForwardToSyslog=yes
.引用自文档:
如果启用了转发到 syslog,但没有任何内容从套接字读取消息,则转发到 syslog 不起作用。
我通过以下测试经历了不同的观察:
systemctl disable rsyslog
systemctl stop rsyslog
logger "rsyslog is dropped, journald won't forward this message"
systemctl enable rsyslog
systemctl start rsyslog
# This shouldn't find anything
grep "rsyslog is dropped" /var/log/syslog
Mar 15 16:26:23 hostname user: rsyslog is dropped, journald won't forward this message
结果是 rsyslog 成功处理了该消息。
rsyslog 已设置,但没有读取期刊数据库的能力。
我的假设是套接字缓冲功能导致 rsyslog 在运行之前接收。
如果是这种情况,是否可以以某种方式删除至少强制从 bash 刷新套接字的缓冲,以便 rsyslogs 历史记录与其一起启动?
答案1
一种选择是让 rsyslog 直接使用套接字,而不依赖于从套接字接收数据systemd
:
# /etc/rsyslog.conf should contain
module(load="imuxsock"
SysSock.Use="on"
SysSock.Name="/run/systemd/journal/syslog")
# cat /lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/
[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n
StandardOutput=null
Restart=on-failure
[Install]
WantedBy=multi-user.target
这有多重含义:
- 当套接字上有事件时,rsyslog不会自动启动(这是我想要实现的,只是明确的)
- 目前尚不清楚这是否与与 systemd 套接字激活相关的 rsyslog 代码冲突
- 好像是官方不鼓励