Linux中國

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

本指南介紹了 systemd 的 journalctl 工具及其各種命令的基礎知識。你可以使用這些命令對 Linux 中的桌面和伺服器日誌進行故障診斷。以下是如何使用 journalctl 查看和分析 systemd 日誌的不同例子。

簡介

很多人說 systemd 不好,它對系統的影響很大,這也是一個有爭議的話題。但你不能否認的是,它提供了一套完善的工具來管理和排除系統故障。想像一下,當你遇到一個沒有 GUI 的損壞系統時,你可能會把啟動和 GRUB 弄得一團糟。在這種情況下,你可以從一個 立付 Live 系統啟動,掛上你的 Linux 分區,然後瀏覽 systemd 的日誌,找出問題所在。

systemd 有三個基本組件,如下所示:

  • systemd:Linux 操作系統的系統和服務管理器。
  • systemctl :該命令用於反觀和控制 systemd 系統和服務管理器的狀態。
  • systemd-analyze:該命令提供系統啟動時的性能統計,並從系統和服務管理器中檢索其他狀態和跟蹤信息。

除了這三個服務外,systemd 還提供其他服務,如 journald、logind、networkd 等。在本指南中,我們將討論 systemd 的 journald 服務。

journald - systemd 日誌服務

根據設計,systemd 提供了一個集中的方式來處理所有來自進程、應用程序等的操作系統日誌。所有這些日誌事件都由 systemd 的 journald 守護進程來處理。journald 守護進程收集所有來自 Linux 操作系統各處的日誌,並將其作為二進位數據存儲在文件中。

以二進位數據集中記錄事件、系統問題的好處有很多。例如,由於系統日誌是以二進位而不是文本形式存儲的,你可以以文本、JSON 對象等多種方式進行轉譯,以滿足各種需求。另外,由於日誌是按順序存儲的,通過對日誌的日期/時間操作,超級容易追蹤到單個事件。

請記住,journald 收集的日誌文件數以千行計,而且不斷更新每次開機、每個事件。因此,如果你有一個長期運行的 Linux 操作系統,日誌的大小應該以 GB 為單位。由於有著數以千計的日誌,最好用基本命令進行過濾,以了解更多系統問題。

journald 配置文件

journald 的配置文件存在於以下路徑中。它包含了關於如何進行日誌記錄的各種標誌。你可以看一下這個文件,並進行必要的修改。但我建議不要修改這個文件,除非你知道自己在做什麼。

/etc/systemd/journald.conf

journald 存儲二進位日誌文件的地方

journald 以二進位格式存儲日誌。它們被保存在這個路徑下的一個目錄中:

/var/log/journal

例如,在下面的路徑中,有一個目錄包含了迄今為止的所有系統日誌。

journalctl log file path

不要使用 cat 命令,也不要使用 nanovi 來打開這些文件。它們(是二進位的),無法正常顯示。

使用 journalctl 來查看和分析 systemd 日誌

journald 基本命令

查看 journald 日誌的基本命令是:

journalctl

journalctl

該命令提供了所有應用程序和進程的日誌條目,包括錯誤、警告等。它顯示的列表中,最舊的日誌在頂部,當前的日誌在底部。你需要不斷按回車鍵來逐行滾動瀏覽。你也可以使用 PAGE UPPAGE DOWN 鍵來滾動。按 q 鍵可以退出這個視圖。

如何以不同時區的時間查看日誌條目

默認情況下,journalctl 以當前系統時區顯示日誌的時間。然而,你可以很容易地在命令中提供時區,將同一日誌轉換為不同的時區。例如,要以 UTC 查看日誌,請使用以下命令:

journalctl --utc

journalctl --utc

如何在日誌中只查看錯誤、警告等信息

系統產生的日誌有不同的優先順序。有些日誌可能是可以忽略的警告,有些可能是重要的錯誤。你可能想只看錯誤,不看警告。這也可以用下面的命令來實現。

要查看緊急系統信息,請使用:

journalctl -p 0

journalctl -p 0

錯誤代碼:

0: 緊急情況
1: 警報
2: 危急
3: 錯誤
4: 警告
5: 通知
6: 信息
7:調試

當你指定錯誤代碼時,它顯示該等級及更高的所有信息。例如,如果你指定下面的命令,它會顯示所有優先順序為 2、1 和 0 的信息:

journalctl -p 2

如何查看特定啟動的日誌

當你運行 journalctl 命令時,它會顯示當前啟動的信息,即你正在運行的會話中的信息。但也可以查看過去的啟動信息。

在每次重啟時,日誌都會持續更新。journald 會記錄不同啟動時的日誌。要查看不同啟動時的日誌,請使用以下命令。

journalctl --list-boots

journalctl list-boots

  • 第一個數字顯示的是 journald 的唯一的啟動跟蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。
  • 第二個數字是啟動 ID,你也可以在命令中指定。
  • 接下來的兩個日期、時間組合是存儲在相應文件中的日誌的時間。如果你想找出某個特定日期、時間的日誌或錯誤,這就非常方便了。

要查看一個特定的啟動號碼,你可以選擇第一個啟動跟蹤號碼或啟動 ID,如下所示。

journalctl -b -45
journalctl -b 8bab42c7e82440f886a3f041a7c95b98

journalctl -b 45

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

journalctl -xb -p 3

journalctl -xb

如何查看某一特定時間、日期的日誌記錄

journalctl 功能強大,可以在命令中提供類似英語的參數,用於時間和日期操作。

你可以使用 --since 選項與 yesterdaytodaytomorrownow 組合。

下面是一些不同命令的例子。你可以根據你的需要修改它們。它們是不言自明的。以下命令中的日期、時間格式為 "YYYY-MM-DD HH:MM:SS"

journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"

journalctl --since 09:00 --until

你也可以將上述內容與錯誤級別開關結合起來。

如何查看內核特定的日誌記錄

Linux 內核信息也可以從日誌中提取出來。要查看當前啟動時的內核信息,請使用以下命令:

journalctl -k

如何查看某個服務、PID 的日誌

你可以從 journald 日誌中過濾出某個 systemd 服務單元的特定日誌。例如,如果要查看 NetworkManager 服務的日誌,請使用下面的命令。

journalctl -u NetworkManager.service

journalctl NetworkManager service

如果你不知道服務名稱,可以使用下面的命令來列出系統中的 systemd 服務。

systemctl list-units --type=service

如何查看用戶、組的日誌

如果你正在分析伺服器日誌,在多個用戶登錄的情況下,這個命令很有幫助。你可以先用下面的命令從用戶名中找出用戶的 ID。例如,要找出用戶 debugpoint 的 ID:

id -u debugpoint

然後使用 _UID 選項指定該 ID 與來查看該用戶產生的日誌。

journalctl _UID=1000 --since today

journalctl _UID

同樣地,使用 _GID 選項也可以查到用戶組的情況。

如何查看一個可執行文件的日誌

你也可以查看某個特定程序或可執行文件的日誌。例如,如果你想找出 gnome-shell 的信息,你可以運行以下命令。

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。

via: https://www.debugpoint.com/systemd-journalctl/

作者:Arindam 選題:lkxed 譯者:Chao-zhi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
1
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國