Linux 运维必备:journalctl 命令超全详解|日志排查一把梭

一、命令简介

journalctl 是 systemd 系统和服务管理器的日志查询工具,用于检索和分析 systemd 日志(journal)。它提供了强大的日志过滤、查询和格式化功能。

该工具是 CentOS 7 / RHEL 7 及更高版本、以及其他大多数使用 systemd 的现代 Linux 发行版中的标准日志管理工具,替代了传统的 syslog 查看方式。它能够从二进制日志文件中高效地检索结构化日志数据,支持基于时间、服务单元、优先级、进程 ID 等多种条件的过滤。

二、语法格式

bash

运行

journalctl [OPTIONS...] [MATCHES...]

参数说明

  • OPTIONS:控制输出格式、过滤条件和行为的选项
  • MATCHES:基于字段的精确过滤条件,格式为 FIELD=VALUE(例如:_PID=1234

三、常用选项及说明

3.1 基本显示选项

表格

选项简写说明
--no-pager不通过分页器显示输出,直接输出到终端
-a--all显示所有字段,包括长字段和不可打印字符
-f--follow实时跟踪日志输出(类似 tail -f)
-e--pager-end在分页器中直接跳转到日志末尾
-r--reverse反向显示,先显示最新的日志条目
-x--catalog在可用时添加消息的详细说明

3.2 时间过滤选项

表格

选项简写说明
-S--since=DATE显示不早于指定日期 / 时间的日志
-U--until=DATE显示不晚于指定日期 / 时间的日志

3.3 启动相关选项

表格

选项简写说明
-b--boot[=ID]显示当前或指定启动 ID 的日志
--list-boots显示已记录的启动会话列表
-k--dmesg显示当前启动的内核消息(等同于 dmesg)

3.4 单元和服务过滤

表格

选项简写说明
-u--unit=UNIT显示指定 systemd 单元的日志
-t--identifier=STRING显示指定系统日志标识符的条目

3.5 优先级过滤

表格

选项简写说明
-p--priority=RANGE按优先级过滤日志(0: emerg, 1: alert, 2: crit, 3: err, 4: warning, 5: notice, 6: info, 7: debug)

3.6 输出控制选项

表格

选项简写说明
-n--lines[=INTEGER]限制显示的日志行数
-o--output=STRING指定输出格式:short, short-iso, short-precise, short-monotonic, verbose, export, json, json-pretty, json-sse, cat
--utc使用 UTC 时间显示时间戳
--no-full截断过长的字段

3.7 日志源选项

表格

选项简写说明
--system仅显示系统日志
--user仅显示当前用户的用户日志
-D--directory=PATH从指定目录读取日志文件
--file=PATH显示指定日志文件
-m--merge合并显示所有可用日志源的条目

3.8 日志管理命令

表格

选项说明
--disk-usage显示日志文件占用的磁盘空间
--vacuum-size=BYTES清理日志,使总大小小于指定值
--vacuum-time=TIME删除早于指定时间的日志
--flush将 /run/log/journal 中的日志刷新到 /var/log/journal
--rotate请求日志轮转
--verify验证日志文件的一致性

四、示例用法

4.1 基本查看

bash

运行

# 查看所有日志(从最早到最新)
journalctl

# 实时跟踪日志
journalctl -f

# 查看最近 50 行日志
journalctl -n 50

# 查看最新日志并实时跟踪
journalctl -f -n 50

4.2 按时间过滤

bash

运行

# 查看今天的所有日志
journalctl --since today

# 查看最近一小时的日志
journalctl --since "1 hour ago"

# 查看指定时间范围的日志
journalctl --since "2023-01-01 00:00:00" --until "2023-01-01 23:59:59"

# 查看昨天 14:30 到 15:00 的日志
journalctl --since "yesterday 14:30" --until "yesterday 15:00"

4.3 按启动会话过滤

bash

运行

# 查看当前启动会话的日志
journalctl -b

# 查看上次启动的日志
journalctl -b -1

# 查看上上次启动的日志
journalctl -b -2

# 查看指定启动ID的日志
journalctl -b c1a5c1e5a1b14a2a9e8c3b7c6d5f8a1b

# 列出所有启动会话
journalctl --list-boots

4.4 按优先级过滤

bash

运行

# 查看错误及以上优先级的日志
journalctl -p err

4.5 按服务或单元过滤

bash

运行

# 查看特定服务的日志
journalctl -u nginx.service

# 查看多个服务的日志
journalctl -u nginx.service -u php-fpm.service

4.6 查看内核消息

bash

运行

journalctl -k

4.7 使用不同的输出格式

bash

运行

# 以 JSON 格式输出便于程序解析
journalctl -u sshd.service -o json-pretty --since "1 hour ago"

# 以更详细的 ISO 时间格式输出
journalctl -o short-iso

4.8 日志管理

bash

运行

# 查看日志占用的磁盘空间
journalctl --disk-usage

# 清理日志,只保留最近 1 天的数据
sudo journalctl --vacuum-time=1d

五、注意事项

  1. 权限要求:查看系统日志(--system)通常需要 root 权限或 sudo。查看当前用户的日志(--user)则不需要。
  2. 持久化存储:默认情况下,systemd 日志存储在 /var/log/journal/(如果目录存在)。如果此目录不存在,日志将仅保存在内存(/run/log/journal/)中并在重启后丢失。
  3. 磁盘空间管理:日志会持续增长,请定期使用 --vacuum-size--vacuum-time 选项进行清理,或通过配置文件 /etc/systemd/journald.conf 设置限制。
  4. 二进制格式:日志是二进制格式,无法直接用文本编辑器查看。journalctl 是主要的访问工具。可使用 --output=export 格式导出以供其他工具分析。
  5. 与传统日志的兼容:在启用 journald 的系统中,传统的 /var/log/messagessyslog 等文件可能不再更新或由 journald 转发写入,具体取决于发行版配置。

获取更多Linux学习资料请关注“阿成学长工具包”GongZhongHao,对话框中输入2647获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿成学长_Cain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值