systemd入門9:淺嘗journald的配置檔案

在上一篇文章中,我們提到了journal檔案不僅會存在於 /var/log/journal/ 當中,還可能會存在於 /run/log/journal/ 當中。那麼為什麼預設情況下,在 /run/log/journal/ 路徑下,看起來並沒有所謂的日誌存在呢?今天就結合journald的配置來講解一下這個問題。

systemd入門9:淺嘗journald的配置檔案

首先,一定是有一個程式來寫日誌,並且,它會決定:把日誌寫入哪個路徑。我們追根溯源的話,可以問自己一個問題:journal日誌是誰寫的?在之前的文章中,其實略有帶過,那就是:systemd-journald。service 這個服務。

接著,它又是如何來判斷,把日誌寫到哪裡去的呢?答案是:配置檔案。單元檔案服務通常都會有自己的配置檔案,決定了服務的某些行為。

程式設計師禮節不能忘:

man journald。conf

誒?手冊命令man還可以用於配置檔案?嘿嘿,沒錯,man的用途非常廣泛,並不是只能用於應用程式。因為Linux本身是一個開源的超級大家庭,只要人人都獻出一份愛,什麼資源都會有。並且這些社群維護的資源很可能被整合到利於Ubuntu這類分發版中,安裝到千家萬戶的機器上。可謂現代版“舊時王謝堂前燕”。

順著檔案往下看,看到描述這塊兒。可以看到手冊上方所列的檔案,配置了systemd 日誌服務,即systemd-journald。service的各種引數。

systemd入門9:淺嘗journald的配置檔案

那這就說明這確實是我們所需要尋找的配置檔案。

再順著手冊往下看,選項中的第一個就是

Storage=

systemd入門9:淺嘗journald的配置檔案

這個選項控制了日誌資料儲存在哪裡。有四個值可以選:“volatile”, “persistent”, “auto”, “none”。

“volatile”:日誌資料只會儲存在記憶體中,也就是說,儲存在 /run/log/journal 的路徑結構下。

“persistent”:資料會優先儲存在硬碟上,也就是儲存在 /var/log/jouranl 的路徑結構下。在啟動過程的初始階段,如果硬碟還不可寫的話,/run/log/journal 會成為備選方案。

“auto”: 和 “persistent” 類似,但是路徑 /var/log/journal 路徑不會自動建立,所以這個路徑是否存在,決定了日誌資料的何去何從。

“none”:關閉所有儲存活動,所有收集到的日誌資料都會被丟棄。不過轉發給其它目標的資料會被保留,比如控制檯,核心日誌快取,syslog套接字等仍舊會運作。

預設的journal名稱空間下,預設值是 “auto”,即對於系統自帶的 journald 來說,Storage= 的預設值是 “auto”,其它名稱空間下的預設值都是 “persistent”。

讀到這裡,大部分的疑惑我們都已經解開了。/var/log/journal/ 和 /run/log/journal/ 都會存放日誌,關鍵看幾點:

1、journald 的配置檔案中,Storage= 選項是否被修改過。

2、如果沒有被修改過,那麼 /var/log/journal/ 路徑是否存在。如果存在,則往這個路徑寫入日誌。

3、如果不存在,則往 /run/log/journal 寫入日誌。

我的系統上都是預設配置,且路徑 /var/log/journal/ 存在,所以日誌都會寫入這個路徑結構。這也就是為什麼,/var/log/journal/ 的路徑大小 和

journalctl --disk-usage

返回的大小極為接近。這也解釋了為什麼,在有些問答區,回答”如何在硬碟上保留日誌“的時候,解決方案竟然是建立一個資料夾,什麼配置都不用改。

systemd入門9:淺嘗journald的配置檔案

不過,上一篇文章還留下了另一個懸念:如果日誌寫在記憶體中,也就是說,寫在路徑 /run/log/journal 下,journalctl ——disk-usage 命令會把這個路徑下的檔案也計算在內麼?

我們將以實際行動來解答這個問題。

本文由矻矻來福Krave原創,歡迎關注,帶你一起長知識!