1. 程式人生 > 其它 >journalctl 清理journal日誌 journalctl 清理journal日誌

journalctl 清理journal日誌 journalctl 清理journal日誌

轉: journalctl 清理journal日誌

在CentOS 7開始使用的systemd使用了journal日誌,這個日誌的管理方式和以往使用syslog的方式不同,可以通過管理工具維護。

使用df -h檢查磁碟檔案,可以看到/run目錄下有日誌目錄/run/log/journal,佔用了數G空間

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.5G  4.2G  4.4G  49% /
tmpfs                     16G  1.6G   15G  11
% /run

在日誌目錄下有很多歷史累積的日誌。

檢查當前journal使用磁碟量

journalctl --disk-usage

清理方法可以採用按照日期清理,或者按照允許保留的容量清理

journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

如果要手工刪除日誌檔案,則在刪除前需要先輪轉一次journal日誌

systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service

要啟用日誌限制持久化配置,可以修改 /etc/systemd/journald.conf

SystemMaxUse=16M
ForwardToSyslog=no

然後重啟

systemctl restart systemd-journald.service

檢查journal是否執行正常以及日誌檔案是否完整無損壞

journalctl --verify

journal配置參考
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m
RateLimitInterval=30s RateLimitBurst=500 SystemMaxUse=2048M #SystemKeepFree=1024M #SystemMaxFileSize= RuntimeMaxUse=2048M #RuntimeKeepFree= #RuntimeMaxFileSize= #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes ForwardToKMsgno=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console MaxLevelStore=warning MaxLevelSyslog=warning MaxLevelKMsg=warning MaxLevelConsole=info #MaxLevelWall=emerg #LineMax=48K

 

 
 

配置目錄及其優先順序

預設設定是在編譯期間確定的, 所以僅在確實需要修改預設設定的情況下, 才需要使用配置檔案。位於 /etc/systemd/ 目錄中的初始配置檔案, 僅包含了展示選項預設值的註釋, 目的在於方便系統管理員檢視和直接修改。

如果軟體包想要自定義某些預設設定, 那麼必須將自定義的配置檔案安裝到 /usr/lib/systemd/*.conf.d/ 目錄中。 /etc/ 目錄僅供系統管理員使用。 系統管理員可以利用下面的邏輯來覆蓋預設設定: 主配置檔案最先被讀取, 優先順序也最低。 所有 *.conf.d/ 中的配置檔案 都會覆蓋主配置檔案中的設定。 所有 *.conf.d/ 中的配置檔案(無論位於哪個目錄中), 統一按照檔名的字典順序處理。 當多個配置檔案都設定了同一個選項的時候: (1)如果該選項僅接受一個單一值,那麼僅以檔名最靠後(字典順序)的那一個為準; (2)如果該選項可接受一個值列表,那麼將會按照檔名的字典順序將所有值列表拼接起來。 為了便於排序, 建議給所有 *.conf.d/ 中的配置檔案 都加上兩位十進位制數字的檔名字首。

如果系統管理員想要遮蔽 /usr/lib/ 目錄中的某個配置檔案, 那麼最佳做法是在 /etc/ 目錄中 建立一個指向 /dev/null 的同名符號連結, 即可徹底遮蔽 /usr/lib/ 目錄中的同名檔案。

選項

所有選項都位於 "[Journal]" 小節:

Storage=

在哪裡儲存日誌檔案: "volatile" 表示僅儲存在記憶體中, 也就是僅儲存在 /run/log/journal 目錄中(將會被自動按需建立)。 "persistent" 表示優先儲存在磁碟上, 也就優先儲存在 /var/log/journal 目錄中(將會被自動按需建立), 但若失敗(例如在系統啟動早期"/var"尚未掛載), 則轉而儲存在 /run/log/journal 目錄中(將會被自動按需建立)。 "auto"(預設值) 與 "persistent" 類似, 但不自動建立 /var/log/journal 目錄, 因此可以根據該目錄的存在與否決定日誌的儲存位置。 "none" 表示不儲存任何日誌(直接丟棄所有收集到的日誌), 但日誌轉發(見下文)不受影響。 預設值是 "auto"

Compress=

預設值"yes"表示: 壓縮儲存大於特定閾值的物件。

Seal=

預設值"yes"表示:如果存在一個"sealing key"(由 journalctl(1)--setup-keys 命令建立), 那麼就為所有持久儲存的日誌檔案啟用 FSS(Seekable Sequential Key Generators)保護, 以避免日誌檔案被惡意或無意的修改。

SplitMode=

設定是否按照每個使用者分割日誌檔案,以實現對日誌的訪問控制(日誌守護程序會確保每個使用者都能讀取自己的日誌檔案)。 可以使用的分割策略如下: "uid" 表示每個使用者都有自己專屬的日誌檔案(無論該使用者是否擁有登入會話),但系統使用者的日誌依然記錄到系統日誌中。這是預設值。 "none" 表示不對日誌檔案按不同使用者進行分割,而是將所有日誌都記錄到系統日誌中。這意味著非特權使用者根本無法讀取屬於自己的日誌資訊。 注意,僅分割持久儲存的日誌(/var/log/journal), 永不分割記憶體中的日誌(/run/log/journal)。

RateLimitIntervalSec=, RateLimitBurst=

用於限制日誌的生成速度(設為零表示不作限制)。 RateLimitIntervalSec= 用於設定一個時間段長度,預設值是30秒。 RateLimitBurst= 用於設定一個正整數,表示訊息條數,預設值是1000條。 表示在 RateLimitIntervalSec= 時間段內, 每個服務最多允許產生 RateLimitBurst= 數量(條數)的日誌。 在同一個時間段內,超出數量限制的日誌將被丟棄,直到下一個時間段才能再次開始記錄。 對於所有被丟棄的日誌訊息,僅用一條類似"xxx條訊息被丟棄"的訊息來代替。 這個限制是針對每個服務的限制,一個服務超限並不會影響到另一個服務的日誌記錄。 RateLimitIntervalSec= 可以使用下面的時間單位:"ms", "s", "min", "h", "d"

SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, SystemMaxFiles=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=, RuntimeMaxFiles=

限制日誌檔案的大小上限。 以 "System" 開頭的選項用於限制磁碟使用量, 也就是 /var/log/journal 的使用量。 以 "Runtime" 開頭的選項用於限制記憶體使用量, 也就是 /run/log/journal 的使用量。 以 "System" 開頭的選項僅在 /var/log/journal 目錄確實存在且可寫時才有意義。 但以 "Runtime" 開頭的選項永遠有意義。 也就是說, 在系統啟動早期 /var 尚未掛載時、 或者系統管理員禁止在磁碟上儲存日誌的時候, 僅有 "Runtime" 開頭的選項有意義。 journalctlsystemd-journald 工具會忽略日誌目錄中 所有後綴名不等於 ".journal" 或 ".journal~" 的檔案。 換句話說, 日誌目錄中不應該存在後綴名不等於 ".journal" 或 ".journal~" 的檔案, 因為這些檔案永遠不會被清理。

SystemMaxUse=RuntimeMaxUse= 限制全部日誌檔案加在一起最多可以佔用多少空間。 SystemKeepFree=RuntimeKeepFree= 表示除日誌檔案之外,至少保留多少空間給其他用途。 systemd-journald 會同時考慮這兩個因素, 並且儘量限制日誌檔案的總大小,以同時滿足這兩個限制。

SystemMaxUse=RuntimeMaxUse= 的預設值是10%空間與4G空間兩者中的較小者; SystemKeepFree=RuntimeKeepFree= 的預設值是15%空間與4G空間兩者中的較大者; 如果在 systemd-journald 啟動時, 檔案系統即將被填滿並且已經超越了 SystemKeepFree=RuntimeKeepFree= 的限制,那麼日誌記錄將被暫停。 也就是說,如果在建立日誌檔案時,檔案系統有充足的空閒空間, 但是後來檔案系統被其他非日誌檔案過多佔用, 那麼 systemd-journald 只會立即暫停日誌記錄, 但不會刪除已經存在的日誌檔案。

SystemMaxFileSize=RuntimeMaxFileSize= 限制單個日誌檔案的最大體積, 到達此限制後日志文件將會自動滾動。 預設值是對應的 SystemMaxUse=RuntimeMaxUse= 值的1/8 , 這也意味著日誌滾動預設保留7個歷史檔案。

日誌大小的值可以使用以1024為基數的 K, M, G, T, P, E 字尾, 分別對應於 1024, 1024², … 位元組。

SystemMaxFiles=RuntimeMaxFiles= 限制最多允許同時存在多少個日誌檔案, 超出此限制後, 最老的日誌檔案將被刪除, 而當前的活動日誌檔案則不受影響。 預設值為100個。

MaxFileSec=

日誌滾動的時間間隔。 通常並不需要使用基於時間的日誌滾動策略, 因為由 SystemMaxFileSize=RuntimeMaxFileSize= 控制的基於檔案大小的日誌滾動策略 已經可以確保日誌檔案的大小不會超標。 預設值是一個月, 設為零表示禁用基於時間的日誌滾動策略。 可以使用 "year", "month", "week", "day", "h", "m" 時間字尾, 若不使用字尾則表示以秒為單位。

MaxRetentionSec=

日誌檔案的最大保留期限。 當日志文件的最後修改時間超過此期限後將被刪除。 預設值零表示不使用基於時間的日誌刪除策略。 通常並不需要使用基於時間的日誌刪除策略,因為由 SystemMaxUse=RuntimeMaxUse= 控制的基於檔案大小的日誌滾動策略 已經可以確保日誌檔案的大小不會超標。 可以使用 "year", "month", "week", "day", "h", "m" 時間字尾, 若不使用字尾則表示以秒為單位。

SyncIntervalSec=

向磁碟刷寫日誌檔案的時間間隔,預設值是五分鐘。 刷寫之後,日誌檔案將會處於離線(OFFLINE)狀態。 注意,當接收到 CRIT, ALERT, EMERG 級別的日誌訊息後, 將會無條件的立即刷寫日誌檔案。 因此該設定僅對 ERR, WARNING, NOTICE, INFO, DEBUG 級別的日誌訊息有意義。

ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall=

ForwardToSyslog= 表示是否將接收到的日誌訊息轉發給傳統的 syslog 守護程序,預設值為"no"。 如果設為"yes",但是沒有任何程序監聽對應的套接字,那麼這種轉發是無意義的。 此選項可以被核心引導選項 "systemd.journald.forward_to_syslog" 覆蓋。 ForwardToKMsg= 表示是否將接收到的日誌訊息轉發給核心日誌緩衝區(kmsg),預設值為"no"。 此選項可以被核心引導選項 "systemd.journald.forward_to_kmsg" 覆蓋。 ForwardToConsole= 表示是否將接收到的日誌訊息轉發給系統控制檯,預設值為"no"。 如果設為"yes",那麼可以通過下面的 TTYPath= 指定轉發目標。 此選項可以被核心引導選項 "systemd.journald.forward_to_console" 覆蓋。 ForwardToWall= 表示是否將接收到的日誌訊息作為警告資訊傳送給所有已登入使用者,預設值為"yes"。 此選項可以被核心引導選項 "systemd.journald.forward_to_wall" 覆蓋。

MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall=

MaxLevelStore= 設定記錄到日誌檔案中的最高日誌等級,預設值為"debug"; MaxLevelSyslog= 設定轉發給傳統的 syslog 守護程序的最高日誌等級,預設值為"debug"; MaxLevelKMsg= 設定轉發給核心日誌緩衝區(kmsg)的最高日誌等級,預設值為"notice"; MaxLevelConsole= 設定轉發給系統控制檯的最高日誌等級,預設值為"info"; MaxLevelWall= 設定作為警告資訊傳送給所有已登入使用者的最高日誌等級,預設值為"emerg"; 這些選項既可以設為日誌等級的名稱, 也可以設為日誌等級對應的數字: "emerg"(0), "alert"(1), "crit"(2), "err"(3), "warning"(4), "notice"(5), "info"(6), "debug"(7) 。 所有高於設定等級的日誌訊息都將被直接丟棄, 僅儲存/轉發小於等於設定等級的日誌訊息。 上述設定可以被如下核心引導選項覆蓋: "systemd.journald.max_level_store=", "systemd.journald.max_level_syslog=", "systemd.journald.max_level_kmsg=", "systemd.journald.max_level_console=", "systemd.journald.max_level_wall="

ReadKMsg=

是否收集核心日誌。 預設值 yes 表示從 /dev/kmsg 中讀取核心產生的日誌訊息。

TTYPath=

指定 ForwardToConsole=yes 時所使用的控制檯TTY, 預設值是 /dev/console

LineMax=

在將日誌流轉化為日誌記錄時,每條日誌記錄最大允許的長度(位元組)。 如果將單元的標準輸出(STDOUT)/標準錯誤(STDERR)通過流套接字連線到日誌中, 那麼將會以換行符("\n", ASCII 10)與NUL字元("\0", ASCII 0)作為分割符, 把日誌流切分成一條條獨立的日誌記錄。 如果超過此處設定的長度之後仍然沒有遇到分割符, 那麼將會自動插入一個分割符,以強制將單行超長日誌截斷為多行。 此選項的值越大,每個日誌流客戶端日誌守護程序佔用的記憶體也越大(最大值等於此選項的值)。 另外,此選項的值太大也會造成與傳統日誌傳輸協議的不相容(太長的日誌無法封裝在單個 AF_UNIXAF_INET 報文內)。 此選項的值以位元組為單位,同時也可以在數字的末尾加上 K, M, G, T 字尾(以1024為基準)。 預設值 48K 是一個足夠大並且也能保持與傳統日誌傳輸協議相容的值。 注意,不能設為小於 79 的值(將被自動提升到79)。

日誌轉發

有兩種不同的日誌轉發方法: (1)通過套接字檔案(/run/systemd/journal/syslog) 可以將收集到的日誌訊息 立即轉發給套接字的監聽程序(傳統的 syslog 守護程序)。 此方法受 ForwardToSyslog= 指令的控制。 (2)日誌接收程序作為客戶端執行,就像 journalctl(1) 一樣讀取日誌檔案。 因此,此方法在 Storage=none 時無效。 此方法不能實時讀取日誌訊息, 但是可以讀取先前儲存的日誌訊息(例如在系統啟動完成之後讀取系統啟動早期的日誌訊息)。 此方法還可以讀取到完整的日誌元資料。 此方法一般無法讀取當前最新的日誌訊息, 只能讀取已經被記錄到檔案系統上的日誌訊息。 注意,syslog 守護程序通常使用此方法(而不是前一種方法), 因此 Storage= 選項(而不是 ForwardToSyslog= 選項) 不應該設為"none"。

在CentOS 7開始使用的systemd使用了journal日誌,這個日誌的管理方式和以往使用syslog的方式不同,可以通過管理工具維護。

使用df -h檢查磁碟檔案,可以看到/run目錄下有日誌目錄/run/log/journal,佔用了數G空間

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.5G  4.2G  4.4G  49% /
tmpfs                     16G  1.6G   15G  11% /run

在日誌目錄下有很多歷史累積的日誌。

檢查當前journal使用磁碟量

journalctl --disk-usage

清理方法可以採用按照日期清理,或者按照允許保留的容量清理

journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

如果要手工刪除日誌檔案,則在刪除前需要先輪轉一次journal日誌

systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service

要啟用日誌限制持久化配置,可以修改 /etc/systemd/journald.conf

SystemMaxUse=16M
ForwardToSyslog=no

然後重啟

systemctl restart systemd-journald.service

檢查journal是否執行正常以及日誌檔案是否完整無損壞

journalctl --verify

journal配置參考
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=500 SystemMaxUse=2048M #SystemKeepFree=1024M #SystemMaxFileSize= RuntimeMaxUse=2048M #RuntimeKeepFree= #RuntimeMaxFileSize= #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes ForwardToKMsgno=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console MaxLevelStore=warning MaxLevelSyslog=warning MaxLevelKMsg=warning MaxLevelConsole=info #MaxLevelWall=emerg #LineMax=48K

 

 
 

配置目錄及其優先順序

預設設定是在編譯期間確定的, 所以僅在確實需要修改預設設定的情況下, 才需要使用配置檔案。位於 /etc/systemd/ 目錄中的初始配置檔案, 僅包含了展示選項預設值的註釋, 目的在於方便系統管理員檢視和直接修改。

如果軟體包想要自定義某些預設設定, 那麼必須將自定義的配置檔案安裝到 /usr/lib/systemd/*.conf.d/ 目錄中。 /etc/ 目錄僅供系統管理員使用。 系統管理員可以利用下面的邏輯來覆蓋預設設定: 主配置檔案最先被讀取, 優先順序也最低。 所有 *.conf.d/ 中的配置檔案 都會覆蓋主配置檔案中的設定。 所有 *.conf.d/ 中的配置檔案(無論位於哪個目錄中), 統一按照檔名的字典順序處理。 當多個配置檔案都設定了同一個選項的時候: (1)如果該選項僅接受一個單一值,那麼僅以檔名最靠後(字典順序)的那一個為準; (2)如果該選項可接受一個值列表,那麼將會按照檔名的字典順序將所有值列表拼接起來。 為了便於排序, 建議給所有 *.conf.d/ 中的配置檔案 都加上兩位十進位制數字的檔名字首。

如果系統管理員想要遮蔽 /usr/lib/ 目錄中的某個配置檔案, 那麼最佳做法是在 /etc/ 目錄中 建立一個指向 /dev/null 的同名符號連結, 即可徹底遮蔽 /usr/lib/ 目錄中的同名檔案。

選項

所有選項都位於 "[Journal]" 小節:

Storage=

在哪裡儲存日誌檔案: "volatile" 表示僅儲存在記憶體中, 也就是僅儲存在 /run/log/journal 目錄中(將會被自動按需建立)。 "persistent" 表示優先儲存在磁碟上, 也就優先儲存在 /var/log/journal 目錄中(將會被自動按需建立), 但若失敗(例如在系統啟動早期"/var"尚未掛載), 則轉而儲存在 /run/log/journal 目錄中(將會被自動按需建立)。 "auto"(預設值) 與 "persistent" 類似, 但不自動建立 /var/log/journal 目錄, 因此可以根據該目錄的存在與否決定日誌的儲存位置。 "none" 表示不儲存任何日誌(直接丟棄所有收集到的日誌), 但日誌轉發(見下文)不受影響。 預設值是 "auto"

Compress=

預設值"yes"表示: 壓縮儲存大於特定閾值的物件。

Seal=

預設值"yes"表示:如果存在一個"sealing key"(由 journalctl(1)--setup-keys 命令建立), 那麼就為所有持久儲存的日誌檔案啟用 FSS(Seekable Sequential Key Generators)保護, 以避免日誌檔案被惡意或無意的修改。

SplitMode=

設定是否按照每個使用者分割日誌檔案,以實現對日誌的訪問控制(日誌守護程序會確保每個使用者都能讀取自己的日誌檔案)。 可以使用的分割策略如下: "uid" 表示每個使用者都有自己專屬的日誌檔案(無論該使用者是否擁有登入會話),但系統使用者的日誌依然記錄到系統日誌中。這是預設值。 "none" 表示不對日誌檔案按不同使用者進行分割,而是將所有日誌都記錄到系統日誌中。這意味著非特權使用者根本無法讀取屬於自己的日誌資訊。 注意,僅分割持久儲存的日誌(/var/log/journal), 永不分割記憶體中的日誌(/run/log/journal)。

RateLimitIntervalSec=, RateLimitBurst=

用於限制日誌的生成速度(設為零表示不作限制)。 RateLimitIntervalSec= 用於設定一個時間段長度,預設值是30秒。 RateLimitBurst= 用於設定一個正整數,表示訊息條數,預設值是1000條。 表示在 RateLimitIntervalSec= 時間段內, 每個服務最多允許產生 RateLimitBurst= 數量(條數)的日誌。 在同一個時間段內,超出數量限制的日誌將被丟棄,直到下一個時間段才能再次開始記錄。 對於所有被丟棄的日誌訊息,僅用一條類似"xxx條訊息被丟棄"的訊息來代替。 這個限制是針對每個服務的限制,一個服務超限並不會影響到另一個服務的日誌記錄。 RateLimitIntervalSec= 可以使用下面的時間單位:"ms", "s", "min", "h", "d"

SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, SystemMaxFiles=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=, RuntimeMaxFiles=

限制日誌檔案的大小上限。 以 "System" 開頭的選項用於限制磁碟使用量, 也就是 /var/log/journal 的使用量。 以 "Runtime" 開頭的選項用於限制記憶體使用量, 也就是 /run/log/journal 的使用量。 以 "System" 開頭的選項僅在 /var/log/journal 目錄確實存在且可寫時才有意義。 但以 "Runtime" 開頭的選項永遠有意義。 也就是說, 在系統啟動早期 /var 尚未掛載時、 或者系統管理員禁止在磁碟上儲存日誌的時候, 僅有 "Runtime" 開頭的選項有意義。 journalctlsystemd-journald 工具會忽略日誌目錄中 所有後綴名不等於 ".journal" 或 ".journal~" 的檔案。 換句話說, 日誌目錄中不應該存在後綴名不等於 ".journal" 或 ".journal~" 的檔案, 因為這些檔案永遠不會被清理。

SystemMaxUse=RuntimeMaxUse= 限制全部日誌檔案加在一起最多可以佔用多少空間。 SystemKeepFree=RuntimeKeepFree= 表示除日誌檔案之外,至少保留多少空間給其他用途。 systemd-journald 會同時考慮這兩個因素, 並且儘量限制日誌檔案的總大小,以同時滿足這兩個限制。

SystemMaxUse=RuntimeMaxUse= 的預設值是10%空間與4G空間兩者中的較小者; SystemKeepFree=RuntimeKeepFree= 的預設值是15%空間與4G空間兩者中的較大者; 如果在 systemd-journald 啟動時, 檔案系統即將被填滿並且已經超越了 SystemKeepFree=RuntimeKeepFree= 的限制,那麼日誌記錄將被暫停。 也就是說,如果在建立日誌檔案時,檔案系統有充足的空閒空間, 但是後來檔案系統被其他非日誌檔案過多佔用, 那麼 systemd-journald 只會立即暫停日誌記錄, 但不會刪除已經存在的日誌檔案。

SystemMaxFileSize=RuntimeMaxFileSize= 限制單個日誌檔案的最大體積, 到達此限制後日志文件將會自動滾動。 預設值是對應的 SystemMaxUse=RuntimeMaxUse= 值的1/8 , 這也意味著日誌滾動預設保留7個歷史檔案。

日誌大小的值可以使用以1024為基數的 K, M, G, T, P, E 字尾, 分別對應於 1024, 1024², … 位元組。

SystemMaxFiles=RuntimeMaxFiles= 限制最多允許同時存在多少個日誌檔案, 超出此限制後, 最老的日誌檔案將被刪除, 而當前的活動日誌檔案則不受影響。 預設值為100個。

MaxFileSec=

日誌滾動的時間間隔。 通常並不需要使用基於時間的日誌滾動策略, 因為由 SystemMaxFileSize=RuntimeMaxFileSize= 控制的基於檔案大小的日誌滾動策略 已經可以確保日誌檔案的大小不會超標。 預設值是一個月, 設為零表示禁用基於時間的日誌滾動策略。 可以使用 "year", "month", "week", "day", "h", "m" 時間字尾, 若不使用字尾則表示以秒為單位。

MaxRetentionSec=

日誌檔案的最大保留期限。 當日志文件的最後修改時間超過此期限後將被刪除。 預設值零表示不使用基於時間的日誌刪除策略。 通常並不需要使用基於時間的日誌刪除策略,因為由 SystemMaxUse=RuntimeMaxUse= 控制的基於檔案大小的日誌滾動策略 已經可以確保日誌檔案的大小不會超標。 可以使用 "year", "month", "week", "day", "h", "m" 時間字尾, 若不使用字尾則表示以秒為單位。

SyncIntervalSec=

向磁碟刷寫日誌檔案的時間間隔,預設值是五分鐘。 刷寫之後,日誌檔案將會處於離線(OFFLINE)狀態。 注意,當接收到 CRIT, ALERT, EMERG 級別的日誌訊息後, 將會無條件的立即刷寫日誌檔案。 因此該設定僅對 ERR, WARNING, NOTICE, INFO, DEBUG 級別的日誌訊息有意義。

ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall=

ForwardToSyslog= 表示是否將接收到的日誌訊息轉發給傳統的 syslog 守護程序,預設值為"no"。 如果設為"yes",但是沒有任何程序監聽對應的套接字,那麼這種轉發是無意義的。 此選項可以被核心引導選項 "systemd.journald.forward_to_syslog" 覆蓋。 ForwardToKMsg= 表示是否將接收到的日誌訊息轉發給核心日誌緩衝區(kmsg),預設值為"no"。 此選項可以被核心引導選項 "systemd.journald.forward_to_kmsg" 覆蓋。 ForwardToConsole= 表示是否將接收到的日誌訊息轉發給系統控制檯,預設值為"no"。 如果設為"yes",那麼可以通過下面的 TTYPath= 指定轉發目標。 此選項可以被核心引導選項 "systemd.journald.forward_to_console" 覆蓋。 ForwardToWall= 表示是否將接收到的日誌訊息作為警告資訊傳送給所有已登入使用者,預設值為"yes"。 此選項可以被核心引導選項 "systemd.journald.forward_to_wall" 覆蓋。

MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall=

MaxLevelStore= 設定記錄到日誌檔案中的最高日誌等級,預設值為"debug"; MaxLevelSyslog= 設定轉發給傳統的 syslog 守護程序的最高日誌等級,預設值為"debug"; MaxLevelKMsg= 設定轉發給核心日誌緩衝區(kmsg)的最高日誌等級,預設值為"notice"; MaxLevelConsole= 設定轉發給系統控制檯的最高日誌等級,預設值為"info"; MaxLevelWall= 設定作為警告資訊傳送給所有已登入使用者的最高日誌等級,預設值為"emerg"; 這些選項既可以設為日誌等級的名稱, 也可以設為日誌等級對應的數字: "emerg"(0), "alert"(1), "crit"(2), "err"(3), "warning"(4), "notice"(5), "info"(6), "debug"(7) 。 所有高於設定等級的日誌訊息都將被直接丟棄, 僅儲存/轉發小於等於設定等級的日誌訊息。 上述設定可以被如下核心引導選項覆蓋: "systemd.journald.max_level_store=", "systemd.journald.max_level_syslog=", "systemd.journald.max_level_kmsg=", "systemd.journald.max_level_console=", "systemd.journald.max_level_wall="

ReadKMsg=

是否收集核心日誌。 預設值 yes 表示從 /dev/kmsg 中讀取核心產生的日誌訊息。

TTYPath=

指定 ForwardToConsole=yes 時所使用的控制檯TTY, 預設值是 /dev/console

LineMax=

在將日誌流轉化為日誌記錄時,每條日誌記錄最大允許的長度(位元組)。 如果將單元的標準輸出(STDOUT)/標準錯誤(STDERR)通過流套接字連線到日誌中, 那麼將會以換行符("\n", ASCII 10)與NUL字元("\0", ASCII 0)作為分割符, 把日誌流切分成一條條獨立的日誌記錄。 如果超過此處設定的長度之後仍然沒有遇到分割符, 那麼將會自動插入一個分割符,以強制將單行超長日誌截斷為多行。 此選項的值越大,每個日誌流客戶端日誌守護程序佔用的記憶體也越大(最大值等於此選項的值)。 另外,此選項的值太大也會造成與傳統日誌傳輸協議的不相容(太長的日誌無法封裝在單個 AF_UNIXAF_INET 報文內)。 此選項的值以位元組為單位,同時也可以在數字的末尾加上 K, M, G, T 字尾(以1024為基準)。 預設值 48K 是一個足夠大並且也能保持與傳統日誌傳輸協議相容的值。 注意,不能設為小於 79 的值(將被自動提升到79)。

日誌轉發

有兩種不同的日誌轉發方法: (1)通過套接字檔案(/run/systemd/journal/syslog) 可以將收集到的日誌訊息 立即轉發給套接字的監聽程序(傳統的 syslog 守護程序)。 此方法受 ForwardToSyslog= 指令的控制。 (2)日誌接收程序作為客戶端執行,就像 journalctl(1) 一樣讀取日誌檔案。 因此,此方法在 Storage=none 時無效。 此方法不能實時讀取日誌訊息, 但是可以讀取先前儲存的日誌訊息(例如在系統啟動完成之後讀取系統啟動早期的日誌訊息)。 此方法還可以讀取到完整的日誌元資料。 此方法一般無法讀取當前最新的日誌訊息, 只能讀取已經被記錄到檔案系統上的日誌訊息。 注意,syslog 守護程序通常使用此方法(而不是前一種方法), 因此 Storage= 選項(而不是 ForwardToSyslog= 選項) 不應該設為"none"。