Logcheck 忽略 Logrotate
我繼承了一個同時使用 logcheck 和 logrotate 的系統。我遇到的問題是 logrotate 正在發送一封令人討厭的電子郵件,其中包含以下內容:
*** WARNING ***: Log file (X) is smaller than last time checked!
每當 logrotate 旋轉一個監視的文件時。這些工具似乎可以很好地配合使用,所以我很好奇如何實現它。
這看起來很簡單,如果我在某處的幫助文件中提出一個愚蠢的問題,我深表歉意。
Ubuntu 18.04、logcheck 1.3.17、logrotate 3.11.0 - 版權所有 (C) 1995-2001 Red Hat, Inc.
附加問題,因為 ‘copytruncate’ 是用於管理文件輪換的方法:
輪換日誌的服務是 Django / Apache 應用程序。服務本身(和文件)不能真正停止輪換過程,因為它是一個需要正常執行時間的網路伺服器。你能指出我開始乾淨地旋轉這些文件的正確方向嗎?這個過程已經讓 logrotate 和 logcheck 非常乾淨地一起執行,但是我們最近升級到了 Python 3.1,這可能導致了潛在的問題。
第二個附錄:這個問題可能是由於開發人員對某些衝突的文件大小限制(Django 將日誌限制為 4M 並且 logrotate 以 5M 旋轉)感到惱火併自行截斷日誌造成的。知道 logrotate + logcheck 具有強大的可靠記錄非常有幫助。
我在 Debian 系統上使用
logcheck
+logrotate
已有 20 年了,目前在大約 60 個 Debian 版本 8、9 和 10 伺服器上使用它們,我從未見過來自logcheck
. 所以我做了一點探勘。消息實際上並非來自
logcheck
其自身,而是來自logtail2
(或者,最初,logtail
),它logcheck
位於作為依賴項引入的輔助包中。根據logtail
包描述,兩個版本之間的主要區別在於logtail2
更好地處理已旋轉的文件。鑑於此,我將首先檢查logtail
您logcheck
使用的是哪個:$ grep logtail /usr/sbin/logcheck LOGTAIL="/usr/sbin/logtail2" || error "Could not run logtail or save output"
驗證
LOGTAIL
設置為的第一行,而logtail2
不是logtail
。假設它正在使用
logtail2
(應該如此),“日誌文件較小”警告僅在文件縮小且inode 編號保持不變時發出 - 換句話說,如果文件已就地重寫。有時這樣做是為了處理不夠智能的服務,無法根據需要重新創建日誌文件,因此通過複製日誌然後將大小重置為 0 而不是通過重命名並創建新文件來輪換日誌。因為這是處理日誌輪換的一種不尋常(而且相當老套,更不用說有風險,因為它創建了一個可能導致日誌消息失去的競爭條件)方式,所以我猜你只有少數出現此警告的日誌文件。此問題的最佳解決方案是修復相關日誌的輪換設置,以便以“正常”方式處理它們,而不是覆蓋舊日誌。為此,
grep
您的 logrotate 規則適用於使用該copytruncate
選項的任何日誌,然後確定需要做什麼才能讓這些服務在不使用的情況下允許輪換copytruncate
- 實現此目的的蠻力方法是在prerotate
腳本中停止服務並重啟它postrotate
,但通常有更好的方法,比如向它發送一個特定的信號,告訴它重新打開它的日誌文件。(如果您沒有找到任何提及的內容copytruncate
,也可以在輪換腳本中手動實現該技術,您必須手動查找而不是使用grep
.)如果這不是一個選項,您可以在
logcheck
規則目錄中創建忽略規則,告訴它忽略那些警告行,但這取決於它們是作為標準異常日誌條目處理還是繞過忽略系統。