rsyslog udp 转发在 2048 个字符处截断

rsyslog udp 转发在 2048 个字符处截断

RHEL 6 服务器上的 Rsyslog 在端口 514 UDP 上本地接收消息。这些消息有时比正常的 syslog 消息大小大得多。我发现 rsyslog 可以很好地处理所有消息,它会毫无问题地写入本地文件。但是,当我将远程主机添加到 rsyslog 配置时,这些相同的大消息在 2048 个字符左右被截断。

我正在运行 rsyslogd 版本:5.8.10

rsyslogd 5.8.10, compiled with:
  FEATURE_REGEXP:               Yes
  FEATURE_LARGEFILE:            No
  GSSAPI Kerberos 5 support:        Yes
  FEATURE_DEBUG (debug build, slow code):   No
  32bit Atomic operations supported:    Yes
  64bit Atomic operations supported:    Yes
  Runtime Instrumentation (slow code):  No

我对 rsyslog conf 所做的唯一更改是以下两点:

这是我的 rsyslog conf 文件的最顶部:

 $MaxMessageSize 64k

这是我的 rsyslog conf 文件的最底部:

$template RemoteHost,"<%%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%
*.* @my-rsyslog-central-logger:514; RemoteHost

有谁知道为什么 rsyslog 会截断通过 UDP 传输到远程主机的日志,但是在将日志写入本地文件时却能够处理它们?

**请注意,我确实通过使用 netcat 监听 rsyslog 通过 UDP 转发到的本地端口,仔细检查了它是否发生在远程 rsyslog 主机上。

** 注意,我确实尝试过 TCP,但它没有截断较大的转发消息,所以现在的问题是为什么 UDP 会截断。(我假设答案可能与 UDP 的属性有关,但我仍然想知道,如果可能的话,也许可以修复 UDP 转发消息)

答案1

UDP 没有序列号,因此无法将消息连贯地组合在一起(如果消息到达的顺序不正确)

Syslog UDP 传输 -https://www.rfc-editor.org/rfc/rfc5426

3.1. 每个数据报一个消息

每个 syslog UDP 数据报必须仅包含一条 syslog 消息,该消息可以是完整的,也可以是截断的。该消息必须按照 RFC 5424 [2] 进行格式化和截断。数据报有效负载中不得存在其他数据。

相关内容