选项 ForwardToSyslog 的日志套接字缓冲

选项 ForwardToSyslog 的日志套接字缓冲

我的配置中,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 代码冲突
  • 好像是官方不鼓励

相关内容