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

作者阿里云代理 文章分类 分类:新闻快递 阅读次数 已被围观 81

许多人说 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 的配置文件位于以下路径中。它包含有关日志记录如何发生的各种标志。您可以查看该文件并进行必要的更改。但我建议不要修改此文件,除非您知道自己在做什么。

journald 存储二进制日志文件的位置

journald 以二进制格式存储日志。它们存储在此路径下的目录中。

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

journalctl 日志文件路径

不要使用 cat 命令或使用 nano 或 vi 打开这些文件。它们将无法正确显示。

使用 journalctl 查看和分析 Systemd 日志

基本journalctl命令

使用journalctl守护程序查看日志的基本命令是 

journalctl

这将为您提供所有日志条目,包括来自所有应用程序和进程的错误、警告等。它显示最旧日志在顶部和当前日志在底部的列表。您需要按住 ENTER 逐行滚动。您也可以使用 PAGE UP 和 PAGE DOWN 键滚动。按 q 退出此视图。

如何查看时区的 journal条目

默认情况下,journalctl 显示当前系统时区的日志时间。但是,您可以轻松地在命令中提供时区以将相同的日志转换为不同的时区。例如,要以 UTC 格式查看日志,请使用以下命令。

journalctl –utc

如何在journal日志中仅查看错误、警告等

系统生成的日志具有不同的优先级。有些日志可能是可以忽略的警告,有些可能是严重错误。您可能只想查看错误,而不是警告。这也可以使用以下命令。

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

 journalctl -p 0

错误代码

当您指定错误代码时,它会显示来自该代码及以上代码的所有消息。例如,如果您指定以下命令,它将显示优先级为 2、1 和 0 的所有消息

如何查看特定引导的 journal日志

当您运行 journalctl 命令时,它会显示来自当前启动的信息,这些信息来自您正在运行的当前会话。但也可以查看有关过去引导的信息。

journal 日志会在每次重新启动时不断更新。journald 跟踪不同引导中的日志。要查看,引导日志使用以下命令。

journalctl 列表引导

  • 第一个数字显示了唯一的日志引导轨道编号,您可以在下一个命令中使用它来分析特定的引导。
  • 第二个数字是您也可以在命令中指定的引导 ID。
  • 接下来的两个日期、时间组合是存储在相应文件中的日志的持续时间。如果您想从特定日期、时间找出日志或错误,这非常方便。

要查看特定的引导编号,请使用第一个编号或引导 ID,如下所示。

journalctl -b 2

您还可以使用-x开关来在显示中添加对 systemd 错误消息的解释。在某些情况下,这是救命稻草。

journalctl -xb

如何查看特定时间、日期持续时间的 journal 日志

journalctl 足够强大,可以在命令本身中提供类似“english”的参数来进行时间和日期操作。

您可以将 --since 开关与“yesterday”, “today”, “tomorrow”, 或 “now”组合使用。

下面是不同命令的一些示例。您可以根据需要修改它们。一看就知道,以下命令中的日期、时间格式为"YYYY-MM-DD HH:MM:SS"

您也可以将上述内容与错误级别开关结合使用。

如何查看内核特定的journal 日志

Linux 内核消息也可以从 journal 日志中提取。要查看当前启动的内核消息,请仅使用以下命令。

如何查看服务的 journal 日志,PID

您只能从 journald 日志中过滤掉来自 systemd 服务单元的特定日志。例如,要从 NetworkManager 服务中查找日志,请使用以下命令。

journalctl NetworkManager 服务

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

如何查看用户、组的 journal 日志

如果您正在分析服务器日志,则此命令在多个用户登录时很有帮助。您可以首先使用以下命令从用户名中找出用户 ID。例如,要找出用户“ linuxmi”的 id

然后使用该 ID 和_UID来查看用户生成的日志。

journalctl _UID

同样,使用_GID为用户组找出相同的值。

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

您还可以查找特定程序或可执行文件的 journald记录。例如,如果要查找 gnome-shell 的消息,可以运行以下命令。

journalctl gnome-shell

结束语

我希望本指南可以帮助您使用 journalctl 在 Linux 桌面或服务器故障排除上查看分析 systemd 日志。如果您知道如何使用命令,systemd 日志管理功能非常强大,它可以让您在调试期间轻松一些。如今,所有主要的主流 Linux 发行版都使用 Systemd。Ubuntu、Debian、Fedora、Arch——它们都使用 systemd 作为默认操作系统产品。如果您想了解无 systemd 的 Linux 发行版,那你可能需要查看MX-Linux、Gentoo、Slackware、Void Linux。

本公司销售:阿里云、腾讯云、百度云、天翼云、金山大米云、金山企业云盘!可签订合同,开具发票。