1

我正在使用 Rsyslog 进行分布式日志收集。据我了解,Debian 上的日志流journals从那时开始,然后syslog socketrsyslog clients. time-generated在我的例子中,RS 客户端通过添加额外信息(如、priority等)对收集的日志进行后处理hostname。每个节点上使用两个 /etc/rsyslog.d/*.conf

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

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

  • 这是处理分布式日志收集的最佳方式吗?
  • 如何避免重复的后处理字符串?
  • 为什么time-generated不被复制?

任何指针都会有帮助,谢谢!

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

4

1 回答 1

1

在调试/深入研究文档之后,这是我的观察结果:

  1. Rsyslog parser尽最大努力识别日志格式,尤其是标头组件。
  2. 如果正确识别,类似的属性%time-generated%将不会在中继/收集器处复制。
  3. 尽管我的模板与 RFC5424 对齐,但解析器没有正确选择格式;因此重复。这是我用作参考的格式: <%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n
  4. 我切换到预定义的 RFC5424 模板RSYSLOG_SyslogProtocol23Format,现在一切似乎都很好。

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

于 2018-01-26T18:00:18.870 回答