题 如何按标签过滤rsyslog消息


我有几个应用程序和脚本,我想将输出重定向到自定义文件。

我使用启动这些应用程序

command | logger -t TAG

我想根据标签过滤这些消息,并将它们重定向到不同的文件。 我不想使用bash重定向,因为这些应用程序主要是长时间运行的进程,需要正确的日志轮换。

我试图在/etc/rsyslog.d/60-myfilter.conf中添加自定义过滤器;

if $syslogtag == 'giomanager' then /var/log/giomanager.log

我究竟做错了什么 ? 基于标签过滤的正确方法是什么,或者有更好的选择来获得类似的结果?


10
2018-06-11 10:42






答案:


我没有使用if(或syslogtag),但我已经使用过了 :<blah>,<condition> ... (特别是:msg,包含,......)但是试试

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

& stop (要么, & ~ 在rsyslog v6及更早版本(例如在RHEL6上))导致匹配的消息在记录后被丢弃,否则将被其他规则进一步解析。


更新:测试和

syslogtag包含一个 : 并且应该被包含在内 "" 而不是 ''


18
2018-06-12 09:24



感谢您的答复。我只是尝试了你的建议,确实消息被丢弃但是永远不会被写入 /var/log/giomanager.log - mistyrouge
@mistyrouge:看看我的更新 - Iain
非常感谢,我现在将我的日志重定向到 /var/log/giomanager.log  但 它仍然写入/ var / log / syslog。你知道为什么会发生这种情况以及如何预防吗? - mistyrouge
弃用行动(〜指标)已弃用:已被(更好)替代“停止”声明取代: kb.monitorware.com/kbeventdb-detail-id-7171.html - Ivan Rave


所以我终于找到了解决问题的方法。

非常感谢@lain带领我的方式。

如前所述的解决方案是在标签名称中包含“:”。此外,这非常重要,文件名必须在之前 50-default.conf 按字母顺序排列。

要恢复,请将以下内容放入 30-giomanager.conf :

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

注意该文件 /var/log/giomanager.log 应该可以由'syslog'用户写入。


6



谢谢@mistyrouge。我遇到了同样的问题。登录到正确的文件后,我的日志被重定向到/ var / log / syslog。你知道为什么会发生这种情况以及如何预防吗? - Mayank Patel
我无法使用它来过滤bind9日志。相反,':programname,isequal,“named”/var/log/named/named.log'有效。可能是因为标签就像“命名[32193]”。 - Rennex
您可以使用 startswith 代替 isequal 例如,如果标签包含PID。要么 regex 对于复杂的比赛。 - Tim Sylvester