Linux journalctl 命令实战示例

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将探索 Linux 的 journalctl 命令,这是一个强大的工具,用于查看和分析由 systemd journal 维护的系统日志。实验将涵盖 journalctl 的用途和功能,以及其各种过滤选项,帮助你有效地管理和排查 Linux 系统问题。我们将从了解 systemd journal 的用途开始,并学习如何使用 journalctl 访问日志。然后,我们将深入探讨 journalctl 的过滤功能,帮助你快速找到所需的相关信息。最后,我们将演示使用 journalctl 命令分析系统日志的实际示例。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/tail("File End Display") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/tail -.-> lab-422752{{"Linux journalctl 命令实战示例"}} linux/grep -.-> lab-422752{{"Linux journalctl 命令实战示例"}} end

理解 journalctl 的用途和功能

在这一步中,我们将探讨 Linux 中 journalctl 命令的用途和功能。journalctl 是一个强大的工具,用于查看和分析由 systemd journal 维护的系统日志。

首先,让我们了解 systemd journal 的用途。systemd journal 是一个日志系统,用于收集和存储系统日志,包括来自内核、系统服务和用户应用程序的消息。journalctl 命令提供了一种访问和与这些日志交互的方式。

首先,让我们运行不带任何选项的 journalctl 命令:

sudo journalctl

这将显示由 systemd journal 维护的整个日志历史记录。输出将包括各种日志条目,例如系统启动消息、服务状态更新和错误报告。

示例输出:

-- Logs begin at Tue 2023-04-25 10:00:00 UTC, end at Tue 2023-04-25 10:05:00 UTC. --
Apr 25 10:00:00 labex systemd[1]: Starting Login Service...
Apr 25 10:00:01 labex systemd[1]: Started Login Service.
Apr 25 10:00:01 labex sshd[123]: Server listening on 0.0.0.0 port 22.
Apr 25 10:00:02 labex sshd[123]: Server listening on :: port 22.
Apr 25 10:00:02 labex sshd[124]: Accepted password for labex from 10.0.2.2 port 49876 ssh2

如你所见,journalctl 命令按时间顺序显示日志条目,每个条目包含时间戳、主机名和日志消息。

现在,让我们探索 journalctl 命令的一些关键功能:

  1. 过滤日志:你可以根据各种条件过滤日志条目,例如日志级别、生成日志的服务或单元,或者时间戳。我们将在下一步中介绍更多高级过滤选项。
  2. 查看特定服务的日志:你可以使用 -u 选项后跟服务名称来查看特定服务或系统单元的日志。例如,sudo journalctl -u sshd.service 将显示 SSH 守护进程的日志。
  3. 查看当前启动的日志:你可以使用 -b 选项查看当前启动会话的日志。这对于排查最近系统启动期间发生的问题非常有用。
  4. 实时查看日志:你可以使用 -f 选项实时跟踪日志,类似于 tail -f 命令。

在下一步中,我们将深入探讨 journalctl 命令的过滤选项,并探索更多实际示例。

探索 journalctl 的过滤选项

在这一步中,我们将探索 journalctl 命令提供的各种过滤选项。过滤功能可以帮助你缩小日志条目的范围,专注于与你的故障排查或监控需求相关的特定信息。

首先,让我们根据日志级别过滤日志。要仅查看错误和严重级别的日志条目,可以使用 -p(priority,优先级)选项:

sudo journalctl -p err..crit

这将仅显示优先级为“error”或更高(critical)的日志条目。

示例输出:

Apr 25 10:00:00 labex systemd[1]: Failed to start Login Service.
Apr 25 10:00:01 labex sshd[123]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key

接下来,你可以根据特定的服务或系统单元过滤日志。例如,要查看 SSH 守护进程的日志,可以使用 -u(unit,单元)选项:

sudo journalctl -u sshd.service

这将显示与 SSH 守护进程相关的所有日志条目。

你还可以根据特定的时间范围过滤日志。要查看过去 30 分钟的日志,可以使用 -n(number,数量)和 -s(since,自)选项:

sudo journalctl -n 100 -s "30 minutes ago"

这将显示过去 30 分钟内的最后 100 条日志条目。

另一个有用的过滤选项是 -b(boot,启动)选项,它允许你查看特定启动会话的日志。例如,要查看当前启动会话的日志,可以使用:

sudo journalctl -b

你还可以结合多个过滤选项以进一步优化搜索。例如,要查看过去 30 分钟内 SSH 守护进程的错误和严重日志条目,可以使用:

sudo journalctl -u sshd.service -p err..crit -n 100 -s "30 minutes ago"

通过探索这些过滤选项,你可以有效地浏览和分析系统日志,以排查问题、监控系统健康状况,并深入了解你的 Linux 环境。

在下一步中,我们将深入探讨 journalctl 命令的更高级用例和实际示例。

使用 journalctl 命令分析日志

在这最后一步中,我们将探索 journalctl 命令的更高级用例,以有效地分析系统日志。

journalctl 的一个强大功能是能够以结构化格式查看日志。默认情况下,journalctl 以人类可读的格式显示日志,但你可以使用 -o(output,输出)选项来更改输出格式。例如,要以 JSON 格式查看日志,可以使用:

sudo journalctl -o json

这将以结构化的 JSON 格式显示日志条目,这对于编程分析或与其他工具集成非常有用。

另一个有用的功能是能够查看特定进程或应用程序的日志。你可以使用 -u(unit,单元)选项按特定服务或系统单元过滤日志,正如我们在上一步中看到的那样。此外,你还可以使用 -t(identifier,标识符)选项按特定进程 ID(PID)或可执行文件名过滤日志。例如,要查看 sshd 进程的日志,可以使用:

sudo journalctl -t sshd

这将显示与 sshd 进程相关的所有日志条目。

你还可以使用 --since--until 选项按特定时间范围过滤日志。例如,要查看过去 24 小时的日志,可以使用:

sudo journalctl --since "1 day ago"

这将显示过去 24 小时内的所有日志条目。

最后,你可以使用 --follow-f)选项实时持续监控日志条目,类似于 tail -f 命令。这对于跟踪实时事件或在问题发生时进行故障排查非常有用。

sudo journalctl -f

通过结合这些高级功能,你可以使用 journalctl 命令有效地分析和排查系统问题。记住,你练习使用 journalctl 的次数越多,就越能熟练地浏览和解释系统日志。

总结

在本实验中,我们首先探讨了 Linux 中 journalctl 命令的用途和功能。我们了解到,journalctl 命令用于查看和分析由 systemd journal 维护的系统日志,systemd journal 会收集并存储来自内核、系统服务和用户应用程序的日志。接着,我们运行了不带任何选项的 journalctl 命令以查看完整的日志历史记录,并讨论了该命令的关键功能,包括根据各种条件过滤日志以及查看特定服务的日志。

接下来,我们将探索 journalctl 命令提供的高级过滤选项,并学习如何使用各种命令分析日志。

Linux 命令速查表