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

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,日常排错足够高效。