如何保持haproxy日志消息不在/ var / log / syslog中

我使用这篇文章的技巧,通过rsyslogd设置了haproxy logging,并且一切似乎都正常。 日志文件获取日志消息。

但是,来自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后,它完全停止工作,直到我恢复了我的更改。

我究竟做错了什么?

你也可以做以下的事情,使它们不会进入任何其他日志:

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

& ~意味着不要把其他规则中其他地方的匹配。

在rsyslogd的第7版中已经弃用& ~ ,build议您使用& stop来代替。 您可以在v7compatibility页面的这一部分阅读更多关于它的信息 。

omruleset和discard(〜)动作已被弃用

两者都继续工作,但已被替代更好的替代品。

放弃行为(代字符)已被“停止”RainerScript指令取代。 它被认为更直观,并提供稍好的性能。

omruleset模块已被“call”RainerScript指令取代。 调用允许像子例程那样执行一个规则集,并且执行比omruleset更高的性能。 请注意,omruleset可以运行在asynchronous队列中。 这是一个比预期的效果更重要的一面,并没有被通话声明所支持。 如果需要这种效果,可以简单地通过asynchronous运行被调用的规则集操作(在任何情况下是正确的方式来处理这个操作)来模拟。

请注意,弃用的模块在使用时会发出警告消息。 他们说这个构造已经被弃用,哪个语句被用作replace。 这不会影响操作:这两个模块仍然可以完全运行,并且不会在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

好的,我明白了。 这就是我的/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 

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

haproxy日志有一个更好的解决scheme。

  • HAproxy在chroot下运行,所以它不能访问/dev/log
  • 根据rsyslog的官方手册需要configuration来监听networking套接字:

     # 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 ....... 

我宁愿不要乱用文件的顺序,所以我添加一个local0.none的 行input。 configuration如下所示:

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

(在CentOS 7上testing)

希望有所帮助!