Rsyslog ‘logger’ 消息重复

Rsyslog ‘logger’ 消息重复

我刚刚遇到了 rsyslog 的 imjournal 模块的问题,可能是此处描述的问题,其中 systemd 日志导致的并发症

日志在紧密循环中不断返回相同的数据。这会导致 rsyslog 内出现大量消息重复,当系统资源耗尽时,可能会导致拒绝服务

无论如何,它确实使处理器无法重复几个月前的消息。我没有意识到 rsyslog 和 Journald 默认情况下如此紧密地耦合,因此我重新配置了前者,以使用更传统、更高效的实时套接字进行输入这些说明:

$ModLoad imuxsock
$OmitLocalLogging off

就套接字的创建和使用而言,这似乎是有效的。然而,当我测试它时,我发现了一个奇怪的事情。

> logger "hello world"

结果在 中/var/log/syslog,其中提到只有一次rsyslog.conf

Apr 17 10:35:45 pidora logger: hello world
Apr 17 10:35:45 pidora logger: hello world

该消息被重复,似乎所有其他消息也是如此。其中一些是完全相同的,而另一些则仅在一方面有所不同:

Apr 17 10:42:26 pidora systemd[1]: Stopping System Time Synchronized.
Apr 17 10:42:26 pidora systemd: Stopping System Time Synchronized.

[1]是一个pid。我相信发生的事情是 rsyslog 从应用程序获取消息一次,然后再次从日志获取消息。

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

答案1

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

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

ForwardToSyslog=no

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

转发到系统日志=

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

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

答案2

我也尝试了这个建议,但我发现它对我的系统没有影响。相反,我发现这个评论很有帮助: 系统日志复制所有内容

注释这一行 .=info;.=notice;.=警告;出来,意思是#.=信息;.=通知;.=警告; 。重新启动 rsyslog。

因为规则/etc/rsyslog.conf是造成这种现象的原因。

实际上我可以用提示来证明这一点“你好世界”日志消息

在我的系统上我发现这些配置/etc/rsyslog.conf

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# Log services messages
daemon.=error                                           /var/log/kern.log
daemon.*;daemon.!=error                                 /var/log/messages

我添加了daemon设施规则来注册自动化流程中的活动。

现在我尝试了这些测试消息:

$ logger hello my server01 world

并在中找到此日志消息/var/log/messages

Mar 22 13:35:41 server01 user01: hello my server01 world

但当我尝试时

$ logger -p daemon.info hello my server01 02

我发现这些日志消息:

Mar 22 13:38:15 server01 usre01: hello my server01 02
Mar 22 13:38:15 server01 user01: hello my server01 02

这让我改变了我的规则以/etc/rsyslog.conf添加daemon.none排除规则:

*.info;mail.none;authpriv.none;cron.none;daemon.none     /var/log/messages

并重新启动rsyslog服务。这实际上阻止了这种现象。

答案3

就我而言,rsyslog.conf 文件中有以下行

$OmitLocalLogging off

我将其设置为

$OmitLocalLogging on

重新启动 rsyslog 服务。复制停止了。我也按照您的建议检查了记录器命令。非常感谢

相关内容