LogQL 解析器是什么
LogQL 解析器把日志行结构化:json 与 logfmt 从标准格式里直接提取字段,regexp 与 pattern 面向自定义格式。提取出来的字段是临时字段,可以继续参与过滤与聚合,也能在指标查询里做标签使用,是「先取标签、再解析、后过滤」链路里的第二环。
基本信息
| 常用解析器 | json / logfmt / regexp / pattern |
|---|---|
| 输出 | 临时字段,可参与后续过滤 |
| 失败标记 | 解析失败加 __error__ 标签 |
| 适用对象 | 结构化与半结构化日志行 |
| 常用搭配 | 比较运算过滤、count_over_time 聚合 |
| 性能提示 | regexp 越复杂 CPU 越高 |
典型使用场景
- JSON 日志按 level 与 status 过滤,快速筛出 5xx 请求
- logfmt 日志里按耗时字段筛慢请求
- 自定义文本用 regexp 提取方法与路径做统计
- 用 pattern 处理结构固定但非标准格式的日志
- 解析后按字段计数,把日志量转成时间序列做告警
- 定位日志格式不统一的问题,先看是否大量出现解析失败标记
解析与过滤
解析与过滤
# JSON 日志解析
{app="api"} | json | level="error" and status >= 500
# logfmt 解析 + 数值过滤
{app="api"} | logfmt | duration_ms > 1000
# regexp 提取命名分组
{app="api"} | regexp "(?P<method>GET|POST) (?P<path>[^ ]+)"
# pattern 解析固定分隔格式
{app="api"} | pattern "<_> <level> <msg>"
# 解析后聚合:每分钟错误条数
sum(count_over_time({app="api"} | json | level="error" [1m]))解析器对照
| 解析器 | 适用格式 | 特点 |
|---|---|---|
| json | JSON 行 | 字段直接可用,最推荐 |
| logfmt | key=value 行 | 轻量,常见于 Go 应用 |
| regexp | 自定义文本 | 灵活但 CPU 开销高 |
| pattern | 固定分隔结构 | 比 regexp 更快更好读 |
解析出的字段是「临时标签」,可用于过滤与指标查询;不要把它们再注册成流标签,否则又会造成标签基数膨胀。
解析失败的行默认会带 __error__ 标签,先查该标记的数量,能快速判断日志格式是否统一。
对大段文本用 regexp 提取复杂分组会明显增加查询 CPU;格式固定时 pattern 或先做行过滤能省下大量开销。
字段名里的点号与中划线在 LogQL 里可能需要特殊处理,遇到解析成功但过滤不生效时先核对字段名写法。