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