我使用以下提示通过 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 上测试)
希望有帮助!