journalctl -p
journal 为每条日志记录一个 PRIORITY 字段,沿用 syslog 的 0 到 7 共八级,数字越小越严重。-p 就是按这个级别过滤:-p err 表示 err 及以上(0 到 3 级),-p warning 会多出 warning 一级。日常巡检用高等级过滤能快速筛掉噪音,但要知道前提——应用的日志级别得打得对,把错误写成 info 的话,再严的过滤也捞不出来。
基本信息
| 用途 | 按日志优先级(0 到 7)过滤 journal 条目 |
|---|---|
| 语法 | journalctl -p <级别名或数字> [其它选项] |
| 所属 | systemd(journalctl / systemd.journal-fields 的 PRIORITY 字段) |
| 常见搭配 | -b 当前启动、-u 指定单元、--since 时间窗、-n 限制条数、--no-pager 便于管道 |
典型使用场景
- 日常巡检:只看当前启动的 err 及以上,快速判断机器有没有硬故障
- 故障复盘:按时间窗拉出 warning 及以上的条目,还原异常发生前后的顺序
- 服务排障:先按 -u 单元加 -p err 缩小范围,再放开级别看细节
- 告警对账:确认监控告警对应的日志条目级别是否正确,避免误报漏报
- 压测观察:压测期间盯 warning 及以上,捕捉资源紧张的先兆
常用示例
常用示例
journalctl -p err -b # 本次启动的错误及以上
journalctl -p err -b -u nginx --no-pager # 缩到单个服务
journalctl -p warning --since '1 hour ago' --no-pager | tail -n 50
journalctl -p err -n 100 -o short-iso # 带 ISO 时间戳,便于与监控对齐
journalctl -p 3..5 -n 100 # 区间写法,按系统版本确认是否支持级别对照
级别对照
0 emerg 系统不可用
1 alert 必须立即处理
2 crit 严重故障
3 err 错误
4 warning 警告
5 notice 正常但值得注意
6 info 常规信息
7 debug 调试信息级别与运维动作对照
| 级别区间 | 典型内容 | 建议动作 |
|---|---|---|
| 0-2 | 内核 panic、OOM 杀死进程、硬件故障 | 立即介入,按时间点拉全量上下文 |
| 3 | 服务启动失败、磁盘写入错误、认证被拒 | 逐条定位根因,区分业务错误与系统错误 |
| 4-5 | 资源接近阈值、重试成功、降级触发 | 列入巡检清单,观察趋势不看单条 |
| 6-7 | 常规业务输出与调试信息 | 排障时临时打开,长期开启会明显放大日志量 |
-p 过滤的是 journal 记录的 PRIORITY 字段,不是文本里有没有 error 字样。服务通过 stdout 打日志时,级别由自身日志框架决定;直接写到 stderr 的内容通常按 err 归档,写 stdout 的内容常按 info 归档。
区间写法 -p 3..5 在较老的 systemd 上不支持,脚本里用之前先在本机验证一次,或者改成两条命令叠加。