无法使 rsyslog 过滤器针对特定文件

无法使 rsyslog 过滤器针对特定文件

我使用 /var/rsyslog/foo.conf 配置 rsyslog 服务器以接受 udp 消息

$ModLoad imudp
$UDPServerRun 514

并尝试将以“foo”开头的日志内容过滤到/var/log/foo.log。我尝试了几个过滤器。

:msg, contains, "foo" /var/log/foo.log
:msg, startswith, "foo" /var/log/foo.log
:msg, regex, "'^\s*foo.*" /var/log/foo.log
if $msg startswith 'foo' then /var/log/foo.log;

什么都没起作用。我可以在 /vag/log/syslog 中获取正确的信息,但无法过滤它并输出到 foo.log。我从 syslog 获得的消息如下:

 2023-12-02T17:06:20.852836+00:00 foo

这证明 udp 和常规日志记录都很好。但不知道为什么过滤器不起作用。

我的rsyslog服务器版本是8.2302.0,操作系统是Debian 12。

答案1

我调试了rsyslog并解决了该问题。

收到的日志/var/log/syslog是:

2023-12-02T17:06:20.852836+00:00 foo

这意味着foo会被识别为sourcemsg按照 RFC5424 格式发送消息可以解决问题:

echo -n "foo bar:foobar" | nc -w1 -u foo bar

在这种情况下,系统日志将记录如下内容:

2023-12-02T17:06:20.852836+00:00 foo bar: foobar

并且过滤器工作正常。

相关内容