输出格式与字段检索
journalctl 的日志带结构化字段,不只是文本行。输出格式可以按用途切换:带时区的短格式便于时间对账,详细格式与 JSON 格式会完整展示每条日志的字段,包括进程号、可执行文件名与标识符。脚本消费日志时用机器可解析的格式更稳妥。
基本信息
| 可读时间 | -o short-iso 带时区偏移 |
|---|---|
| 结构化输出 | -o json 与 -o json-pretty |
| 字段明细 | -o verbose |
| 只看消息 | -o cat 去掉前缀 |
| 列出字段取值 | -F <字段名> |
典型使用场景
- 把日志喂给分析脚本或日志平台做结构化处理
- 排查进程重启:用字段区分是哪个进程实例
- 按标识符筛选某类应用日志
- 导出指定时间段日志做离线分析
- 确认日志里可用的字段有哪些
格式切换
格式切换
journalctl -u nginx --since '1 hour ago' -o short-iso --no-pager # 带时区时间
journalctl -u nginx -o json-pretty -n 1 | head -60 # 单条日志的完整字段
journalctl -u nginx -o verbose -n 1 | head -40 # 字段明细视图
journalctl -o cat -u nginx -n 20 # 只保留消息正文
journalctl -F SYSLOG_IDENTIFIER | head -20 # 列出标识符取值
journalctl -u nginx -o json -n 100 > /tmp/nginx.jsonl # 导出为逐行 JSON常用字段
| 字段 | 含义 | 用途 |
|---|---|---|
| MESSAGE | 日志正文 | 内容是主体信息 |
| _PID | 进程号 | 区分同服务不同实例 |
| _COMM | 可执行文件名 | 确认是哪个程序产生 |
| SYSLOG_IDENTIFIER | 日志标识符 | 按应用类别筛选 |
| _HOSTNAME | 主机名 | 集中收集时区分来源 |
| PRIORITY | 日志级别数值 | 按级别精确过滤 |
实践建议
- 导出给脚本时使用逐行 JSON 格式
- 先用条数限制再逐步扩大范围
- 字段名区分大小写,注意下划线前缀
- 应用自定义字段要避免与系统字段同名
- 与日志平台对接时先确认字段映射
结构化输出的单条日志内容较长,先加条数限制再逐步扩大;把带颜色的终端格式直接送去解析,往往会因为前缀宽度变化而出错。