根据消息内容进行rsyslog过滤

根据消息内容进行rsyslog过滤

我有一个正在写入系统日志的应用程序。写入系统日志的消息是针对需要过滤掉的各种存储桶的。每条消息都以存储桶编号开头,因此消息的写法如下:

1: Message for bucket 1
14: Message for bucket 14
123: Message for bucket 123

我想根据存储桶编号过滤这些消息,我想这可以用正则表达式来完成。这些存储桶是数字,范围是 1-999。这些存储桶的输出应该发送到不同的文件,每个存储桶一个。对于上面的例子,它应该是:

/var/log/myapp/1.log
/var/log/myapp/14.log
/var/log/myapp/123.log

有人可以帮我了解如何使用 rsyslog 完成此操作吗?

答案1

我在 rsyslog 配置中做了一个简单的过滤。

在我的系统中它看起来像这样:

:msg, contains, "123: Message for bucket 123" -/var/log/myapp/123.log

这将在传入的系统日志消息的 msg 属性中搜索该字符串,并将其记录到我指定的文件中。

如果您想了解有关配置 rsyslog 的更多信息,这里是一个很好的起点:http://www.rsyslog.com/doc/rsyslog_conf.html

答案2

我想我这个答案有点晚了,但实际上 rsyslog 允许您动态创建日志文件名,因此您可以创建一个模板,该模板根据 msg 内容构造日志文件名,使用字段编号或者正则表达式.子匹配属性来提取桶号 - 参见http://www.rsyslog.com/doc/master/configuration/templates.html了解详情。

然而,如果你对 999 行感到满意,那当然更简单,Ronaldo Nascimento 所讨论的问题可以通过使用来解决包含_i代替包含-包含_i不区分大小写。

相关内容