我使用 rsyslog 將日誌上傳到我的 Graylog 伺服器
/etc/rsyslog.conf
:
$InputFileName /var/log/apache-error.log
$InputFileFacility apache
$InputFileTag #apacheError:
$InputFileStateFile apache-error
$InputFileSeverity error
$InputRunFileMonitor
if $programname == '#apacheAccess' then @1.2.3.4:1514
一些長訊息在 Graylog 中被截斷(訊息末尾不可用)。
當我嘗試使用 netcat 在 UDP 中上傳長訊息時:
echo -n -e "$(for i in $(seq 0 64000); do echo -n '0123456789';done)" | nc -u 1.2.3.4 1514
該訊息位於 Graylog 中(在多個訊息中,但所有訊息均可用)
為什麼來自 rsyslog 的訊息的一部分被截斷,而來自 netcat 的訊息則沒有被截斷?
是否必須增加 MaximumSize 參數或其他參數?
我試過
$MaxMessageSize 256k
$MainMsgQueueDequeueBatchSize 256
但沒有成功
謝謝
答案1
rsyslogd 使用 syslog 協議,該協議定義於RFC 3164。在第 4.1 節中,它說
資料包的總長度必須為 1024 位元組或更小。
因此,rsyslog 正確地將訊息分割成更小的資料包,以符合 syslog 訊息的標準。
ncat 將訊息作為一個巨大的 blob 發送的原因是,ncat 對您發送的訊息類型的協定一無所知,因此它不知道應該拆分訊息。