如果你的 linux 發行版支持???systemd???,那么從啟動時開始,它每秒鐘都會從系統的所有進程和應用程序中收集日志。所有這些日志事件都由 systemd 的???journald???守護程序管理。journald 收集所有的日志(信息、警告、錯誤等),并將其作為二進制數據存儲在磁盤文件中。
由于日志保留在磁盤中,而且每秒鐘都在收集,所以它占用了巨大的磁盤空間;特別是對于舊的系統、服務器來說。例如,在我的一個運行了一年左右的測試系統中,日志文件的大小是 GB 級的。
如果你管理多個系統、服務器,建議一定要正確管理 journald 日志,以便高效運行。讓我們來看看如何管理日志文件。
systemd 日志維護
使用 systemd 的???journalctl???工具,你可以查詢這些日志,對其進行各種操作。例如,查看不同啟動時的日志文件,檢查特定進程或應用程序的最后警告和錯誤。如果你對這些不了解,我建議你在學習本指南之前先快速瀏覽一下此教程:??systemd???》。
物理日記的日志文件在哪里?
systemd 的 journald 守護進程在每次啟動時都會收集日志。這意味著,它根據啟動情況對日志文件進行分類。
日志以二進制形式存儲在路徑???/var/log/journal??,文件夾為機器 ID。
比如說:
日志文件位置的截圖-1
日志文件位置的截圖-2
另外,請記住,根據系統配置,運行時日志文件被存儲在???/run/log/journal/??。而這些在每次啟動時都會被刪除。
我可以手動刪除日志文件嗎?
你可以,但不要這樣做。相反,請按照下面的說明,使用???journalctl???工具清除日志文件以釋放磁盤空間。
systemd 的日志文件占用了多少磁盤空間?
打開一個終端,運行以下命令。
journalctl --disk-usage
這應該為你提供系統中的日志文件實際使用的數量。
journalctl 磁盤使用命令
如果你有一個圖形化的桌面環境,你可以打開文件管理器,瀏覽路徑???/var/log/journal??,并檢查屬性。
systemd 日志清理過程
清理日志文件的有效方法應該是通過???journald.conf???配置文件來完成。正常情況下,即使???journalctl???提供了刪除日志文件的工具,你也不應該手動刪除這些文件。
讓我們來看看如何???systemd???刪除它,然后我將解釋???journald.conf???中的配置變化,這樣你就不需要時不時地手動刪除文件;相反,systemd 會根據你的配置自動處理它。
手動刪除
首先,你必須???flush???和???rotate???日志文件。輪換rotate是將當前活動的日志文件歸檔,并立即開始創建一個新的日志文件繼續記錄日志。沖洗flush?開關要求日志守護進程將存儲在???/run/log/journal/???中的所有日志數據沖入???/var/log/journal/??,如果持久性存儲被啟用的話。
然后,在???flush???和???rotate???之后,你需要用???vacuum-size??、??vacuum-time???和???vacuum-files???選項運行???journalctl???來強制 systemd 清除日志。
例 1:
sudo journalctl --flush --rotate
sudo journalctl --vacuum-time=1s
上面這組命令會刪除所有存檔的日志文件,直到最后一秒。這有效地清除了一切。因此,在運行該命令時要小心。
日志清理-例子
清理完畢后:
清理后–日志的占用空間
你也可以根據你的需要在???–vacuum-time???的數字后面提供以下后綴:
- ??s??:秒
- ??m??:分鐘
- ??h??:小時
- ??days??:天
- ??months??:月
- ??weeks??:周
- ??years??:年
例 2:
sudo journalctl --flush --rotate
sudo journalctl --vacuum-size=400M
這將清除所有存檔的日志文件,并保留最后 400MB 的文件。記住這個開關只適用于存檔的日志文件,不適用于活動的日志文件。你也可以使用后綴,如下所示。
- ??K??:KB
- ??M??:MB
- ??G??:GB
例 3:
sudo journalctl --flush --rotate
sudo journalctl --vacuum-files=2
??vacuum-files???選項會清除所有低于指定數量的日志文件。因此,在上面的例子中,只有最后兩個日志文件被保留,其他的都被刪除。同樣,這只對存檔的文件有效。
如果你愿意,你可以把兩種選項結合起來,但我建議不要這樣做。然而,如果同時使用兩個選項,請確保先用???–rotate???選項運行。
使用配置文件自動刪除
雖然上述方法很好,也很容易使用,但建議你使用 journald 配置文件來控制日志文件的清理過程,該文件存在于???/etc/systemd/journald.conf??。
systemd 為你提供了許多參數來有效管理日志文件。通過組合這些參數,你可以有效地限制日志文件所占用的磁盤空間。讓我們來看看。
journald.conf 參數 |
描述 |
實例 |
??SystemMaxUse?? |
指定日志在持久性存儲中可使用的最大磁盤空間 |
??SystemMaxUse=500M?? |
??SystemKeepFree?? |
指定在將日志條目添加到持久性存儲時,日志應留出的空間量。 |
??SystemKeepFree=100M?? |
??SystemMaxFileSize?? |
控制單個日志文件在被輪換之前在持久性存儲中可以增長到多大。 |
??SystemMaxFileSize=100M?? |
??RuntimeMaxUse?? |
指定在易失性存儲中可以使用的最大磁盤空間(在???/run???文件系統內)。 |
??RuntimeMaxUse=100M?? |
??RuntimeKeepFree?? |
指定將數據寫入易失性存儲(在???/run???文件系統內)時為其他用途預留的空間數量。 |
??RuntimeMaxUse=100M?? |
??RuntimeMaxFileSize?? |
指定單個日志文件在被輪換之前在易失性存儲(在???/run???文件系統內)所能占用的空間量。 |
??RuntimeMaxFileSize=200M?? |
如果你在運行中的系統的???/etc/systemd/journald.conf???文件中添加這些值,那么在更新文件后,你必須重新啟動 journald。要重新啟動,請使用以下命令。
sudo systemctl restart systemd-journald
核實日志文件
在你清理完文件后,檢查日志文件的完整性是比較明智的。要做到這一點,請運行下面的命令。該命令顯示了日志文件是否通過(??PASS??)、失敗(??FAIL??)。
journalctl --verify
驗證日志文件
總結
希望本指南能幫助你了解 systemd 日志管理流程的基本情況。通過這些,你可以通過限制空間、清除舊的日志文件來管理系統或服務器中的日志文件所使用的磁盤空間。這些只是指導性的命令,你可以通過多種方式組合這些命令來實現你的系統需求。