Rsyslog `logger` 消息重复

gol*_*cks 10 rsyslog systemd systemd-journald

我刚刚遇到了 rsyslog 的 imjournal 模块的问题,可能是这里描述的问题,即 systemd 日志导致的并发症

日志在一个紧密的循环中无休止地返回相同的数据。这会导致 rsyslog 中的大量消息重复,可能会在系统资源耗尽时导致拒绝服务

无论如何,它确实使处理器最大程度地消除了几个月前的重复消息。我没有意识到 rsyslog 和 journald 在默认情况下是如此紧密耦合,所以我重新配置了前者,使用更传统、更高效的实时套接字作为输入,按照以下说明

$ModLoad imuxsock
$OmitLocalLogging off
Run Code Online (Sandbox Code Playgroud)

就创建和使用套接字而言,这似乎有效。但是,我在测试它时注意到了一个奇怪的事情。

> logger "hello world"
Run Code Online (Sandbox Code Playgroud)

结果在 中/var/log/syslog在 中提到过一次rsyslog.conf

Apr 17 10:35:45 pidora logger: hello world
Apr 17 10:35:45 pidora logger: hello world
Run Code Online (Sandbox Code Playgroud)

该消息被重复,似乎所有其他消息也是如此。有的完全一样,有的只有一个方面不同:

Apr 17 10:42:26 pidora systemd[1]: Stopping System Time Synchronized.
Apr 17 10:42:26 pidora systemd: Stopping System Time Synchronized.
Run Code Online (Sandbox Code Playgroud)

[1]是PID。我相信正在发生的事情是 rsyslog 从应用程序获取一次消息,然后从 journald 再次获取消息。

这有点傻。我怎样才能阻止它?

gol*_*cks 8

我相信正在发生的事情是 rsyslog 从应用程序获取一次消息,然后从 journald 再次获取消息。

是的。解决方案是将其包含在/etc/systemd/journald.conf

ForwardToSyslog=no
Run Code Online (Sandbox Code Playgroud)

为什么在使用时没有这个问题imjournal我不确定,但有一个提示man journald.conf

转发到系统日志=

[...] 日志守护进程应转发到传统的 syslog 守护进程 [...] 如果启用了转发到 syslog 但没有运行 syslog 守护进程,则相应的选项无效

我猜“正在运行的系统日志守护程序”的实际含义是传统系统日志套接字的字面意思。