rsyslog - キューをフラッシュするにはどうすればいいですか?

rsyslog - キューをフラッシュするにはどうすればいいですか?

私は rsyslog を使用して haproxy からログを取得し、elasticsearch/kibana の logstash に格納しています。

すべて正常に動作していましたが、rsyslog に異常が見つかりました。

Kibana にデータが欠落していることがわかりました。 原因は rsyslog です。

ディスク上のキューは数日間保留され停止しました

週末のデータが欠落していますが、昨日と今日はすべて正常です。

Rsyslog は現在データを取得して logstash に格納していますが、独自のキューに格納されているデータについては忘れているようです (データが古いと認識して無視していると思います。そのためのパラメーターがあり、何らかのデフォルト値が使用されている可能性があります)。

現在、logstashはアイドル状態ですが、rsyslogキューから多くの追加データを強制的に送信できます。

私がやりたいことは次のとおりです。

一時的にこのキューをフラッシュしてみてください (postfix フラッシュのように)。これが不可能な場合は、何を試みるべきでしょうか?

私の 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#ディスクキュー

ハウスキーピング構造を紛失したり、必要になったりして、すべてのチャンクがキューに入っている場合は、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

関連情報