如何按标签过滤 rsyslog 消息

如何按标签过滤 rsyslog 消息

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

我使用启动这些应用程序

command | logger -t TAG

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

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

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

我做错了什么?根据标签进行过滤的正确方法是什么,或者是否有更好的选择来获得类似的结果?

答案1

我没有使用过类似的东西(或 syslogtag),但我使用过:<blah>,<condition> ...(特别是:msg、contains……),但尝试

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

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


更新:已测试并

syslogtag 包含一个:,应该括在""而不是''

答案2

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

非常感谢@lain 引领我前行。

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

要恢复,请输入以下内容30-giomanager.conf

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

请注意,该文件/var/log/giomanager.log应该可由“syslog”用户写入。

答案3

这个redhat文档详细描述了如何过滤 rsyslog 日志并将其输出到单独的文件,甚至动态文件名。

相关内容