rsyslog OMFileZipLevel 日誌檔出現意外檔結尾

rsyslog OMFileZipLevel 日誌檔出現意外檔結尾

作業系統: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 仍然打開的文件有關。

問題是我有另一個 rsyslog 伺服器運行版本5.8.10(Centos 6),具有完全相同的 rsyslog 設定文件,但我的壓縮日誌上的 EOF 訊息沒有這種行為。

這可能是 rsyslog 中的錯誤嗎8.24.0

答案1

這似乎是正常行為。我不確定closeTimeout參數,因為OMFileZipLevel通常應用於產生大量輸出的服務,所以我從來沒有遇到過 10 分鐘(或 10 秒)未寫入檔案的情況!

GZIP 是一個串流壓縮器,因此檔案寫入時帶有標頭和尾部,但直到檔案被視為關閉和終止時才寫入尾部,因此 zcat 和gunzip 在到達正常 gzip 檔案的末尾時會發出錯誤訊息仍在編寫中。

使用OMFileZipLevel只是告訴 rsyslog 將日誌壓縮到普通的 gzip 文件,因此這仍然適用。

使用veryRobustZiprsyslog 可以建立由小塊 gzip 資料串聯而成的 gzip 檔案(符合 gzip 標準),並且可以允許使用 zcat 或gunzip 提取資料而不會出現錯誤(但是查閱 rsyslog 協助檢查一些細節)。

儘管如此,我還是發展了格子工具輕鬆管理 rsyslog 產生的壓縮日誌文件,無論選項為何:您可以

  • tail -f像文字文件一樣連續尾部 .log.gz 文件,使用gztool -T
  • 即使發送日誌的進程突然停止然後重新啟動,也會提取所有數據,這會導致 zcat/gunzip 的 gzip 檔案無法存取數據,但 gztool 可以完美地提取gztool -p
  • 從 gzip 檔案的任何部分提取資料而不讀取全部內容(這對於其他工具是強制性的)

只是查閱使用範例格子工具

問題是為什麼在升級之前沒有發生這種情況:您確定以前使用相同的 rsyslog 配置沒有發生這種情況嗎?

相關內容