如何将haproxy日志消息保留在/ var / log / syslog中


29

我使用本文的技巧通过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后,它完全停止工作,直到我还原更改。

我究竟做错了什么?

Answers:


26

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

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

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


谢谢。这似乎比必须编辑主配置更有意义。
itsadok 2010年

13
值得一提的是,必须在/etc/rsyslog.d/50-default.conf中的“ ”行之前处理local0。*行。我创建了一个名为/etc/rsyslog.d/haproxy.conf的文件,其中包含特定于haproxy的日志记录配置,但是尽管末尾带有“&〜”,但它仍记录到syslog中。这是因为(当然)在haproxy.conf之前加载了50-default.conf,因此在我的“ local0。*”行之前匹配了catchall“ ”。解决方案是将我的haproxy专用文件重命名为/etc/rsyslog.d/49-haproxy.conf
Giles Thomas

1
仅供参考,一个小更新rsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD 2015年

本章讨论使用& stop代替& ~rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html
slm

14

& ~在rsyslogd的v7 中已弃用了,建议您& stop改用它。您可以在v7compatibility页面的此部分中阅读有关它的更多信息。

omruleset和抛弃(〜)操作已弃用

两者都继续起作用,但是已经被更好的替代方法所取代。

丢弃动作(波浪号字符)已由“停止” RainerScript指令代替。它被认为更直观,并且提供了更好的性能。

omruleset模块已由“调用” RainerScript指令代替。调用允许像子例程一样执行规则集,并且这样做的性能比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

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


通常最好不要修改其他软件包创建的配置文件,因为它会导致升级/所有权问题。如果这是一台一次性雪花服务器,则可以执行任何操作,但是对于自动部署而言,修改50-default.conf通常是“不好的事情”。
Bruce Edge

2

有一个更好的haproxy记录解决方案。

  • HAproxy在chroot中运行,因此无法访问 /dev/log
  • 根据官方手册,rsyslog需要配置为侦听网络套接字:

    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    

但您只能为此使用rsyslog套接字:

rsyslog.d / haproxy.conf:

    # HAproxy local socket
    $AddUnixListenSocket /var/lib/haproxy/dev/log
    :programname, contains, "haproxy" /var/log/haproxy.log
    & stop

haproxy.cfg:

    global
          log         /dev/log daemon
          chroot      /var/lib/haproxy
          .......

1

我不希望弄乱文件的顺序,因此我在其中添加了local0.none 行输入。配置看起来像:

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

local2.*                                                 /var/log/haproxy.log

(在CentOS 7上测试)

希望有帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.