首页/安全/取证与溯源速查/journald 查询方法
日志溯源53 条

journald 查询方法

systemd 环境用 journalctl 按服务/时间/优先级检索:-u 服务、--since/--until 时间窗、-p 级别、-g 关键词(新版本)。

取证与溯源速查安全更新于 2026-10-13

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')更方便,但写进报告与证据台账时仍要换算成绝对时间,否则后续无法复现同一次查询。

易错点

  • 未确认存储配置就假定日志会留存,重启后发现证据随内存一起丢失
  • 只按单元过滤,漏掉不在该单元下的用户态进程日志
  • 导出时用默认文本格式,丢掉 PID 与单元字段,无法做精确关联
  • 忽略 journal 的容量上限与轮转设置,历史日志已被自动清理

数据来源与参考

  • man 1 journalctl
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌