Kibana 正则查询语法示例大全

Kibana 的正则查询:KQL 不支持正则;切换 Lucene 查询语法后可用 字段:/正则/,或使用 Query DSL 的 regexp。本文给出 IP 段匹配、状态码段、路径前缀等常用正则示例与性能注意事项。

最佳实践
Kibana 正则查询语法示例大全封面

KQL 不支持斜杠正则。需要正则时切换到 Lucene 查询语法,或使用 Query DSL 的 regexp。数字状态码应用范围查询,ip 类型可用 CIDR;不要把它们当作 keyword 字符串做正则。

常用示例

以下为 Lucene 语法,假定示例字段均按字符串建立了相应 keyword 子字段;请按实际 mapping 调整字段名:

status.keyword:/4[0-9][0-9]/
client_ip.keyword:/10\.0\.[0-9]+\.[0-9]+/
url.keyword:/\/api\/v2\/.*/
host.keyword:/.*\.example\.com/
level.keyword:/(ERROR|FATAL)/

上面的 IP 正则只是文本模式,并不校验 IPv4 地址合法性。若 status 是数值字段,KQL 可写 status >= 400 and status < 500;若 client_ip 是 ip 类型,可写 client_ip: 10.0.0.0/16。

操作入口

  • 先将搜索栏查询语言切换为 Lucene,再使用上述正则;KQL 下不能直接使用;
  • 或 Add filter → Edit as Query DSL 写 regexp 查询:
{ "regexp": { "status.keyword": "5[0-9][0-9]" } }

DSL 示例同样要求目标字段为适用的字符串字段。Lucene 正则匹配整个索引 term,不是 PCRE 的任意子串搜索,不支持用 ^、$ 作为常规锚点;JSON 字符串中的反斜杠还需要再转义一层。

性能注意

  • 固定前缀可以缩小词典匹配范围;前置通配(/.*error/)可能扫描更多 term,应限制查询范围,并核对 search.allow_expensive_queries 等限制;
  • keyword 字段上做正则;text 字段上正则匹配的是分词后的 term,语义容易出乎意料;
  • 高频使用的过滤条件,不如在采集侧把维度解析成独立字段再精确匹配。

常见问题(FAQ)

Q:正则特殊字符要转义吗? KQL 不支持这种正则;在 Lucene 正则中,匹配字面点号写 \.,放入 JSON 字符串时写 \\.。

Q:正则查不到数据? 先确认字段类型——text 字段的 term 是分词结果,整串正则匹配不到。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台