journalctl是systemd系统排查问题最直接、最权威的日志入口,支持按启动会话(-b)、服务单元(-u)、优先级(-p)、时间范围(--since)、关键词(-g)及输出格式(-o)精准过滤和导出结构化日志。

journalctl 是 systemd 系统中排查问题最直接、最权威的日志入口。它不是辅助手段,而是生产环境故障定位的第一现场——所有服务启动失败、进程崩溃、依赖未就绪、权限被拦截,都会原样记录在时间线里,带优先级、单元名和结构化字段。
按启动会话精准回溯问题源头
服务没起来?脚本没执行?别猜,先看本次开机发生了什么。journalctl -b 直接输出当前 boot 的完整日志流,从内核加载、unit 启动顺序到你的 service 退出码,一气呵成。
- 加 -n 20 只看最后20行,快速聚焦失败瞬间:
journalctl -b -n 20 - 查上一次启动(比如重启后问题复现):
journalctl -b -1 - 列出所有历史启动记录,确认目标 boot ID:
journalctl --list-boots
锁定服务 + 错误级别,秒级过滤噪音
在几十万行日志里人工扫 error?效率低还易漏。用 -u 和 -p 组合,让 journalctl 主动筛出关键信息。
- 只看 nginx 的错误及以上(err/crit/alert/emerg):
journalctl -u nginx -p err - 同时监控 Web 层与数据库异常:
journalctl -u nginx -u postgresql -p err -f - 查某个服务最近1小时的 warning 和 error:
journalctl -u app.service -p warning --since "1 hour ago"
关键词+正则,穿透日志内容层
有些问题不会打 err 标签,但会在 MESSAGE 字段留下线索,比如 “timeout”、“permission denied”、“connection refused”。-g 参数专为此设计。
- 不区分大小写搜失败关键词:
journalctl -u sshd -g "fail|denied|refused" - 匹配带数字的报错模式(如端口被占):
journalctl -g "Address already in use.*:8080" - 配合 -f 实时捕获新出现的异常消息:
journalctl -u myapp -g "panic\|segfault" -f
导出结构化日志,支持协作与分析
把终端截图发给同事?不如导出可解析的日志。避免重定向丢失元数据,用 -o 显式指定格式。
- 导出为每行一个 JSON 对象,方便脚本或 ELK 处理:
journalctl -u docker --since "24 hours ago" -o json - 生成带 ISO 时间戳的可读文本:
journalctl -b -n 100 -o short-iso - 导出前检查磁盘用量,防止撑爆根分区:
journalctl --disk-usage
journalctl 的能力不在命令多,而在每个参数都直击运维痛点:时间可溯、服务可定、级别可筛、内容可搜、输出可控。用熟这四类组合,排查不再靠翻页和猜测。











