帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  如何使用 journalctl 查看和分析 systemd 日志

如何使用 journalctl 查看和分析 systemd 日志

2023-05-24 10:39:21 3066

systemd 有三个基本组件,如下所示:

systemd:Linux 操作系统的系统和服务管理器。

systemctl :该命令用于反观和控制 systemd 系统和服务管理器的状态。

systemd-analyze:该命令提供系统启动时的性能统计,并从系统和服务管理器中检索其他状态和跟踪信息。

扩展:

Systemctl

image.png 

systemd-analyze

 image.png


可以看到开机用了 30 秒以上。接下来查询下这锅应该谁背:

image.png

可以看到 cloud-init-local.service 耗时 最长,花了 5 秒。这里的记时有可能是等待其他服务器启动的,再来看看其关联服务的启动时间:

image.png 

除了这三个服务外,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

例如,在下面的路径中,有一个目录包含了迄今为止的所有系统日志。

 image.png


不要使用 cat 命令,也不要使用 nano 或 vi 来打开这些文件。它们(是二进制的),无法正常显示。

image.png 

使用 journalctl 来查看和分析 systemd 日志

journald 基本命令

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

journalctl

image.png 

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

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

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

journalctl --utc

image.png 

为确保您的机器现在使用的是正确的时间,请timedatectl单独使用命令或与status选项一起使用。显示将相同:

timedatectl status

image.png

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

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

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

journalctl -p 0这里linux没有这一级别的警告,所以未出现任何信息

image.png

错误代码:

0: 紧急情况

1: 警报

2: 危急

3: 错误

4: 警告

5: 通知

6: 信息

7:调试

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

journalctl -p 2

image.png 

如何查看特定启动的日志

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

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

journalctl --list-boots

image.png 

第一个数字显示的是 journald 的唯一的启动跟踪号码,你可以在下一个命令中使用它来分析该特定的启动。

第二个数字是启动 ID,你也可以在命令中指定。

接下来的两个日期、时间组合是存储在相应文件中的日志的时间。如果你想找出某个特定日期、时间的日志或错误,这就非常方便了。

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

journalctl -b -2

journalctl -b 573da31b0c2542d8ab13a9795f530c69

image.png 

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

journalctl  -p 3 -xb -2

image.png 

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

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"

image.png 

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

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

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

journalctl -k

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

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

journalctl -u NetworkManager.service

image.png 

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

systemctl list-units --type=service

image.png

如何查看用户、组的日志

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

id -u xurong

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

journalctl _UID=1000 --since today(这里是新建做测试的用户所以没有日志)

image.png 

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

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

journalctl /xurong.sh --since today

image.png

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: