Logging

rsyslog udp 轉發在 2048 個字元處截斷

  • February 20, 2014

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 轉發的消息進行修復)

UDP沒有序列號,沒有辦法連貫地組合消息(如果它們亂序到達)

系統日誌 UDP 傳輸 - https://www.rfc-editor.org/rfc/rfc5426

3.1。每個數據報一條消息

每個 syslog UDP 數據報必須只包含一個 syslog 消息,它可以是完整的或被截斷的。消息必鬚根據 RFC 5424 進行格式化和截斷

$$ 2 $$. 數據報有效載荷中不得出現附加數據。

引用自:https://serverfault.com/questions/576904