到目前为止,我正在尝试设置 syslog-ng 以正确解析 RFC5424 编译消息,但收效甚微。根据 syslog-ng 文档,
syslog-ng OSE 应用程序可以自动解析符合 RFC3164(BSD 或 legacy-syslog)或 RFC5424 (IETF-syslog) 消息格式的日志消息。如果 syslog-ng OSE 无法解析消息,则会导致错误。
这表明 syslog-ng 不需要额外的参数来实际解析这些消息。然而,事实并非如此。
这是我的 syslog-ng 配置的相关部分:
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
如您所见,消息根本没有被解析。与文档相反,这不会导致错误:根据文档,如果on-error
选项设置为fallback-to-string
, syslog-ng 应该“将错误消息记录到 internal() 源”,但不会生成此类日志。
我有一种感觉,我在这里遗漏了一些非常基本的东西,因为它确实应该起作用。我错过了什么?
您的来源似乎配置错误:
这实际上是两个来源:
因此,如果您将 RFC5424 消息发送到端口 601,它应该可以工作(除非某些防火墙阻止侦听端口 601)。
高温下,
罗伯特·费克特