rsyslog - 如何刷新佇列?

rsyslog - 如何刷新佇列?

我使用 rsyslog 從 haproxy 取得日誌並將其放入 Elasticsearch/kibana 的 Logstash 中。

一切正常,但我在 rsyslog 中發現了一些奇怪的東西。

我發現 kibana 中缺少數據。原因是rsyslog。

磁碟上的佇列被保留並停止了幾天

所以我丟失了週末的數據,但昨天和今天 - 一切都很好。

Rsyslog 現在取得資料並將它們放入Logstash 中,但他似乎忘記了儲存在自己的佇列中的資料(我認為他看到它們是舊的,並忽略它們,有參數,也許使用了一些預設值? )

現在,logstash 閒置,我可以從 rsyslog 隊列中強制向他提供許多附加數據

所以我想做的是:

暫時嘗試刷新此隊列(如後綴刷新),或者如果這是不可能的,我應該嘗試做什麼?

我的 rsyslog 設定是:

$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on

答案1

Rsyslog 磁碟佇列可能會因非正常關閉而卡住,導致假.qi脫機目錄中的檔案與假脫機檔案不同步。

在這種情況下,刷新/出列磁碟佇列可能需要執行 Rsyslog 提供的附加腳本(但不包含在分發包中)。根據https://www.rsyslog.com/doc/concepts/queues.html#disk-queues

如果您碰巧遺失或需要內務結構並擁有所有佇列區塊,您可以使用 rsyslog 套件中包含的 perl 腳本來產生它。用法:

recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi

其中$WorkDirectory是 的值queue.spoolDirectoryQueueFileName是 的值queue.fileName。也可以看看:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html

例子:

./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi

(在執行腳本之前停止 rsyslog 可能是個好主意。)

這是recover_qi.plRsyslog git 儲存庫(點選「raw」取得檔案):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl

相關內容