syslog-ng不parsing消息

我试图设置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)); }; 

这实际上是两个来源:

  • 第一行在端口514侦听RFC3164消息
  • 第二行在端口601(syslog()源的缺省端口)上侦听RFC5424消息)

所以,如果你发送你的RFC5424消息到端口601,它应该工作(除非某些防火墙阻止监听端口601)。

HTH,

罗伯特Fekete