首页/云/可观测性速查/Kibana Query Language(KQL)
日志平台52 条

Kibana Query Language(KQL)

KQL 是 Kibana 检索框里的过滤语法:字段:值、and/or/not 组合、通配与数值比较;比 Lucene 更直观,是 Discovery 默认语法。

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

KQL 是什么

KQL(Kibana Query Language)是 Kibana 检索框里的过滤语法,用「字段: 值」配合 and / or / not 组合条件,从 7.11 起成为 Discover 的默认语法。它比 Lucene 查询串更贴近自然表述:布尔关系用英文单词写,字段名不必拼进一个大字符串,语法写错时界面会提示,而不是静默返回空结果。KQL 只负责筛选文档,不改变索引结构与分词方式,检索能否命中最终取决于字段映射是 text 还是 keyword。

基本信息

适用平台Kibana 7.11 及以上,更早版本需手动切换语法
使用位置Discover、可视化面板、告警规则的查询框
表达方式字段: 值 + and / or / not,支持通配与数值比较
与 Lucene 的关系两种语法可切换,KQL 不支持正则表达式

典型使用场景

  • 排障时按服务与级别收敛日志:service: order-api and level: error
  • 排除测试流量干扰:not env: test,让生产视图干净
  • 按状态码与耗时定位慢请求:status: 504 and duration_ms >= 1000
  • 短语精确检索报错文本:message: "connection refused"
  • 跨字段查找关键字:只在关心的一两个字段里搜索,而不是全文扫描

常用表达式

常用表达式
service: order-api                    # 字段等值:最常用的收敛方式
level: error and not env: test         # 布尔组合与取反
status: (500 or 502 or 503)            # 括号做同字段多值分组
message: "connection refused"          # 引号内按短语整体匹配
path: /v1/*                            # 通配只用在值的一部分
duration_ms >= 1000 and duration_ms < 5000   # 数值区间比较
exists: trace_id                       # 判断字段是否存在

运算符与语义

写法含义注意事项
字段: 值字段等值匹配字段名写错时往往不报错,先核对字段列表
and / or / not布尔组合,优先级为 not 高于 and 高于 or条件多时用括号明确分组
值: *通配匹配前导通配代价高,尽量少用
>= > < <=数值与日期区间比较字段类型需为数值或日期,字符串比较不可靠
引号包裹短语整体匹配含空格或特殊符号的值必须加引号
KQL 由 Kibana 在浏览器端转成 Lucene 查询再发给 Elasticsearch,本身没有独立的服务端语法;同样的条件在 Kibana 之外不适用,脚本化检索要改用 ES DSL。
字段名可以直接从左侧字段列表点选插入,减少手打错字;检索 keyword 子字段时要带后缀,例如 level.keyword: error。

易错点

  • 按 SQL 习惯写 where 与等号会直接报语法错误,KQL 用冒号表示等值判定
  • 字段名拼错时查询不报错却返回无关结果,先在字段列表确认准确名称再写条件
  • 对 text 字段做等值匹配受分词影响,整串短语必须用引号包裹才命中
  • 超长时间范围叠通配条件会拖慢查询甚至超时,先缩小时间窗再逐步放宽

数据来源与参考

  • Kibana 官方文档 · KQL
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌