Linux journalctl 日志查看与过滤技巧

2次阅读

journalctl 是 systemd 的结构化日志工具,支持按时间(–since/–until)、服务(-u)、优先级(-p)、字段(_comm/_pid)等多维度过滤,并可实时跟踪(-f)、导出(–no-pager)或清理日志(–vacuum-size)。

Linux journalctl 日志查看与过滤技巧

journalctl 是 systemd 系统日志的核心工具,比传统 syslog 更结构化、更灵活。掌握它的查看与过滤技巧,能快速定位服务异常、启动失败或系统事件,无需翻找分散的日志文件。

按时间范围精准筛选日志

默认 journalctl 显示全部日志(可能非常长),常用时间选项可大幅缩小范围:

  • 最近1小时journalctl --since "1 hour ago"
  • 今天凌晨以来journalctl --since today
  • 指定时间段journalctl --since "2024-05-20 14:00:00" --until "2024-05-20 14:30:00"
  • 上次启动后journalctl -b-b -1 表示上一次启动)

按服务或单元过滤日志

排查某个服务问题时,聚焦其专属日志最有效:

  • 查看 nginx 启动和运行日志journalctl -u nginx.service
  • 跟踪 ssh 登录相关(包括 sshd 和 pam)journalctl -u sshd.service _COMM=sshd
  • 同时查多个服务journalctl -u nginx.service -u php-fpm.service
  • 只看失败的单元journalctl --failed(列出所有状态为 failed 的 service)

按优先级与字段动态过滤

journal 日志带结构化字段(如 PRIORITY、_PID、SYSLOG_IDENTIFIER),支持细粒度筛选:

  • 只看错误及以上级别(err/warning/crit/alert/emerg)journalctl -p 3(数字 0–7,3 对应 err)
  • 查特定进程 ID 的日志journalctl _PID=1234
  • 按程序名过滤(非单元名)journalctl _COMM=kernel_COMM=sudo
  • 组合条件:nginx 错误 + 今天journalctl -u nginx.service -p 3 --since today

实时跟踪与实用操作技巧

调试中常需持续观察日志流,配合分页和导出提升效率:

  • 实时跟随新日志(类似 tail -f)journalctl -u nginx.service -f
  • json 格式输出(适合脚本解析)journalctl -u nginx.service -o json
  • 只显示消息体(去掉时间戳和元数据)journalctl -u nginx.service -o cat
  • 导出全部日志为文本备份journalctl --all --no-pager > all.log
  • 清空日志(谨慎使用)journalctl --vacuum-size=100M(保留最新 100MB)

journalctl 的强大在于字段化设计和组合能力,不必死记命令,记住 -u(服务)、-p(级别)、--since(时间)、-f(跟随)四个核心开关,再配合 Tab 补全和 journalctl --help,日常排错足够高效。

text=ZqhQzanResources