OMFileZipLevel のログ ファイルで rsyslog が予期しないファイル終了を検出する

OMFileZipLevel のログ ファイルで rsyslog が予期しないファイル終了を検出する

OS: Centos7
rsyslog: 8.24.0

さまざまなホストが集中rsyslogサーバーにログを送信しています。OMFileZipLevel構成ファイルのオプションを使用してログを圧縮し、zcatいつでも内容を表示できるようにしています。

にアップグレードしてからrsyslog8zcat圧縮されたログのいずれかにアクセスしようとすると、次のエラーが発生します。

#   zcat srv1.example.com.log.gz
2021-01-06T04:46:11-08:00 srv1.example.com lab: test_msg

gzip: srv1.example.com.log.gz: unexpected end of file

rsyslog サーバーを停止してファイルにアクセスすると、そのエラー メッセージは表示されません。サーバーを起動しても、EOF メッセージなしでログ ファイルを表示できます。しかしrsyslog サーバーがメッセージを受信して​​ファイルに書き込むと、同じメッセージが表示され始めます。

#   zcat srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg

gzip: srv1.example.com.log.gz: unexpected end of file


#   systemctl stop rsyslog

#   zcat  srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg


#   systemctl start rsyslog

#   zcat srv1.example.com.log.gz
2021-01-06T05:54:22-08:00 srv1.example.com lab: test_msg


srv1:~$ logger -p local5.info test_msg2 @my_rsyslog_server

#   zcat srv1.example.com.log.gz
2021-01-06T03:32:09-08:00 srv1.example.com lab: hab_test
2021-01-06T05:55:27-08:00 srv1.example.com lab: test_msg2

gzip: srv1.example.com.log.gz: unexpected end of file

同様の問題について言及しているメーリング リストを見つけることができましたが、これは rsyslog によってファイルがまだ開かれていることに関係しています。

実は、5.8.10まったく同じ rsyslog 構成ファイルを持つバージョン (Centos 6) を実行している別の rsyslog サーバーがあるのですが、圧縮されたログの EOF メッセージでそのような動作は発生しません。

これは rsyslog のバグでしょうか8.24.0?

答え1

closeTimeoutこれは正常な動作のようです。パラメータについてはよくわかりません。OMFileZipLevel通常、大量の出力を生成するサービスに適用されるため、ファイルが 10 分間 (または 10 秒間) 書き込まれなかったことは一度もありません。

GZIP はストリーム コンプレッサーなので、ファイルはヘッダーと末尾とともに書き込まれますが、末尾はファイルが閉じられて終了したと判断されるまで書き込まれません。そのため、zcat と gunzip は、書き込み中の通常の gzip ファイルの末尾に達するとエラーを出力します。

を使用するとOMFileZipLevel、rsyslog にログを通常の gzip ファイルに圧縮するように指示するので、これは引き続き適用されます。

rsyslogを使用するとveryRobustZip、小さなブロックのgzipデータを次々に連結したgzipファイルを構築することができ(gzipに準拠している)、zcatやgunzipでエラーなくデータを抽出することができます(ただし、rsyslogヘルプを参照する詳細を確認するには()をクリックしてください。

それにもかかわらず、私は開発しましたgzツールオプションに関係なく、rsyslogによって生成された圧縮ログファイルを簡単に管理できます。

  • tail -fテキストファイルの場合と同様に、.log.gzファイルを連続的に追跡するには、gztool -T
  • ログを送信するプロセスが突然停止して再起動した場合でも、すべてのデータを抽出します。これにより、zcat/gunzipでは到達できないデータを含むgzipファイルが生成されますが、gztoolでは問題なく抽出できます。gztool -p
  • gzip ファイル全体を読み込まずに、任意の部分からデータを抽出します (他のツールでは必須)

ただ使用例を参照してくださいgzツール

問題は、アップグレード前になぜこれが起こらなかったのかということです。同じ rsyslog 構成で以前にこれが起こらなかったと確信していますか?

関連情報