myfreax

journalctl 分析日志

systemd是大多数主要Linux发行版的默认的初始化程序。systemd的主要功能之一是它收集日志的方式以及为分析这些日志提供工具

7 min read
By myfreax
journalctl 分析日志

systemd是大多数主要Linux发行版的默认的初始化程序。systemd的主要功能之一是它收集日志的方式以及为分析这些日志提供工具。

在传统的SysVinit系统中,将日志存储在纯文本文件中的syslog 。读取和分析这些文件需要使用find、grep、cut和许多其他命令。

systemd比syslogs从更多的来源收集日志,以二进制格式保存日志,并为您提供命令行工具来读取、分析和操作日志。这比系统日志更精简。

journald是systemd的守护进程,它从各种日志源收集日志,如 syslog。journalctl是一个命令行工具,可让您与日志进行交互。

使用journalctl可以读取日志,实时监控日志,根据时间、服务、严重性等参数过滤日志。在本教程中,我将向您展示如何使用journalctl来读取、监控和分析Linux中的日志。

启用journald服务

一些Linux发行版,特别是桌面发行版,默认情况下不启用日志。日志的默认位置是/var/log/journal目录。您应该确保该目录存在。如果没有,请自己创建。

接下来,在/etc/systemd/journald.conf文件中确保将值Storage设置为autopersistent

journald.conf文件包含默认值。因此,配置行前面有#,也意味着这些配置选项使用默认设置。如果要更改任何内容,请从该行中删除#。

使用journalctl阅读和搜索日志

让我向您展示一些journalctl命令最基本但最有用的示例。如果您只是journalctl在终端中输入,它将按时间顺序显示日志日志。

journalctl在将会调用less命令来向您显示日志。这意味着您可以使用与使用 less 命令相同的按键来移动日志。

如果您不希望日志以less命令的模式显示,您可以使用--no-pager标志。这将直接在屏幕上显示整个日志,journalctl --no-pager

这不是很有用,如果您有大量日志,它会淹没您的屏幕。

journalctl

按时间倒序显示日志

如您所见,日志按时间顺序显示。这意味着最旧的存储日志首先显示。如果您想首先查看最近的日志,可以使用journalctl-r选项以相反的顺序显示日志。

它仍然使用less命令,显示日志。因此,因此你可按q退出日志查看模式。

journalctl -r

仅显示最近 N 行日志日志

您可以使用-n选项选择仅显示日志中的指定行数,而不是显示所有日志。例如命令journalctl -n 25,将显示最近的 25 行日志。

实时显示日志日志

现在你已经学会查看最近的日志,如果要实时查看日志,可以使用journalctl命令的-f选项,journalctl -f

tail命令的-f选项一样,这将在追踪模式下实时显示日志。使用Ctrl+C命令退出实时视图。

以UTC时间显示日志

默认情况下,日志日志以系统的本地时间显示。如果您的系统时间设置为UTC以外的时间,并且您希望以UTC格式查看日志,则可以使用--utc标志选项来执行此操作。

journalctl --utc

使用-k仅显示内核消息

systemd日志会累积来自不同来源的日志。如果您只想查看Linux内核日志,可以使用-k选项.

journalctl -k

查看所有日志

Systemd会根据当前用户权限是否显示用户可查看的日志。如果您是普通用户,它可能会显示一些日志,但不会显示所有日志:

如果您想访问所有日志,则应使用sudo运行journalctl命令。例如命令sudo journalctl -u ssh

根据服务的打印日志

journalctl的-u选项。让您可以根据systemd服务过滤日志。例如,如果你想查看 SSH 生成的日志,你可以运行命令journalctl -u ssh。前提是您需要知道服务名称。

显示指定时间间隔的日志

这是日志的字符串过滤功能的另一个示例。您可以过滤指定时间段的日志,并且有多种方法可以做到这一点。

您可以使用自然语言来过滤日志。像yesterday、today和tormrow这样的术语也会被识别。您还可以指定日期或日期时间组合。使用日期和时间指定时间段。

您甚至还可以使用-1h20min等相对时间来指定过去的1小时20分钟。journalctl的--since选项表示开始时间。--until表示结束时间。

journalctl --since=yesterday --until=now
journalctl --since "2020-07-10"
journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

根据UID、GID和PID过滤日志

如果您正在调试问题,您可能希望使用其PID检查某个进程的日志。还可以根据用户 ID (UID)、组ID (GID) 和进程 ID (PID) 过滤日志日志。

例如命令journalctl _PID=1234

组合多个选项查看日志

您可以组合多个选项来查看所需的日志。例如,如果您只想查看UTC时间戳中昨天的SSH日志,你可以运行命令sudo journalctl -u ssh --since=yesterday --utc

另一个常见的用法是根据引导会话过滤日志。如果您只想查看当前会话中的SSH日志,可以运行命令sudo journalctl -u ssh -b0

组合的可能性是无线多的,您可以根据需要组合选项。

journalctl -xe查看最后的几行日志

您经常会发现有人建议使用journalctl -xe命令。-e跳转到日志日志的末尾。-x显示日志条目的额外信息。

某些日志记录具有正常日志查看中未显示的附加信息。使用-x选项可能会显示此类信息。附加信息有助于解释错误或日志事件的上下文以及可能的解决方案。

仅显示日志中的错误

要显示当前会话中的所有错误,您可以运行命令journalctl -p 3 -xb-p 3过滤优先级为3的日志,这是错误。-x提供有关日志的附加信息。b自上次启动,即当前会话以来

您还可以使用其他优先级来获取调试、警告甚至关键级别的日志。这里列出了所有日志级别和优先级。

0表示emerg紧急,1表示alert警报,2表示crit关键。3表示错误。4表示警告。5表示注意。6表示普通信息。7表示调试消息。

您还可以显示一系列级别的日志。例如,如果您想查看当前会话中的所有警告、通知和信息日志,您可以运行以下命令:

journalctl -p 4..6 -b0

检查日志占用磁盘空间

journald从各种来源收集日志,并存储包括调试日志在内的各种级别的日志。虽然保留日志有助于分析和审计,但它们会占用大量磁盘空间。

您可以使用journalctl --disk-usage命令检查日志日志占用了多少磁盘空间。当您看到输出时,它将打印消息Archived and active journals take up 2.8G in the file system.

journalctl命令还有很多选项和用法,这里不可能全部介绍。如果您想了解更多详细信息,建议您阅读其手册页。

教程给了你足够的使用journalctl命令进行常规日志分析的能力。我希望你喜欢这个关于日志的详细教程请支持我们。如果您有任何建议或问题,请随时发表评论。