Kibana 正则查询语法示例大全
Kibana 的正则查询:KQL 不支持正则;切换 Lucene 查询语法后可用 字段:/正则/,或使用 Query DSL 的 regexp。本文给出 IP 段匹配、状态码段、路径前缀等常用正则示例与性能注意事项。
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 是分词结果,整串正则匹配不到。