syslog-ng 不解析消息

syslog-ng 不解析消息

我正在尝试设置 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() 源”,但没有生成此类日志。

我感觉我在这里遗漏了一些非常基本的东西,因为它确实应该起作用。我遗漏了什么?

答案1

您的来源似乎有点配置错误:

source s_remote {
    tcp(port(514));
    syslog(transport(tcp));
};

这其实有两个来源:

  • 第一行在端口 514 上监听 RFC3164 消息
  • 第二行在端口 601 上监听 RFC5424 消息( syslog() 源的默认端口)

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

高血压,

罗伯特·费凯特

相关内容