Rsyslog:从自定义日志文件中,只转发匹配模式的消息

我想从一个自定义的日志文件( /home/ubuntu/test.log )转发匹配一个模式的消息(这里是HELLO )到远程/home/ubuntu/test.log服务器。

这是configuration:

 # cat /etc/rsyslog.d/05-forwarding.conf *.* @@rsyslogserver.mycompany.com:10514 # cat /etc/rsyslog.d/10-custom.conf $ModLoad imfile $InputFilePollInterval 1 $InputFileName /home/ubuntu/test.log $InputFileTag testlogs: $InputFileStateFile testlogs $InputRunFileMonitor :msg, contains, "HELLO" /var/log/testlog_error.log & stop :msg, !contains, "HELLO" stop 

问题:

  1. 所有发送到/var/log/syslog都已停止。 “ 不好
  2. /home/ubuntu/test.log中包含HELLO字词的消息将转到/var/log/testlog_error.log以及正在转发到远程rsyslog服务器,“ GOOD
  3. /home/ubuntu/test.log中不包含HELLO字词的消息不会进入/var/log/testlog_error.log这是很好,但这些消息正在转发到远程rsyslog服务器。 “ 不好

我的理想状况应该是:

  1. 系统和所有其他消息应继续到/var/log/syslog
  2. 这里没有改变。 这是按预期工作。
  3. /home/ubuntu/test.log 包含HELLO单词的/home/ubuntu/test.log应完全丢弃。 不要写入本地文件,也不要将这些消息转发到远程服务器。

需要帮助我解决上面的第1点和第3点。

实际上,您的文件/etc/rsyslog.d/05-forwarding.conf将转发所有经过思考的消息,而不仅仅是自定义文件/home/ubuntu/test.log中的消息。 所以,你可以删除它,就像你说的只是想转发你的自定义文件中的消息一样。

您的文件/etc/rsyslog.d/10-custom.conf必须如下所示:

 $ModLoad imfile $InputFilePollInterval 1 $InputFileName /home/ubuntu/test.log $InputFileTag testlogs: $InputFileStateFile testlogs $InputFileFacility local0 $InputRunFileMonitor :syslogtag, isequal, "testlogs:" { :msg, contains, "HELLO" { local0.* /var/log/testlog_error.log local0.* @@rsyslogserver.mycompany.com:10514 } stop } 

正如你所看到的,我添加了以下内容:

$ InputFileFacility local0

现在你的自定义文件将被监视,并且它的消息将被写入local0设施。 来自local0的消息将有与之关联的标签。

:syslogtag,isequal,“testlogs:”

这个规则只会匹配一个包含标签testlogs:的消息,这正是您想要的消息。 所以,所有其他的消息都会跳过它,并logging在/ var / log / syslog以及50-default.conf中的所有其他消息中。

:味精,包含“你好”

现在,您的文件中包含HELLO的所有消息都将logging在/var/log/testlog_error.log中,并转发到@@ rsyslogserver.mycompany.com:10514。

然后,“停止”将丢弃文件中正在写入local0的所有消息。