作为 systemd 家族的一员,journalctl 命令被用作查询日志。它对应的守护进程是 journald,服务为 systemd-journald.service

journald 之前,每个服务的日志都由自己控制,输出在松散不同的地方,这给系统管理员带来了极大的不便。查询不同的服务日志,就得知道各自服务的日志路径,再加上每个服务日志的记录格式或风格等均有不同程度的差异。

journald的出现,就是提供一个中心化日志管理的方式,所有systemd管理的服务日志均记录到同一个地方,以同样的二进制格式记录相似的上下文信息格式。这样的好处就是对于查询来说,只需要用同样的命令,便可以根据需求附加不同的查询条件来返回所需要的日志信息。

本文主要讲述 journalctl 命令的一些日常使用实例。

查询所有日志

journalctl

直接输入该命令,显示所有日志。

journalctl full logs

journalctl 命令会将显示结果作为 less 命令的输入,所以上述命令实际情况下会只显示窗口大小的命令条数,若想显示更多,我们得借助 less 的一些选项来完成。

常用的一些选项:

  • 空格键: 显示下一页
  • b: 显示上一页
  • 向右键: 向右滚动 (由于 journalctl 显示的日志默认格式为一行一条日志,所以要想看到日志的所有字符,通常需要横向滚动)
  • 向左键: 向左滚动
  • g: 跳跃到整个日志的第一行
  • G: 跳跃到整个日志的最后一行
  • q: 退出

若想控制台窗口显示所有日志,而不是借助于 less,那么可以

journalctl --no-pager

通常情况下不推荐这么显示,因为大量的日志显示会使得控制台长时间失去响应功能,而且基本不需要这么全部的显示日志。

查询实时日志

有时候我们需要实时的查看日志,

journalctl -f

(本文完)