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

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

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

一些日常使用实例

查询所有日志

# journalctl

-- Logs begin at 四 2019-07-11 11:10:15 CST, end at 二 2019-10-15 09:01:01 CST. --
10月 14 20:27:26 AliYun systemd[1]: Closed udev Kernel Socket.
10月 14 20:27:26 AliYun systemd[1]: Closed udev Control Socket.
10月 14 20:27:26 AliYun systemd[1]: Starting Cleanup udevd DB...
10月 14 20:27:26 AliYun systemd[1]: Started Cleanup udevd DB.
10月 14 20:27:26 AliYun systemd[1]: Reached target Switch Root.
10月 14 20:27:26 AliYun systemd[1]: Started Plymouth switch root service.
10月 14 20:27:26 AliYun systemd[1]: Starting Switch Root...
10月 14 20:27:26 AliYun systemd[1]: Switching root.
10月 14 20:27:26 AliYun systemd-journal[102]: Journal stopped

常用的一些选项:

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

更多参考:如何使用Journalctl查看并操作Systemd日志
英文参考:How To Use Journalctl to View and Manipulate Systemd Logs by Justin Ellingwood