Linux 必知必会:通过不同示例查看和分析 Systemd 日志

系统 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

 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。

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2020-07-10 07:58:14

Linux

2024-01-09 13:58:22

PandasPython数据分析

2019-01-30 14:14:16

LinuxUNIX操作系统

2023-12-26 12:10:13

2019-11-06 10:56:59

Python数据分析TGI

2021-06-09 11:06:00

数据分析Excel

2024-01-03 07:56:50

2022-05-18 09:01:19

JSONJavaScript

2023-02-16 09:52:46

journalctlsystemdLinux

2022-12-07 09:00:18

错误异常CGO

2022-12-01 08:15:41

CGOswitcherror

2022-09-28 08:40:04

杀死一个终端进程

2022-08-19 10:31:32

Kafka大数据

2023-05-10 07:15:22

Nacos管理工具配置

2015-10-20 09:46:33

HTTP网络协议

2018-10-26 14:10:21

2015-08-17 16:05:35

javascript对象编程

2023-04-20 14:31:20

Python开发教程

2023-05-08 15:25:19

Python编程语言编码技巧

2018-03-28 14:33:33

数据分析师工具Spark
点赞
收藏

51CTO技术栈公众号