首页/安全/应急响应速查/journalctl 时间窗与单元过滤

journalctl 时间窗与单元过滤

按时间窗、服务单元与优先级检索 systemd 日志,是 Linux 事件时间线的主要素材;支持导出 ISO 时间或 JSON 对接分析。

应急响应速查安全更新于 2026-10-13

journalctl 时间窗检索

journald 把内核、服务与应用的日志统一存放在二进制 journal 中,journalctl 是唯一的检索入口。它的优势是支持结构化过滤:按时间窗、按服务单元、按优先级组合检索,还能导出成便于排序或程序解析的格式。定位事件时间窗时,先固定 UTC 基准,再用相对或绝对时间限定范围,可以把几十万行日志收敛到几百行以内。

基本信息

时间窗--since 与 --until 支持绝对时间与相对写法(如 2 hours ago)
按单元-u 服务单元名,与 systemctl 使用同一套名字
按优先级-p warning 只看告警及以上(err、crit 更严)
按启动轮次-b 本次启动、-b -1 上一次启动、-b -2 上上次
输出格式-o short-iso 带完整时间戳,-o json 供程序解析
持久化仅在 /var/log/journal 存在且配置持久化时保留历史,否则重启后丢失

典型使用场景

  • 按事件时间窗提取服务日志,重建当日时间线
  • 确认某个服务在告警前后的报错与重启记录
  • 排查上一次重启之前的现场,确认是否是攻击者触发重启
  • 导出结构化日志交给分析脚本处理
  • 确认日志是否被清理或存在缺口

常见检索组合

常见检索组合
date -u                                        # 先固定 UTC 基准
sudo journalctl --since 'today' -u sshd --no-pager | tail -n 50
sudo journalctl --since '2026-10-01 08:00' --until '2026-10-01 12:00' --no-pager | head -n 100
sudo journalctl -p warning --since '-24 hours' --no-pager | head -n 60
sudo journalctl -b -1 -u sshd --no-pager | tail -n 30        # 上一次启动的日志
sudo journalctl -o short-iso --since '-30 min' -u nginx --no-pager
sudo journalctl --disk-usage; ls -ld /var/log/journal 2>/dev/null   # 确认存储与持久化

输出字段读法

字段含义注意点
时间戳默认为本地时区,带秒级精度写时间线前必须先确认时区是否统一
主机名产生日志的主机集中收集时用于区分来源
单元与 PID服务名与进程号同一 PID 连续异常说明是同一个实例在重复失败
优先级日志级别数字与文字err 以上才是告警级别,info 噪声很大
消息具体内容含路径、地址与错误码,是提取 IOC 的来源
单元名写错不会报错,只会返回空结果:用 -u 前先用 systemctl list-units 核对准确名字,否则很容易误判为「该服务没有日志」。这是排查时最常见的假阴性来源。
journal 使用系统本地时区,而采集脚本常按 UTC 记录时间。两类时间混在同一份时间线里会造成整段顺序错误,务必在每条记录上显式标注时区,并统一换算。

易错点

  • -u 单元名猜着写:名字不对会得到空结果且不报错,先核对单元名再查
  • 只看本次启动:历史事件需加 -b -1 或 -b -2,否则会漏掉重启前的现场
  • 不确认是否开启持久化存储:未开启时重启即丢日志,事后无法补查
  • 时区不统一:本地时间与 UTC 混用会让时间线顺序错乱
  • 检索范围不收敛:不加时间窗与服务过滤,几十万行输出无法人工分析

数据来源与参考

  • man 1 journalctl
  • systemd 官方文档:日志过滤与输出格式

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌