rsyslog-如何刷新队列?

rsyslog-如何刷新队列?

我正在使用 rsyslog 从 haproxy 获取日志并将它们放入 elasticsearch/kibana 的 logstash 中。

一切正常,但我在 rsyslog 中发现了一些奇怪的东西。

我发现 kibana 中缺少数据。原因是 rsyslog。

磁盘上的队列被搁置并停止了几天

所以我缺少周末的数据,但昨天和今天的数据一切正常。

Rsyslog 现在获取数据并将它们放入 logstash,但他似乎忘记了存储在他自己的队列中的数据(我认为他看到它们已经很旧了,并且忽略了它们,有一个参数,也许使用了一些默认值?)

现在,logstash 处于空闲状态,我可以从 rsyslog 队列中强制向其提供许多附加数据

所以我想要做的是:

暂时尝试刷新此队列(如 postfix flush)或者如果这不可能,我应该尝试做什么?

我的 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 存储库(单击“原始”以获取文件):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl

相关内容