如何让 haproxy 日志消息远离 /var/log/syslog

如何让 haproxy 日志消息远离 /var/log/syslog

我使用以下提示通过 rsyslogd 设置了 haproxy 日志记录本文,一切似乎都运行正常。日志文件获取日志消息。

但是,haproxy 的每条日志消息也会显示在 中/var/log/syslog。这意味着一旦服务器上线,系统日志将毫无用处,因为它将被 haproxy 日志消息所覆盖。

我想过滤掉这些消息/var/log/syslog。在阅读了 rsyslogd 文档后,我尝试更改文件/etc/rsyslog.d/50-default.conf如下:

*.*;auth,authpriv.none;haproxy.none     -/var/log/syslog

我只是添加了;haproxy.none部分内容。重新启动 rsyslogd 后,它完全停止工作,直到我恢复更改。

我究竟做错了什么?

答案1

您还可以执行以下操作,以使它们不会进入任何其他日志:

local0.*                        -/var/log/haproxy.log
& ~

& ~意味着不要将上面一行中匹配的内容放在其余规则的任何其他地方。

答案2

在 rsyslogd v7 中,已弃用& ~,我们鼓励您改用& stop。您可以在本节中阅读更多相关信息v7兼容性页面

omruleset 和 discard (~) 操作已弃用

这两种方法都可以继续发挥作用,但是已经被更好的方法所取代。

丢弃操作(波浪符号)已被“stop” RainerScript 指令取代。它被认为更直观,并且性能略有提高。

omruleset 模块已被“call” RainerScript 指令取代。Call 允许像执行子程序一样执行规则集,并且执行性能比 omruleset 高得多。请注意,omruleset 可以从异步队列运行。这更多的是一种副作用,而不是预期效果,并且不受 call 语句支持。如果需要该效果,只需通过异步运行调用的规则集操作即可模拟(无论如何,这是处理此问题的正确方法)。

请注意,弃用的模块在使用时会发出警告消息。它们会告知构造已弃用以及将使用哪个语句进行替换。这不会影响操作:这两个模块仍可完全运行,并且不会在 v7 时间范围内被删除。

因此对于 HAProxy 来说应该像这样:

$ more /etc/rsyslog.d/haproxy.conf
local2.*    /var/log/haproxy.log
& stop

至于其工作原理,& stop告诉 rsyslogd 丢弃到目前为止与先前匹配的规则匹配的任何其他消息。为了保证尽早选择此规则,您可以将文件的名称从 更改/etc/rsyslog.d/haproxy.conf/etc/rsyslog.d/00-haproxy.conf

答案3

好的,我明白了。我的/etc/rsyslog.d/20-haproxy.conf看起来是这样的:

$ModLoad imudp
$UDPServerRun 514

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

我把该行改为50-default.conf

*.*;auth,authpriv,local0,local1.none     -/var/log/syslog

现在它似乎正在做我想要的事情。

答案4

我不希望打乱文件的顺序,因此我添加了 local0.none 到行条目。配置如下:

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

local2.*                                                 /var/log/haproxy.log

(在 CentOS 7 上测试)

希望有帮助!

相关内容