首頁 > 運維 > 安全 > 如何使用 journalctl 檢視和分析 systemd 日誌(附實例)

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

PHPz
發布: 2023-06-10 08:55:49
轉載
2257 人瀏覽過

如何使用 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 查看和分析 systemd 日志(附实例)

journalctl log file path

不要使用  cat 指令,也不要使用 nano 或 #1 來開啟這些檔案。它們(是二進制的),無法正常顯示。

使用journalctl 來檢視和分析systemd 日誌

journald 基本指令

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

journalctl
登入後複製

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

#journalctl

#

该命令提供了所有应用程序和进程的日志条目,包括错误、警告等。它显示的列表中,最旧的日志在顶部,当前的日志在底部。你需要不断按回车键来逐行滚动浏览。你也可以使用 ​​PAGE UP​​ 和 ​​PAGE DOWN​​ 键来滚动。按 ​​q​​ 键可以退出这个视图。

如何以不同时区的时间查看日志条目

默认情况下,​​journalctl​​ 以当前系统时区显示日志的时间。然而,你可以很容易地在命令中提供时区,将同一日志转换为不同的时区。例如,要以 UTC 查看日志,请使用以下命令:

journalctl --utc
登入後複製

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

journalctl --utc

如何在日志中只查看错误、警告等信息

系统产生的日志有不同的优先级。有些日志可能是可以忽略的警告,有些可能是重要的错误。你可能想只看错误,不看警告。这也可以用下面的命令来实现。

要查看紧急系统信息,请使用:

journalctl -p 0
登入後複製

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

journalctl -p 0

错误代码:

0: 紧急情况
1: 警报
2: 危急
3: 错误
4: 警告
5: 通知
6: 信息
7:调试
登入後複製

当你指定错误代码时,它显示该等级及更高的所有信息。例如,如果你指定下面的命令,它会显示所有优先级为 2、1 和 0 的信息:

journalctl -p 2
登入後複製

如何查看特定启动的日志

当你运行 ​​journalctl​​ 命令时,它会显示当前启动的信息,即你正在运行的会话中的信息。但也可以查看过去的启动信息。

在每次重启时,日志都会持续更新。journald 会记录不同启动时的日志。要查看不同启动时的日志,请使用以下命令。

journalctl --list-boots
登入後複製

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

journalctl list-boots

  • 第一个数字显示的是 journald 的唯一的启动跟踪号码,你可以在下一个命令中使用它来分析该特定的启动。
  • 第二个数字是启动 ID,你也可以在命令中指定。
  • 接下来的两个日期、时间组合是存储在相应文件中的日志的时间。如果你想找出某个特定日期、时间的日志或错误,这就非常方便了。

要查看一个特定的启动号码,你可以选择第一个启动跟踪号码或启动 ID,如下所示。

journalctl -b -45
登入後複製
journalctl -b 8bab42c7e82440f886a3f041a7c95b98
登入後複製

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

journalctl -b 45

你也可以使用 ​​-x​​ 选项,在显示屏上添加 systemd 错误信息的解释。在某些情况下,这是个救命稻草。

journalctl -xb -p 3
登入後複製

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

journalctl -xb

如何查看某一特定时间、日期的日志记录

​journalctl​​ 功能强大,可以在命令中提供类似英语的参数,用于时间和日期操作。

你可以使用 ​​--since​​ 选项与 ​​yesterday​​、​​today​​、​​tomorrow​​ 或 ​​now​​ 组合。

下面是一些不同命令的例子。你可以根据你的需要修改它们。它们是不言自明的。以下命令中的日期、时间格式为 ​​"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 查看和分析 systemd 日志(附实例)

journalctl --since 09:00 --until

你也可以将上述内容与错误级别开关结合起来。

如何查看内核特定的日志记录

Linux 内核信息也可以从日志中提取出来。要查看当前启动时的内核信息,请使用以下命令:

journalctl -k
登入後複製

如何查看某个服务、PID 的日志

你可以从 journald 日志中过滤出某个 systemd 服务单元的特定日志。例如,如果要查看 NetworkManager 服务的日志,请使用下面的命令。

journalctl -u NetworkManager.service
登入後複製

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

journalctl NetworkManager service

如果你不知道服务名称,可以使用下面的命令来列出系统中的 systemd 服务。

systemctl list-units --type=service
登入後複製

如何查看用户、组的日志

如果你正在分析服务器日志,在多个用户登录的情况下,这个命令很有帮助。你可以先用下面的命令从用户名中找出用户的 ID。例如,要找出用户 ​​debugpoint​​ 的 ID:

id -u debugpoint
登入後複製

然后使用 ​​_UID​​ 选项指定该 ID 与来查看该用户产生的日志。

journalctl _UID=1000 --since today
登入後複製

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

journalctl _UID

同样地,使用 ​​_GID​​ 选项也可以查到用户组的情况。

如何查看一个可执行文件的日志

你也可以查看某个特定程序或可执行文件的日志。例如,如果你想找出 ​​gnome-shell​​ 的信息,你可以运行以下命令。

journalctl /usr/bin/gnome-shell --since today
登入後複製

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

journalctl gnome-shell

結束語

希望本指南能幫助你使用 #journalctl 查看分析 Linux 桌面或伺服器上的 systemd 日誌,排除故障。如果你知道如何使用這些命令,systemd 日誌管理的功能非常強大,它能讓你在調試時的生活變得輕鬆一些。現在所有主流的 Linux 發行版都使用 systemd。 Ubuntu、Debian、Fedora、Arch 它們都使用 systemd 作為其預設的作業系統元件。如果你想了解不使用 systemd 的 Linux發行版,你可能想看看 MX-Linux、Gentoo、Slackware、Void Linux。

以上是如何使用 journalctl 檢視和分析 systemd 日誌(附實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板