首页/系统/Linux 运维命令速查/journalctl 按单元与 PID 过滤
systemd 与服务42 条

journalctl 按单元与 PID 过滤

服务日志精确定位:-u 单元、_PID= 字段、-t 标识符组合过滤;比 grep 文本更准确,不受日志格式影响。

Linux 运维命令速查系统更新于 2026-10-13

journalctl 过滤是什么

journalctl 用 -u 按单元名过滤、_PID= 按进程号过滤、-t 按 syslog 标识符过滤,三者都走 journald 的索引字段,而不是把日志全文交给 grep。差别在准确性:服务改名、日志正文里恰好出现同名文本时 grep 会误命中,字段过滤不会。

基本信息

适用平台Linux + systemd(-u 需 systemd 205 及以上;无 journald 的系统没有这些字段)
命令语法journalctl [选项] [字段=值 ...]
常用字段-u 单元名 / _PID=N / _SYSTEMD_UNIT= / -t 标识符 / _COMM= 进程名
权限说明普通用户默认只能看自身日志,读全量需加入 systemd-journal 组或使用 sudo

典型使用场景

  • 服务排障入口:先 journalctl -u myapp -n 100 看最近日志,再按时间窗口向前收窄
  • 多实例定位:同一单元拉起多个进程时,用 _PID= 精确锁定其中一个进程的输出
  • 跨单元对齐:一次业务由多个单元完成时,按 _SYSTEMD_UNIT= 分别拉取再对齐时间线
  • 非 systemd 程序:cron、sudo 等经 syslog 写入,用 -t 按标识符检索
  • 脚本化采集:配 -o json 输出固定结构,便于程序解析与入库

常用示例

常用示例
journalctl -u myapp --since '30 min ago' -n 100   # -u 后可用简写,.service 可省略
journalctl -u myapp -u nginx --since today        # 多个 -u 取并集
journalctl _PID=$(systemctl show -p MainPID --value myapp)   # 按主进程号精确过滤
journalctl -t sshd -n 20                          # 按 syslog 标识符(与 -u 语义不同)
journalctl -u myapp -p err --since yesterday      # 只看错误级别,先减噪音
journalctl -o json-pretty -u myapp -n 1           # 展开单条日志全部字段,确认有哪些字段可过滤

常用过滤字段读法

字段含义使用提示
-u 单元名按 systemd 单元过滤,等价于 _SYSTEMD_UNIT=可用 myapp 简写,多个 -u 为并集
_PID=内核记录的进程号进程重启后变化,只适合定位单次运行
_SYSTEMD_UNIT=产生该日志的单元服务 fork 出的子进程仍归同一单元,比 _PID 稳
-t 标识符syslog 的 SYSLOG_IDENTIFIERcron 任务为 CROND,sudo 为 sudo
_COMM=进程名 comm,最长 15 字符同名进程多时会混,需叠加 _PID
服务 fork 出子进程后,子进程日志仍归属同一单元:journald 按 cgroup 判定归属,排查服务内部子进程问题时用 -u 比 _PID 更完整。
自定义写 journal 的应用,SYSLOG_IDENTIFIER 默认取进程名,未必等于服务名;先看 journalctl -o json-pretty -n 1 的实际字段值,再写过滤条件。
系统没有 /var/log/journal 目录时 journald 不持久化,日志只在内存中,重启即丢失;跨重启排查前先开启持久化。

易错点

  • -u sshd 与 -t sshd 语义不同:前者过滤 sshd.service 单元,后者过滤 syslog 标识符,日志内容相同不代表两者都能查到
  • 不带时间范围直接 journalctl -u myapp 可能输出上万行,先配合 -p err 或 --since 收窄再逐层放松
  • 进程重启后 PID 会变化,历史日志里的 _PID 指向当时那个进程,用 PID 过滤长期问题会漏日志
  • 单元名拼错时 journalctl 不报错、只返回空结果,看起来像没有日志,先用 systemctl list-units 核对名字

数据来源与参考

  • man 1 journalctl(字段过滤)
  • man 5 systemd.journal-fields

相关工具

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