OS: Centos7
rsyslog: 8.24.0
さまざまなホストが集中rsyslog
サーバーにログを送信しています。OMFileZipLevel
構成ファイルのオプションを使用してログを圧縮し、zcat
いつでも内容を表示できるようにしています。
にアップグレードしてからrsyslog8
、zcat
圧縮されたログのいずれかにアクセスしようとすると、次のエラーが発生します。
# 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 構成で以前にこれが起こらなかったと確信していますか?