如何使用Jouralctl读取Linux系统日志

随着systemd的引入,Linux系统日志记录发生了变化。了解如何使用Jouralctl命令读取和筛选系统日志消息。

集中记录

争议并不陌生,Systemd系统和服务经理在收集系统日志的方式上引入了重大变化。根据创建日志的服务或守护进程,日志通常位于文件系统中的不同位置。但他们都有一个共同点。它们是纯文本文件。

使用systemd,所有系统、引导和内核日志文件都由一个集中的专用日志记录解决方案收集和管理。它们的存储格式是二进制的。这有助于我们能够以不同的格式(如JSON)提取数据,这一点我们将会看到。

它还可以使交叉引用以前记录在单独日志文件中的相关信息变得更容易。由于数据现在保存在单个日志中,因此可以选择来自多个感兴趣来源的数据,并将其显示在单个交织的条目列表中。

Jouralctl是用于处理日记帐的工具。

没有装饰品的期刊Ctl

您可以在不使用命令行参数的情况下调用Journal alctl:

journalctl

Jouralctl显示整个日记帐,最早的条目位于列表顶部。列表在Less中显示,允许您使用Less的常用导航功能进行分页和搜索。您还可以使用向左箭头和向右箭头键进行横向滚动,以阅读宽日志条目。

按End键将直接跳到列表的底部,并显示最新的日志条目。

按Ctrl+C退出。

相关:如何在Linux上使用LESS命令

虽然不用sudo就可以调用Jouralctl,但是如果使用sudo,您将确保看到日志中的所有详细信息。

sudo journalctl

如果需要,您可以通过使用--no-pager选项让Jouralctl将其输出发送到终端窗口,而不是发送到LESS。

sudo journalctl --no-pager

输出在终端窗口中快速滚动,您将返回到命令提示符。

要限制Jouralctl返回的行数,请使用-n(行)选项。让我们要求10行输出:

sudo journalctl -n 10

跟踪日志更新

要使Journal alctl在最新条目到达日志时显示它们,请使用-f(跟随)选项。

sudo journalctl -f

最新条目的时间戳为07:09:07。当发生新活动时,新条目将附加到显示的底部。近乎实时的更新-酷!

7点09分59分,一款名为geek-app的应用程序在日志中注入了一个日志条目,上面写着:“HTG发来的新消息。”

更改显示格式

由于日记是二进制文件,因此在向您显示日记之前,需要将其中的数据转换或分析为文本。使用不同的解析器,可以从相同的二进制源数据创建不同的输出格式。Jouralctl可以使用几种不同的格式。

默认输出为短格式,与经典系统日志格式非常相似。要显式请求短格式,请将-o(输出)选项与短修饰符一起使用。

sudo journalctl -n 10 -o short-full

从左到右,这些字段为:

创建消息的时间,以当地时间表示。 主机名。 进程名称。这是生成消息的过程。 日志消息。

要获得完整的日期和时间戳,请使用Short-Full修饰符:

sudo journalctl -n 10 -o short-full

此输出中的日期和时间格式是您在按时段选择日志消息时需要提供日期和时间的格式,我们稍后将会看到。

要查看每条日志消息附带的所有元数据,请使用VERBOSE修饰符。

sudo journalctl -n 10 -o verbose

有许多可能的字段,但消息中出现所有字段的情况很少。

一个值得讨论的领域是优先级领域。在此示例中,它的值为6。该值表示消息的重要性:

0:紧急情况。系统无法使用。 1:警报。已标记应立即更正的情况。 2:危急。这涵盖了主要应用程序中的崩溃、核心转储和重大故障。 3:错误。已报告错误,但认为该错误并不严重。 4:警告。使您注意到一种条件,如果忽略该条件,可能会变成错误。 5:通知。用于报告异常事件,但不报告错误。 6:信息。常规操作消息。这些不需要采取行动。 7:调试。放入应用程序中的消息,以使它们更容易进行调试。

如果希望输出显示为格式正确的JavaScript Object Notation(JSON)对象,请使用json修改器:

sudo journalctl -n 10 -o json

每条消息都被正确包装为格式良好的JSON对象,并且每行输出显示一条消息。

要对JSON输出进行美化打印,请使用json-pretty修饰符。

sudo journalctl -n 10 -o json-pretty

每个JSON对象被分成多行,每个名称-值对在一个新行上。

要仅查看日志条目消息,而不查看时间戳或其他元数据,请使用CAT修饰符:

sudo journalctl -n 10 -o cat

尽管某些消息确实包含线索,但这种显示格式可能会使识别引发日志事件的进程变得困难。

按时间段选择日志消息

要将Jouralctl的输出限制在您感兴趣的时间段内,请使用-S选项(自)和-U选项(直到)。

要查看自特定时间和日期以来的日志条目,请使用以下命令:

sudo journalctl -S "2020-91-12 07:00:00"

显示只包含在命令中的日期和时间之后到达的消息。

要定义要报告的时间段,请同时使用-S(自)和-U(直到)选项。此命令查看15分钟时间段内的日志消息。:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

如果您知道您的系统上发生了一些奇怪的事情,并且大概知道它发生的时间,这是一个很好的组合用法。

使用相对时间段

您可以在选择时间段时使用相对寻址。这意味着你可以说“向我展示从一天前到现在的所有事件。”这就是该命令的含义。“d”代表“天”,“-1”代表过去的一天。

sudo journalctl -S -1d

日志消息是从昨天00:00:00到“现在”列出的。

如果要调查最近发生的事情,可以指定以小时为单位的相对时间段。下面我们查看前一小时的日志消息:

sudo journalctl -S -1h

将为您显示过去一小时的留言。您还可以使用“m”设置以分钟为单位的相对时间段,使用“w”表示周。

新闻媒体了解今天、昨天和明天。这些修饰符提供了一种指定公共时间段的便捷方法。要查看昨天发生的所有事件,请使用以下命令:

sudo journalctl -S yesterday

将检索并为您显示昨天发生的截至午夜00:00:00的所有日志日志事件。

要查看今天到目前为止收到的所有日志消息,请使用以下命令:

sudo journalctl -S today

显示从00:00:00到命令发出时间的所有内容。

您可以混合使用不同的时间段修饰符。要查看从两天前到今天开始的所有内容,请使用以下命令:

sudo journalctl -S -2d -U today

从前天到今天的一切都会被检索和展示。

按数据字段选择日志消息

您可以搜索与多种日记字段匹配的日志消息。这些搜索尝试在附加到每封邮件的元数据中查找匹配项。建议您参考字段列表并选择对您最有用的字段。

请记住,应用程序是否完成每个字段完全取决于应用程序的作者。您不能保证每个字段都会填充。

所有的日志字段修饰符都以相同的方式使用。“我们将在下面的示例中使用几个。要查找来自特定应用程序的日志消息,请使用_comm(命令)修饰符。如果您还使用-f(跟随)选项,那么Journal alctl将在新消息到达时跟踪来自该应用程序的新消息。

sudo journalctl -f _COMM=geek-app

您可以使用生成日志消息的进程的进程ID搜索日志条目。使用ps命令查找要搜索的守护进程或应用程序的进程ID。

sudo journalctl _PID=751

在用于研究本文的机器上,SSH守护进程是进程751。

您还可以按用户ID进行搜索。这是启动应用程序或命令或拥有进程的人员的用户ID。

sudo journalctl _UID=1000

与任何其他用户ID关联的所有消息都会被过滤掉。仅显示与用户1000相关的消息:

搜索与特定应用程序相关的日志消息的另一种方法是提供可执行文件的路径。

sudo journalctl /usr/bin/anacron

将检索并显示所有Anacron计划程序日志消息。

为了使搜索更容易,我们可以要求Jouralctl为任何日记字段列出它持有的所有值。

要查看Jouralctl为其记录日志消息的用户ID,请使用-F(字段)选项,并传递_UID字段标识符。

journalctl -F _UID

让我们再做一次,并查看组ID(GID):

journalctl -F _GID

您可以使用任何日记帐字段标识符执行此操作。

列出内核消息

有一种内置的方法可以快速隔离内核消息。你不需要自己搜索和隔离他们。k(内核)选项删除所有其他消息,并让您可以即时查看内核日志条目。

sudo journalctl -k

根据优先级字段中的值,突出显示反映了消息的重要性。

查看引导消息

如果您有想要调查的与引导相关的问题,那么Jouralctl会为您提供相关报道。可能您添加了新硬件,但没有响应,或者上次系统升级后,以前工作正常的硬件组件不再工作。

要查看与上次引导相关的日志条目,请使用-b(引导)选项:

journalctl -b

将为您显示上次引导的日志条目。

当我们说“最后一次启动”时,我们指的是使您的计算机在当前登录会话中恢复活力的启动过程。要查看以前的引导,您可以使用一个数字来告诉Jouralctl您对哪个引导感兴趣。要查看之前的第三次引导,请使用以下命令:

journalctl -b 3

通常,如果您遇到了问题,并且必须重新启动计算机,那么您感兴趣的是以前的启动顺序。所以这是一种常见的命令形式。

很容易把靴子的顺序搞混。为了提供帮助,我们可以使用--list-boot选项要求Jouralctl列出它在日志中记录的引导。

journalctl --list-boots

您可以根据日期和时间戳确定要查看其消息的引导,然后使用左栏中的数字获取该引导序列的日志消息。您还可以选择32位引导标识符,并将其传递给Jouralctl。

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

将检索并显示我们请求的引导序列中的日志消息。

管理日志硬盘空间

当然,日志及其所有日志消息都存储在您的硬盘上。这意味着他们将占用硬盘空间。要查看日志占用了多少空间,请使用--disk-use选项。

journalctl --disk-usage

对于今天的硬盘,152MB的空间一点也不大,但出于演示目的,我们仍将削减它。我们有两种方法可以做到这一点。第一种方法是设置要将日志缩减回的大小限制。当然,它会再次生长,但我们现在可以修剪它,为新的生长做好准备。

我们将使用标题极佳的--VANUAL-SIZE选项,并传入我们希望将日志缩小到的大小。我们要100MB。考虑这一点的方法是,我们要求Jouralctl“丢弃您能扔掉的任何东西,但不要低于100MB。”

journalctl --vacuum-size=100M

减少日志大小的另一种方法是使用--vacuum-time选项。此选项告诉Jouralctl丢弃早于您在命令行中提供的时间段的邮件。您可以在时间段中使用天、周、月和年。

让我们删除所有超过一周的邮件:

journalctl --vacuum-time=1weeks

数据与信息

除非你能拿到数据并加以利用,否则数据是没有用的。然后它就变成了有用的信息。Jouralctl命令是一种灵活而复杂的工具,允许您以各种方式获取感兴趣的信息。

您几乎可以使用所需的任何信息片段来记录所需的日志消息。

相关文章