如何使用 journalctl 查看和分析 systemd 日志(附實(shí)例)

簡介
很多人說 systemd 不好,它對系統(tǒng)的影響很大,這也是一個有爭議的話題。但你不能否認(rèn)的是,它提供了一套完善的工具來管理和排除系統(tǒng)故障。想象一下,當(dāng)你遇到一個沒有 GUI 的損壞系統(tǒng)時,你可能會把啟動和 GRUB 弄得一團(tuán)糟。在這種情況下,你可以從一個立付Live系統(tǒng)啟動,掛上你的 Linux 分區(qū),然后瀏覽 systemd 的日志,找出問題所在。
systemd 有三個基本組件,如下所示:
- ?
?systemd??:Linux 操作系統(tǒng)的系統(tǒng)和服務(wù)管理器。 - ?
?systemctl?? :該命令用于反觀和控制 systemd 系統(tǒng)和服務(wù)管理器的狀態(tài)。 - ?
?systemd-analyze??:該命令提供系統(tǒng)啟動時的性能統(tǒng)計(jì),并從系統(tǒng)和服務(wù)管理器中檢索其他狀態(tài)和跟蹤信息。 
除了這三個服務(wù)外,systemd 還提供其他服務(wù),如 journald、logind、networkd 等。在本指南中,我們將討論 systemd 的 journald 服務(wù)。
journald - systemd 日志服務(wù)
根據(jù)設(shè)計(jì),systemd 提供了一個集中的方式來處理所有來自進(jìn)程、應(yīng)用程序等的操作系統(tǒng)日志。所有這些日志事件都由 systemd 的 journald 守護(hù)進(jìn)程來處理。journald 守護(hù)進(jìn)程收集所有來自 Linux 操作系統(tǒng)各處的日志,并將其作為二進(jìn)制數(shù)據(jù)存儲在文件中。
以二進(jìn)制數(shù)據(jù)集中記錄事件、系統(tǒng)問題的好處有很多。例如,由于系統(tǒng)日志是以二進(jìn)制而不是文本形式存儲的,你可以以文本、JSON 對象等多種方式進(jìn)行轉(zhuǎn)譯,以滿足各種需求。另外,由于日志是按順序存儲的,通過對日志的日期/時間操作,超級容易追蹤到單個事件。
請記住,journald 收集的日志文件數(shù)以千行計(jì),而且不斷更新每次開機(jī)、每個事件。因此,如果你有一個長期運(yùn)行的 Linux 操作系統(tǒng),日志的大小應(yīng)該以 GB 為單位。由于有著數(shù)以千計(jì)的日志,最好用基本命令進(jìn)行過濾,以了解更多系統(tǒng)問題。
journald 配置文件
journald 的配置文件存在于以下路徑中。它包含了關(guān)于如何進(jìn)行日志記錄的各種標(biāo)志。你可以看一下這個文件,并進(jìn)行必要的修改。但我建議不要修改這個文件,除非你知道自己在做什么。
journald 存儲二進(jìn)制日志文件的地方
journald 以二進(jìn)制格式存儲日志。它們被保存在這個路徑下的一個目錄中:
例如,在下面的路徑中,有一個目錄包含了迄今為止的所有系統(tǒng)日志。

journalctl log file path
不要使用 ??cat?? 命令,也不要使用 ??nano?? 或 ??vi?? 來打開這些文件。它們(是二進(jìn)制的),無法正常顯示。
使用 journalctl 來查看和分析 systemd 日志
journald 基本命令
查看 journald 日志的基本命令是:

journalctl
該命令提供了所有應(yīng)用程序和進(jìn)程的日志條目,包括錯誤、警告等。它顯示的列表中,最舊的日志在頂部,當(dāng)前的日志在底部。你需要不斷按回車鍵來逐行滾動瀏覽。你也可以使用 ??PAGE UP?? 和 ??PAGE DOWN?? 鍵來滾動。按 ??q?? 鍵可以退出這個視圖。
如何以不同時區(qū)的時間查看日志條目
默認(rèn)情況下,??journalctl?? 以當(dāng)前系統(tǒng)時區(qū)顯示日志的時間。然而,你可以很容易地在命令中提供時區(qū),將同一日志轉(zhuǎn)換為不同的時區(qū)。例如,要以 UTC 查看日志,請使用以下命令:

journalctl --utc
如何在日志中只查看錯誤、警告等信息
系統(tǒng)產(chǎn)生的日志有不同的優(yōu)先級。有些日志可能是可以忽略的警告,有些可能是重要的錯誤。你可能想只看錯誤,不看警告。這也可以用下面的命令來實(shí)現(xiàn)。
要查看緊急系統(tǒng)信息,請使用:

journalctl -p 0
錯誤代碼:
當(dāng)你指定錯誤代碼時,它顯示該等級及更高的所有信息。例如,如果你指定下面的命令,它會顯示所有優(yōu)先級為 2、1 和 0 的信息:
如何查看特定啟動的日志
當(dāng)你運(yùn)行 ??journalctl?? 命令時,它會顯示當(dāng)前啟動的信息,即你正在運(yùn)行的會話中的信息。但也可以查看過去的啟動信息。
在每次重啟時,日志都會持續(xù)更新。journald 會記錄不同啟動時的日志。要查看不同啟動時的日志,請使用以下命令。

journalctl list-boots
- 第一個數(shù)字顯示的是 journald 的唯一的啟動跟蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。
 - 第二個數(shù)字是啟動 ID,你也可以在命令中指定。
 - 接下來的兩個日期、時間組合是存儲在相應(yīng)文件中的日志的時間。如果你想找出某個特定日期、時間的日志或錯誤,這就非常方便了。
 
要查看一個特定的啟動號碼,你可以選擇第一個啟動跟蹤號碼或啟動 ID,如下所示。

journalctl -b 45
你也可以使用 ??-x?? 選項(xiàng),在顯示屏上添加 systemd 錯誤信息的解釋。在某些情況下,這是個救命稻草。

journalctl -xb
如何查看某一特定時間、日期的日志記錄
??journalctl?? 功能強(qiáng)大,可以在命令中提供類似英語的參數(shù),用于時間和日期操作。
你可以使用 ??--since?? 選項(xiàng)與 ??yesterday??、??today??、??tomorrow?? 或 ??now?? 組合。
下面是一些不同命令的例子。你可以根據(jù)你的需要修改它們。它們是不言自明的。以下命令中的日期、時間格式為 ??"YYYY-MM-DD HH:MM:SS"??

journalctl --since 09:00 --until
你也可以將上述內(nèi)容與錯誤級別開關(guān)結(jié)合起來。
如何查看內(nèi)核特定的日志記錄
Linux 內(nèi)核信息也可以從日志中提取出來。要查看當(dāng)前啟動時的內(nèi)核信息,請使用以下命令:
如何查看某個服務(wù)、PID 的日志
你可以從 journald 日志中過濾出某個 systemd 服務(wù)單元的特定日志。例如,如果要查看 NetworkManager 服務(wù)的日志,請使用下面的命令。

journalctl NetworkManager service
如果你不知道服務(wù)名稱,可以使用下面的命令來列出系統(tǒng)中的 systemd 服務(wù)。
如何查看用戶、組的日志
如果你正在分析服務(wù)器日志,在多個用戶登錄的情況下,這個命令很有幫助。你可以先用下面的命令從用戶名中找出用戶的 ID。例如,要找出用戶 ??debugpoint?? 的 ID:
然后使用 ??_UID?? 選項(xiàng)指定該 ID 與來查看該用戶產(chǎn)生的日志。

journalctl _UID
同樣地,使用 ??_GID?? 選項(xiàng)也可以查到用戶組的情況。
如何查看一個可執(zhí)行文件的日志
你也可以查看某個特定程序或可執(zhí)行文件的日志。例如,如果你想找出 ??gnome-shell?? 的信息,你可以運(yùn)行以下命令。

journalctl gnome-shell
結(jié)束語
希望本指南能幫助你使用 ??journalctl?? 查看分析 Linux 桌面或服務(wù)器上的 systemd 
日志,排除故障。如果你知道如何使用這些命令,systemd 日志管理的功能非常強(qiáng)大,它能讓你在調(diào)試時的生活變得輕松一些?,F(xiàn)在所有主流的 
Linux 發(fā)行版都使用 systemd。Ubuntu、Debian、Fedora、Arch 它們都使用 systemd 
作為其默認(rèn)的操作系統(tǒng)組件。如果你想了解不使用 systemd 的 Linux發(fā)行版,你可能想看看 ??MX-Linux??、Gentoo、Slackware、Void Linux。















 
 
 












 
 
 
 