journalctl常用命令

半兽人 发表于: 2022-08-09   最后更新时间: 2022-08-10 11:17:13  
{{totalSubscript}} 订阅, 2,047 游览

journalctl命令是Systemd日志系统的一个命令,主要用来查看通过Systemd日志系统记录的日志,在此之前,Linux系统及各应用的日志都是分别管理的,Systemd取代了initd之后便开始统一管理了所有Unit的启动日志,现在可以只用一个journalctl命令,查看所有内核和应用的日志。

显示所有的信息(从旧到新)

journalctl

不带参数即可。

journalctl -xe

  • -e 从结尾开始看
  • -x 相关目录(catalog),比如在报错的信息下面,附加解决问题的网址
journalctl -xe

反序输出(从新到旧)

journalctl -r

实时读取日志文件

只需在命令后加参数 -f 即可,会实时输出最新日志:

journalctl -f

查看Log的最后N行

通过-n或者--lines=参数来指定显示的行数大小。

例如:获取最新的20行:

journalctl -n 20

journalctl --lines=20

查看系统内核日志

journalctl -k

显示指定时间的事件日志

journalctl可以显示指定时间段内发生的事件日志。 通过since和until来实现。

查看1小时前到现在的日志

journalctl --since "1 hr ago"

20分钟前的:

journalctl --since "20 min ago"

另外,journalctl 还能够理解部分相对值及命名简写。例如,大家可以使用 "yesterday"、"today"、"tomorrow" 或者 "now" 等,例如:获取昨天的日志数据可以使用下面的命令:

journalctl --since yesterday

指定时间段,日期的格式是 “YYYY-MM-DD HH:MM:SS”,如果时间部分未填写,则缺省使用 "00:00:00"。秒字段也可为空,默认值为"00":

journalctl --since "2022-08-09 03:00" --until "2022-08-09 04:00"

显示当前启动的日志

显示最近一次重启后收集的所有日志信息:

journalctl -b

这将帮助您识别和管理与当前环境相关的信息。

每当系统出现故障时,journalctl 插入了一行,如下所示:

Output
. . .

-- Reboot --

. . .

这可以用来帮助你在逻辑上将信息分离开。

输出格式

journalctl -b -u nginx -o json

或者更好看的:

journalctl -b -u nginx -o json-pretty

以下格式可用于显示:

  • cat:只显示消息字段本身。
  • export:适合传输或备份的二进制格式。
  • json:标准的JSON,每行有一个条目。
  • json-pretty:格式化的JSON,以提高人类的可读性。
  • json-sse:包装好的JSON格式的输出,以使添加服务器发送的事件兼容
  • short: 默认的syslog风格输出
  • short-iso:默认的格式,增加了显示ISO 8601挂钟时间戳的功能。
  • short-monotonic:带有单调的时间戳的默认格式。
  • short-precise:默认格式,精度为微秒
  • verbose:显示该条目可用的每一个日志字段,包括那些通常内部隐藏的字段。

这些选项允许你以任何最适合你当前需要的格式显示日志。

指定服务的日志:

journalctl -u httpd.service

多个

journalctl -u httpd.service -u crond.service

Verbose模式下的输出

如果你想在verbose模式下检查输出,那么你需要使用-o verbose选项:

journalctl -o verbose

Boots

所有发生的boot事件,使用 --list-boots 选项,如下所示。

journalctl --list-boots

检查磁盘使用情况

如果你想检查总的日志磁盘使用量,那么你需要使用 --disk-usage

journalctl --disk-usage

列出所有日志目录

journalctl --list-catalog

更新日志目录

journalctl --update-catalog

列出所有用户id

如果要列出 systemd 为其生成日志的所有用户 ID,使用 -F _UID ,如下所示。

journalctl -F _UID

List列出所有组id

journalctl -F _GID

检查用户ID 32

journalctl _UID=32 --since yesterday

优先级

系统管理员经常关心的一个过滤器是消息的优先级。虽然在非常粗略的水平上记录信息通常是有用的,但在实际消化可用的信息时,低优先级的日志可能会分散注意力,令人困惑。

你可以通过使用 journalctl 的 -p 选项,只显示指定优先级或以上的信息。这允许你过滤掉低优先级的信息。

例如,要想只显示在错误级别或以上级别记录的条目,你可以输入。

journalctl -p err -b

这将显示所有error、crit、alert或emerg的消息。该日志实现了标准的syslog消息级别。你可以使用优先级名称或其相应的数字值。按照优先级从高到低的顺序,这些是。

  • 0: emerg
  • 1: alert
  • 2: crit
  • 3: err
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug

上述数字或名称可以与-p选项互换使用,例如:

journalctl -p 3 -b

列出所有系统UNIT字段

如果你想列出所有Systemd UNIT,那么你需要在journalctl命令中使用--field选项,如下所示。

journalctl --field _SYSTEMD_UNIT

核实日志细节

可以使用的--verify选项验证journals数据是否有错误,如下所示。

journalctl --verify

刷新日志消息

如果要刷新所有 systemd 消息,则需要在 journalctl 命令中使用 --flush 选项,如下所示。

journalctl --flush
更新于 2022-08-10
在线,2小时前登录

查看Linux更多相关的文章或提一个关于Linux的问题,也可以与我们一起分享文章