Logs
當單個 logrotate 實例無法跟上時,對大量文件進行高級 logrotate
我正在管理一個伺服器,該伺服器用作大量文件的遠端日誌儲存庫。目前單個
logrotate
實例無法跟上這個數量的日誌。加速日誌輪換的最佳方法是什麼,可能並行執行多個實例?以下是澄清的附錄:
- 磁碟 I/O 不是問題;另外,我不會失去任何日誌或條目。
- 與這項工作(它是具有足夠功率的四核 Xeon)相比,系統是一頭野獸,瓶頸在於壓縮。一個核心以 1.00 負載加滿並且無法完成其壓縮隊列。
- 不複製日誌文件。只有每日備份被帶到另一個磁碟,但這也不是瓶頸。
- 我可以按模式對日誌文件進行分組。文件並不大,只有很多。我只是不知道如何並行化 logrotate 雖然我有想法但找不到任何資源。實際上,問題的核心是_does logrotate 是否為配置文件或配置文件中的每個存根生成一個子程序?
您可以執行多個 logrotate 實例。他們需要處理不同的文件集並使用不同的狀態文件。
您應該使用 gzip(標準壓縮)而不是 bzip。AFAIK 您可以將一些額外的選項傳遞給 gzip - 這樣您就可以告訴它使用更快的壓縮。
請告訴我們更多關於您的要求 - 很難猜測是什麼限制了您的伺服器:
- 磁碟輸入/輸出?您可能希望將這些日誌文件分佈在磁碟/文件系統上
- cpu - 它是否在旋轉時壓縮這些日誌?您可能希望使用具有內部壓縮甚至硬體加速功能的文件系統。
- 目錄記憶體?請參閱 Chris Card 的答案 - 將文件分佈在目錄中,同樣重要的是,使這些文件在文件名的早期字元中有所不同,否則您將看不到應用於它們的目錄記憶體的好處,這會減慢查找速度顯著地。
- 如果您的伺服器達到了它的限制 - 它只是用於日誌輪換,還是已經錯過了日誌條目?
- 您是在複製這些日誌文件,還是在移動它們(在同一個文件系統中)?
- …
如果你為你的日誌文件設計一個結構,沒有什麼可以阻止你並行旋轉它們。
編輯以回复添加的要求
據我所知,logrotate 本身並不並行化。不過,一旦你建立了一個清晰的結構,你可以探索一些方法來手動並行化它(或者至少是讓你陷入困境的部分):
compress 命令本身:您可以使用包裝腳本進行壓縮。生成的 gzip 可以在您的腳本立即返回時在後台執行 - 因此在 logrotate 愉快地繼續到下一個日誌文件時讓壓縮作業執行。兩個警告:
- 我寧願安全並打開,
delaycompress
以避免在程序被 SIGHUP 或啟動新日誌(取決於程序)時仍然擺弄日誌文件。- 我也會“很好”壓縮作業,以避免許多並行壓縮作業競爭 cpu 時間。
如果你感覺很複雜(或者最終有許多並行 gzip 作業限制了 loghost),你可以稍後轉換為編寫一組工作程序,從“壓縮命令”腳本生成的列表中提取它們的文件進行壓縮在您的 logrotate 配置中說明。
您可以通過一些計劃執行獨立的 logrotate 實例:
- 每個實例都需要自己的配置文件。
- 每個實例都需要自己的一組目錄來監視日誌文件。您可以(並且可能應該)為它們設置單獨的 crontab 條目。
- 每個實例都需要自己的
statefile
(可配置)