私は 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.spoolDirectory
、QueueFileName
は の値です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.pl
Rsyslog git リポジトリにあります (ファイルを取得するには「raw」をクリックします)。https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl