首页/云/可观测性速查/LogQL 行过滤:|=、!=、|~、!~
日志平台52 条

LogQL 行过滤:|=、!=、|~、!~

在流选择器后串接内容过滤:|= 包含、!= 不包含、|~ 正则匹配、!~ 正则排除;多个过滤按序叠加进一步收敛结果。

可观测性速查云更新于 2026-10-13

LogQL 行过滤是什么

行过滤是 LogQL 在流选择器之后追加的正文条件:先用大括号里的标签把流范围收敛,再用 |= 包含、!= 不包含、|~ 正则匹配、!~ 正则排除逐层筛掉不需要的行。过滤按书写顺序依次执行,前一个条件的结果就是后一个条件的输入,所以条件的先后顺序既影响可读性也影响扫描量。

基本信息

适用平台Grafana Loki 的 LogQL 查询语言
前置条件必须先用 {标签=值} 选定流,不能只写正文条件
运算符|= 包含、!= 不包含、|~ 正则匹配、!~ 正则排除
正则引擎RE2 语法,不支持反向引用等 PCRE 特性

典型使用场景

  • 按关键字收敛排障范围:先选服务流,再筛出含 error 的行
  • 排除已知噪声:!= "healthcheck" 去掉健康检查刷屏
  • 多条错误码一次命中:|~ "code=(500|502|503)" 合并三类故障
  • 多步收敛定位:包含 + 排除 + 正则组合,把范围压到几十行
  • 与解析组合:行过滤后再用 json 或 logfmt 提取字段做统计

过滤链示例

过滤链示例
{app="api", env="prod"} |= "error"            # 先按标签选流,再包含关键字
  != "timeout"                                  # 排除已知可忽略的错误
  |~ "code=(500|502|503)"                       # 正则命中指定状态码

# 组合解读:包含 error、不含 timeout、且匹配状态码正则
# 反斜杠在正则中要转义,如路径匹配 |~ "/v1/orders/[0-9]+"
# 大小写敏感,必要时用 (?i) 前缀放宽,例如 |~ "(?i)error"

运算符速查

运算符含义示例与注意
|=正文包含子串|= "connection refused",普通字符串不做正则解析
!=正文不包含子串!= "health",用于去噪
|~正则匹配(RE2)|~ "code=5..",语法错误会让查询直接失败
!~正则不匹配!~ "debug|trace",逻辑取反时先验证样本
(无)多个过滤按序串联高选择性条件放前面可减少后续处理量
行过滤针对日志正文整行,不区分字段语义;要按字段过滤应先解析(json、logfmt、regexp)再用标签或数值条件,否则容易出现看似匹配、实际匹配到别的字段的情况。
RE2 不支持反向引用与部分回溯特性,从其它语言复制来的正则可能不兼容;查询报错时先把正则简化到能跑通,再逐步加条件。

易错点

  • 只写正文条件而不带流选择器,LogQL 会直接报语法错误,标签收敛是前提
  • 用宽泛正则(如 .* 组合)等于全量扫块,查询慢且拉高 CPU,应先缩小流范围
  • 在注释里写错的转义规则影响不到查询,但把正则里的反斜杠漏掉会让匹配结果完全不同
  • 过滤顺序随意导致后续条件作用在更大的数据集上,扫描量与响应时间成倍上升

数据来源与参考

  • Grafana 官方文档 · LogQL line filters
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌