rsyslog udp 转发截断为 2048 个字符

nic*_*rix 7 logging syslog udp rsyslog

RHEL 6 服务器上的 Rsyslog 在端口 514 UDP 上本地接收消息。这些消息有时比正常的系统日志消息大小大得多。我看到 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
Run Code Online (Sandbox Code Playgroud)

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

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

 $MaxMessageSize 64k
Run Code Online (Sandbox Code Playgroud)

这是在我的 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
Run Code Online (Sandbox Code Playgroud)

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

**注意我确实通过使用 netcat 侦听 rsyslog 通过 UDP 转发到的本地端口来仔细检查它没有发生在远程 rsyslog 主机上。

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

小智 4

UDP 没有序列号,因此无法连贯地组合消息(如果它们到达时乱序)

系统日志 UDP 传输 - https://www.rfc-editor.org/rfc/rfc5426

3.1. 每个数据报一条消息

每个系统日志 UDP 数据报必须仅包含一条系统日志消息,该消息可以是完整的或被截断的。消息必须根据 RFC 5424 [2] 进行格式化和截断。附加数据不得出现在数据报有效负载中。