我使用 /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
会被识别为source
。msg
按照 RFC5424 格式发送消息可以解决问题:
echo -n "foo bar:foobar" | nc -w1 -u foo bar
在这种情况下,系统日志将记录如下内容:
2023-12-02T17:06:20.852836+00:00 foo bar: foobar
并且过滤器工作正常。