Linux 必知必會:通過不同示例查看和分析 Systemd 日志
介紹
許多人說 Systemd 不好,它對系統(tǒng)很繁重,而且一直是一個有爭議的話題。但你不能否認它提供了一套很好的實用程序來管理和排除系統(tǒng)故障。想象一下,您最終會得到一個沒有 GUI 的損壞系統(tǒng)。您可能也搞砸了 boot 和 GRUB。在這種情況下或一般情況下——您可以從 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)計信息,并從系統(tǒng)和服務(wù)管理器檢索其他狀態(tài)和跟蹤信息
除了這三個之外,systemd 還提供了其他服務(wù),例如 – journald、logind、networkd 等。在本指南中,我們將討論 systemd 的 journald 服務(wù)。
journald – systemd journal守護進程
通過設(shè)計,systemd 提供了一種集中方式來處理來自進程、應(yīng)用程序等的所有操作系統(tǒng)日志。所有這些日志記錄事件都由 systemd 的 journald 守護進程處理。journald 守護進程收集來自 Linux 操作系統(tǒng)各處的所有日志,并將主題作為二進制數(shù)據(jù)存儲在文件中。
集中記錄事件的優(yōu)點,作為二進制數(shù)據(jù)的系統(tǒng)問題有很多。例如,由于系統(tǒng)日志存儲為二進制而不是文本 - 您可以通過多種方式進行翻譯,例如文本、JSON 對象以滿足各種需求。此外,由于日志是通過日志的日期/時間操作順序存儲的,因此跟蹤單個事件非常容易。
請記住,journald 收集的日志文件有數(shù)千行,并且會針對每個事件、每次啟動進行更新。因此,如果您長時間運行 Linux 操作系統(tǒng),journal日志大小應(yīng)該以 GB 為單位。由于日志數(shù)以千計,因此最好使用基本命令進行過濾以了解有關(guān)系統(tǒng)問題的更多信息。
journald配置文件
journald 的配置文件位于以下路徑中。它包含有關(guān)日志記錄如何發(fā)生的各種標志。您可以查看該文件并進行必要的更改。但我建議不要修改此文件,除非您知道自己在做什么。
/etc/systemd/journald.conf
journald 存儲二進制日志文件的位置
journald 以二進制格式存儲日志。它們存儲在此路徑下的目錄中。
[linuxmi@fedora www.linuxmi.com]$ cd /var/log/journal
[linuxmi@fedora journal]$ ls
a73fa995d8e4438ea7b1fcedb8220981
[linuxmi@fedora journal]$ cd a73fa995d8e4438ea7b1fcedb8220981
例如,在下面的路徑中有一個目錄,其中包含迄今為止的所有系統(tǒng)日志。
journalctl 日志文件路徑
不要使用 cat 命令或使用 nano 或 vi 打開這些文件。它們將無法正確顯示。
使用 journalctl 查看和分析 Systemd 日志
基本journalctl命令
使用journalctl守護程序查看日志的基本命令是 :
[linuxmi@fedora www.linuxmi.com]$ journalctl
journalctl
這將為您提供所有日志條目,包括來自所有應(yīng)用程序和進程的錯誤、警告等。它顯示最舊日志在頂部和當前日志在底部的列表。您需要按住 ENTER 逐行滾動。您也可以使用 PAGE UP 和 PAGE DOWN 鍵滾動。按 q 退出此視圖。
如何查看時區(qū)的 journal條目
默認情況下,journalctl 顯示當前系統(tǒng)時區(qū)的日志時間。但是,您可以輕松地在命令中提供時區(qū)以將相同的日志轉(zhuǎn)換為不同的時區(qū)。例如,要以 UTC 格式查看日志,請使用以下命令。
[linuxmi@fedora www.linuxmi.com]$ journalctl --utc
journalctl –utc
如何在journal日志中僅查看錯誤、警告等
系統(tǒng)生成的日志具有不同的優(yōu)先級。有些日志可能是可以忽略的警告,有些可能是嚴重錯誤。您可能只想查看錯誤,而不是警告。這也可以使用以下命令。
要查看緊急系統(tǒng)消息,請使用:
[linuxmi@fedora www.linuxmi.com]$ journalctl -p 0
journalctl -p 0
錯誤代碼
0:緊急
1:警報
2:嚴重
3:錯誤
4:警告
5:通知
6:信息
7:調(diào)試
當您指定錯誤代碼時,它會顯示來自該代碼及以上代碼的所有消息。例如,如果您指定以下命令,它將顯示優(yōu)先級為 2、1 和 0 的所有消息
[linuxmi@fedora www.linuxmi.com]$ journalctl -p 2
如何查看特定引導(dǎo)的 journal日志
當您運行 journalctl 命令時,它會顯示來自當前啟動的信息,這些信息來自您正在運行的當前會話。但也可以查看有關(guān)過去引導(dǎo)的信息。
journal 日志會在每次重新啟動時不斷更新。journald 跟蹤不同引導(dǎo)中的日志。要查看,引導(dǎo)日志使用以下命令。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl --list-boots
journalctl 列表引導(dǎo)
- 第一個數(shù)字顯示了唯一的日志引導(dǎo)軌道編號,您可以在下一個命令中使用它來分析特定的引導(dǎo)。
- 第二個數(shù)字是您也可以在命令中指定的引導(dǎo) ID。
- 接下來的兩個日期、時間組合是存儲在相應(yīng)文件中的日志的持續(xù)時間。如果您想從特定日期、時間找出日志或錯誤,這非常方便。
要查看特定的引導(dǎo)編號,請使用第一個編號或引導(dǎo) ID,如下所示。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl -b -2
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl -b ff83b9f3b8cb462abf6f0c318c86f4a2
journalctl -b 2
您還可以使用-x開關(guān)來在顯示中添加對 systemd 錯誤消息的解釋。在某些情況下,這是救命稻草。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl -xb -p 3
journalctl -xb
如何查看特定時間、日期持續(xù)時間的 journal 日志
journalctl 足夠強大,可以在命令本身中提供類似“english”的參數(shù)來進行時間和日期操作。
您可以將 --since 開關(guān)與“yesterday”, “today”, “tomorrow”, 或 “now”組合使用。
下面是不同命令的一些示例。您可以根據(jù)需要修改它們。一看就知道,以下命令中的日期、時間格式為"YYYY-MM-DD HH:MM:SS"
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl --since "2022-01-16 06:00:00"
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl --since "2022-03-03" --until "2022-03-05 05:00:00"
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl --since yesterday
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl --since 08:00 --until "1 hour ago"
您也可以將上述內(nèi)容與錯誤級別開關(guān)結(jié)合使用。
如何查看內(nèi)核特定的journal 日志
Linux 內(nèi)核消息也可以從 journal 日志中提取。要查看當前啟動的內(nèi)核消息,請僅使用以下命令。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl -k
如何查看服務(wù)的 journal 日志,PID
您只能從 journald 日志中過濾掉來自 systemd 服務(wù)單元的特定日志。例如,要從 NetworkManager 服務(wù)中查找日志,請使用以下命令。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl -u NetworkManager.service
journalctl NetworkManager 服務(wù)
如果您不知道服務(wù)名稱,可以使用以下命令列出系統(tǒng)中的 systemd 服務(wù)。
linuxmi@linuxmi:~/www.linuxmi.com$ systemctl list-units --type=service
如何查看用戶、組的 journal 日志
如果您正在分析服務(wù)器日志,則此命令在多個用戶登錄時很有幫助。您可以首先使用以下命令從用戶名中找出用戶 ID。例如,要找出用戶“ linuxmi”的 id
linuxmi@linuxmi:~/www.linuxmi.com$ id -u linuxmi
然后使用該 ID 和_UID來查看用戶生成的日志。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl _UID=1000 --since today
journalctl _UID
同樣,使用_GID為用戶組找出相同的值。
如何查看可執(zhí)行文件的 journal 日志
您還可以查找特定程序或可執(zhí)行文件的 journald記錄。例如,如果要查找 gnome-shell 的消息,可以運行以下命令。
linuxmi@linuxmi:~/www.linuxmi.com$ journalctl /usr/bin/gnome-shell --since today
journalctl gnome-shell
結(jié)束語
我希望本指南可以幫助您使用 journalctl 在 Linux 桌面或服務(wù)器故障排除上查看分析 systemd 日志。如果您知道如何使用命令,systemd 日志管理功能非常強大,它可以讓您在調(diào)試期間輕松一些。如今,所有主要的主流 Linux 發(fā)行版都使用 Systemd。Ubuntu、Debian、Fedora、Arch——它們都使用 systemd 作為默認操作系統(tǒng)產(chǎn)品。如果您想了解無 systemd 的 Linux 發(fā)行版,那你可能需要查看MX-Linux、Gentoo、Slackware、Void Linux。