Disk-Space-Utilization

以節省空間的方式歸檔日誌的最佳方式?

  • June 19, 2021

已經確定journald日誌是巨大的。在這個特定係統上,日誌每週增長約 3GB。出於審計目的,我希望將系統日誌保存的時間比我可以舒適地儲存在該系統上的時間更長;這只是“以防萬一”的儲存,不必快速檢索。以節省空間的方式歸檔這些日誌的最佳方式是什麼?

我正在考慮定期做一些事情journalctl | xz >>/var/log/old-logs.txt.xz,但這在 CPU 使用方面會非常浪費,一次又一次地重新歸檔數據的相同部分,如果它們被 journalctl 刪除,可能會失去日誌,所以也許有更好的方法?

journald 會旋轉它自己的文件,因此可以安全地將舊文件(@文件名中總是有一個)複製到其他地方,壓縮它們,或者對它們做任何你想做的事情。如果有必要查看它們,journalctl可以使用--file命令行選項指向特定的日誌文件。

您還應該看到journald.conf限制 journald 磁碟使用的選項。

確實,xz 壓縮可能會為您提供最佳壓縮級別。

然而 xz 壓縮的日誌不能用 journalctl 查詢。

另一種方法是使用文件系統壓縮。我為此使用 btrfs 和 zstd 壓縮,它使我的空間使用減少了大約 10 倍,並且日誌仍然可用於通過 journalctl 進行互動。我不建議對 /var/log/journal 使用 btrfs 卷,因為 journalctl 一直用No_COW屬性(請參閱參考資料lsattr)標記它的目錄,這會阻止壓縮。可以像我在設置中所做的那樣克服這個問題,但它更加脆弱和復雜。另一種方法是將舊日誌文件移動到單獨的壓縮目錄。像這樣的東西:

mkfs.btrfs "$BLOCK_DEVICE_PATH"
mkdir /var/log/journal_archive

# With my data zstd compression level gives best compression/speed ratio.
# Your mileage may vary.
#Default level 3 is quite good so you might just stick with the default
mount -o compress=zstd:8 "$BLOCK_DEVICE_PATH" /var/log/journal

# To archive old logs (older than a week):
find /var/log/journal/$MACHINEID/ -name '*@*.journal' -mtime +7 -exec mv -v {} /var/log/journal_archive \;

# To query old logs
journalctl --directory=/var/log/journal_archive

# Cleanup archive to keep 20GB of uncompressed files
journalctl --vacuum-size=20G --directory /var/log/journal_archive

引用自:https://serverfault.com/questions/1036286