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