RSyslog post 处理和远程转发

RSyslog post processing and remote forwarding

我正在使用 Rsyslog 进行分布式日志收集。据我了解,Debian 上的日志流从 journals 开始,然后到 syslog socket,然后由 rsyslog clients 获取。在我的例子中,RS 客户端正在 post 处理通过添加额外信息收集的日志,如 time-generatedpriorityhostname 等。有 两个 /etc/rsyslog.d/*.conf 在每个节点上使用:

  1. 用于捕获本地日志并在终端上显示(转发到规范)
  2. 用于转发日志到其他节点

最近,我 运行 遇到以下问题: - 所有节点都具有相同的配置,转发节点正在将 post 处理信息添加到日志中。收到时,在发送给终端之前,本地配置也在添加post处理信息(制作两次)。 time generated 等某些信息不会重复,但主机名等信息会打印两次。我两次都必须 post 处理,因为日志服务器可能 external or internal 并且转发的 v/s 本地日志应该看起来相同。

任何指点都会很有帮助,谢谢!

规格: 节点:Debian Jessie、Systemd 215、Rsyslog 8.3.3 服务器:同上或外部 rsyslog 服务器

在 debugging/digging 进入文档后,这是我的观察结果:

  1. Rsyslog parser 尽力识别日志格式,尤其是 header 部分。
  2. %time-generated% 这样的属性,如果识别正确,将不会在 relay/collector 处重复。
  3. 虽然我的模板符合 RFC5424,但解析器没有正确选择格式;因此重复。这是我用来参考的格式: <%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n
  4. 我切换到预定义的 RFC5424 模板 RSYSLOG_SyslogProtocol23Format,现在一切似乎都很好。

希望这能解决所有问题。请随时进一步讨论这个问题:-) 一篇帮助我理解 rsyslog 解析器本质的非常好的文章是 this