Rsyslog

為什麼 syslogd 在啟動期間和啟動後不向遠端伺服器報告消息?

  • November 29, 2015

我配置rsyslog為將日誌發送到中央日誌伺服器,如下所示:

*.* @@192.168.1.20
$ActionExecOnlyWhenPreviousIsSuspended on
& @@192.168.1.21
& /var/log/failover
$ActionExecOnlyWhenPreviousIsSuspended off

它執行良好,除非機器正在啟動。當虛擬機啟動時和機器啟動大約二十秒後,沒有消息發送到 192.168.1.20 或 192.168.1.21。但是,/var/log/failover包含所有那些“失去”的消息。

作為測試,我啟動機器並手動輸入:

$ logger 1
$ logger 2
$ logger 3
...

第一個中央日誌伺服器只包含:

Nov 28 13:57:40 demo arsene: 10

第二個日誌伺服器不包含來自demo機器的消息。

最後,機器var/log/failoverdemo包含:

Nov 28 13:57:10 demo rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="361" x-info="http://www.rsyslog.com"] start
Nov 28 13:57:10 demo rsyslogd: rsyslogd's groupid changed to 104
Nov 28 13:57:10 demo rsyslogd: rsyslogd's userid changed to 101
... # more than a hundred usual messages from the kernel
Nov 28 13:57:20 demo kernel: [   12.127981] random: nonblocking pool is initialized
Nov 28 13:57:21 demo arsene: 1
Nov 28 13:57:22 demo arsene: 2
Nov 28 13:57:23 demo arsene: 3
Nov 28 13:57:25 demo arsene: 4
Nov 28 13:57:27 demo arsene: 5
Nov 28 13:57:28 demo arsene: 6
Nov 28 13:57:30 demo arsene: 7
Nov 28 13:57:32 demo arsene: 8
Nov 28 13:57:37 demo arsene: 9

我在 Ubuntu 和 Debian 虛擬機上都遇到了這個問題。

補充筆記:

  1. 網路連接看起來不錯。如果我嘗試在日誌消息未發送到日誌伺服器期間,兩者ping 192.168.1.20都成功。curl google.com``ping``curl
  2. 禁用日誌伺服器的防火牆無效。
  3. 執行tcpdump顯示在 20 秒期間沒有任何內容髮送到日誌伺服器。
  4. 網路上的其他 Ubuntu 機器(使用非常不同的方法部署)將它們的日誌報告給日誌伺服器,包括在引導期間。
  5. 通過將故障機器與正確機器進行比較,我注意到rsyslogd. 在故障機器上升級rsyslogd到版本 8.14.0 並沒有解決問題,但現在我在日誌報告開始工作後看到以下消息:
Nov 29 02:18:39 demo rsyslogd-2359: action 'action 11' resumed (module 'builtin:omfwd') [v8.14.0 try http://www.rsyslog.com/e/2359 ]
  1. diff表明新故障機器/etc/rsyslog.conf/etc/rsyslog.d/*.conf舊機器之間的文件完全相同。
  2. A apt-get updateapt-get upgrade甚至apt-get dist-upgrade還沒有解決問題。

正如@ThomasDickey 所說,當使用者態程序開始執行時,網路可能還沒有完全啟動。許多企業乙太網交換機在介面出現後的數秒內不接受數據包,因為它們試圖協商生成樹設置。

rsyslog的actionresumeinterval設置預設為 30 秒。如果在任何使用 TCP 連接的指令之前將其設置為較小的值,則會增加重試率,並且連接應該更快地完成。

您還可以設置其他選項,以確保在連接準備好後立即發送未發送的早期消息。例如,您可以使用類似於以下的選項:

$ActionResumeInterval 5
$ActionQueueType disk
$WorkDirectory /var/spool/rsyslog
$ActionQueueFilename actionRq
$ActionQueueMaxDiskSpace 1m
$ActionQueueSize 4000
$ActionQueueTimeoutEnqueue    0
$ActionResumeRetryCount -1

引用自:https://unix.stackexchange.com/questions/246076