通過不同示例查看和分析 Systemd 日誌

鏈接:https://www.linuxmi.com/journalctl-systemd-logs.html

來自:Linux 迷

本指南解釋了 Systemd 的 journalctl 實用程序及其各種命令的基礎知識。您可以使用這些命令對 Linux 中的桌面和服務器日誌進行故障排除。這就是您可以使用 journalctl 通過不同示例查看和分析 Systemd 日誌的方式。

介紹

許多人說 Systemd 不好,它對系統很繁重,而且一直是一個有爭議的話題。但你不能否認它提供了一套很好的實用程序來管理和排除系統故障。想象一下,您最終會得到一個沒有 GUI 的損壞系統。您可能也搞砸了 boot 和 GRUB。在這種情況下或一般情況下——您可以從 LIVE 系統啓動,掛載您的 Linux 分區並瀏覽 Systemd 日誌以找出問題所在。

Systemd 具有以下三個基本組件:

除了這三個之外,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

 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,如下所示。

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