我想从一个自定义的日志文件( /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
问题:
/var/log/syslog都已停止。 “ 不好 /home/ubuntu/test.log中包含HELLO字词的消息将转到/var/log/testlog_error.log以及正在转发到远程rsyslog服务器,“ GOOD /home/ubuntu/test.log中不包含HELLO字词的消息不会进入/var/log/testlog_error.log这是很好,但这些消息正在转发到远程rsyslog服务器。 “ 不好 我的理想状况应该是:
/var/log/syslog /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的所有消息。