我试图设置syslog-ng来正确parsingRFC5424-编译消息,迄今为止,收效甚微。 根据syslog-ng文档,
syslog-ng OSE应用程序可以自动parsing符合RFC3164(BSD或legacy-syslog)或RFC5424(IETF-syslog)消息格式的日志消息。 如果syslog-ng OSE无法parsing消息,则会导致错误。
这表明syslog-ng不需要额外的参数来实际parsing这些消息。 但是,它不是。
这里是我的syslog-ngconfiguration的相关部分:
template remote_message { template("${R_ISODATE} s=${SDATA} mesg=${MSGONLY}\n"); }; source s_remote { tcp(port(514)); syslog(transport(tcp)); }; destination d_remote { file( "/var/log/remote.log" owner(root) group(root) create_dirs(yes) template(remote_message) ); }; log { source(s_remote); destination(d_remote); };
服务器在端口514上侦听,并从远程源获取日志,但是根本不分析它们。 发送以下消息(从RFC文本复制):
<165>1 2003-10-11T22:14:15.003Z sender.computer.org evententry - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] Test message
会生成以下日志条目:
2016-04-26T16:22:31+02:00 s= mesg=2003-10-11T22:14:15.003Z sender.computer.org evententry - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] Test message
正如你所看到的,这个消息根本就不被parsing。 与文档相反,这不会导致错误:根据文档,如果on-error选项设置为fallback-to-string ,则syslog-ng应该“将错误消息logging到internal()源”中,但是没有这样的日志。
我有一种感觉,我错过了一些非常基本的东西,因为它真的应该工作。 我错过了什么?
你的源似乎有点错误configuration:
source s_remote { tcp(port(514)); syslog(transport(tcp)); };
这实际上是两个来源:
所以,如果你发送你的RFC5424消息到端口601,它应该工作(除非某些防火墙阻止监听端口601)。
HTH,
罗伯特Fekete