journald 查询方法是什么
systemd 环境下,多数服务把日志交给 journald 统一收集,用 journalctl 检索:可按服务单元、时间窗、优先级、关键字组合过滤。相比 /var/log 下的文本文件,它保留结构化字段(进程号、单元名、优先级),检索更精确,但能查多久完全取决于存储配置。
基本信息
| 适用平台 | 使用 systemd 的发行版(RHEL 7+、Ubuntu 16.04+、Debian 9+) |
|---|---|
| 常用过滤 | -u 单元、--since/--until 时间窗、-p 级别、-g 关键字 |
| 结构化字段 | _PID、_COMM、PRIORITY、_SYSTEMD_UNIT |
| 存储位置 | /var/log/journal(持久化)或 /run/log/journal(仅内存) |
典型使用场景
- 服务启动失败,查该单元最近的日志
- 在事件时间窗内全量回看,不局限于单个服务
- 按优先级筛出错误,快速定位异常起点
- 用 -k 查看内核与硬件相关告警
- 磁盘占用告警时查看日志占用量并调整清理策略
- 确认日志覆盖了多少次开机,判断可回溯的历史范围是否够用
常用查询
常用查询
journalctl -u ssh --since '2026-10-12 03:00' --until '2026-10-12 04:00' # 单元 + 时间窗
journalctl -p err --since today | tail -50 # 只看错误及以上级别
journalctl -u nginx -g 'upstream' -n 100 # 关键字过滤(较新版本)
journalctl _PID=1234 --since '1 hour ago' # 按进程号回溯
journalctl --disk-usage; journalctl --list-boots # 占用与启动会话列表
# 先 --list-boots 确认能查到哪一次开机,再用 -b 定位常用选项读法
| 选项 | 作用 | 注意 |
|---|---|---|
| -u 单元 | 按 systemd 单元过滤 | 只覆盖该单元,用户态进程日志可能漏 |
| --since/--until | 按时间窗过滤 | 先确认本机时区,跨时区易错位 |
| -p 级别 | 按优先级过滤(如 err) | 级别由服务自行声明,未必准确 |
| -b | 按开机会话过滤 | 未持久化时只能看到当前这次启动 |
| -o json | 结构化导出,保留全部字段 | 纯文本导出会丢字段,不便关联 |
能否留存由 /etc/systemd/journald.conf 的 Storage 决定:未设置或为 auto 且 /var/log/journal 不存在时,日志只存在内存,重启即丢。取证前先确认这一项。
导出时用 -o json 或 -o json-pretty 保留结构化字段,便于后续做时间线关联;用默认文本格式导出会丢掉进程号与单元名。
回看时用相对时间(如 --since '2 hours ago')更方便,但写进报告与证据台账时仍要换算成绝对时间,否则后续无法复现同一次查询。