- Kibana 指南其他版本
- 什么是 Kibana?
- 8.17 版本的新增功能
- Kibana 概念
- 快速入门
- 设置
- 生产注意事项
- Discover
- 仪表板
- Canvas
- 地图
- 报告和共享
- 机器学习
- Graph
- 告警
- 可观测性
- 搜索
- 安全性
- 开发工具
- Fleet
- Osquery
- 堆栈监控
- 堆栈管理
- REST API
- Kibana 插件
- 问题排查
- 辅助功能
- 发行说明
- 升级说明
- Kibana 8.17.0
- Kibana 8.16.1
- Kibana 8.16.0
- Kibana 8.15.5
- Kibana 8.15.4
- Kibana 8.15.3
- Kibana 8.15.2
- Kibana 8.15.1
- Kibana 8.15.0
- Kibana 8.14.3
- Kibana 8.14.2
- Kibana 8.14.1
- Kibana 8.14.0
- Kibana 8.13.4
- Kibana 8.13.3
- Kibana 8.13.2
- Kibana 8.13.1
- Kibana 8.13.0
- Kibana 8.12.2
- Kibana 8.12.1
- Kibana 8.12.0
- Kibana 8.11.4
- Kibana 8.11.3
- Kibana 8.11.2
- Kibana 8.11.1
- Kibana 8.11.0
- Kibana 8.10.4
- Kibana 8.10.3
- Kibana 8.10.2
- Kibana 8.10.1
- Kibana 8.10.0
- Kibana 8.9.2
- Kibana 8.9.1
- Kibana 8.9.0
- Kibana 8.8.2
- Kibana 8.8.1
- Kibana 8.8.0
- Kibana 8.7.1
- Kibana 8.7.0
- Kibana 8.6.1
- Kibana 8.6.0
- Kibana 8.5.2
- Kibana 8.5.1
- Kibana 8.5.0
- Kibana 8.4.3
- Kibana 8.4.2
- Kibana 8.4.1
- Kibana 8.4.0
- Kibana 8.3.3
- Kibana 8.3.2
- Kibana 8.3.1
- Kibana 8.3.0
- Kibana 8.2.3
- Kibana 8.2.2
- Kibana 8.2.1
- Kibana 8.2.0
- Kibana 8.1.3
- Kibana 8.1.2
- Kibana 8.1.1
- Kibana 8.1.0
- Kibana 8.0.0
- Kibana 8.0.0-rc2
- Kibana 8.0.0-rc1
- Kibana 8.0.0-beta1
- Kibana 8.0.0-alpha2
- Kibana 8.0.0-alpha1
- 开发人员指南
Kibana 查询语言
编辑Kibana 查询语言
编辑Kibana 查询语言 (KQL) 是一种简单的基于文本的查询语言,用于过滤数据。
- KQL 仅用于过滤数据,不负责聚合、转换或排序数据。
- 不要将 KQL 与具有不同功能集的 Lucene 查询语言 混淆。
使用 KQL 来过滤字段值存在、匹配给定值或在给定范围内的文档。
过滤字段存在的文档
编辑要过滤给定字段存在索引值的文档,请使用 *
运算符。例如,要过滤 http.request.method
字段存在的文档,请使用以下语法
http.request.method: *
这会检查任何索引值,包括空字符串。
过滤匹配值的文档
编辑使用 KQL 过滤匹配特定数字、文本、日期或布尔值的文档。例如,要过滤 http.request.method
为 GET 的文档,请使用以下查询
http.request.method: GET
字段参数是可选的。如果未提供,则会在所有字段中搜索给定值。例如,要在所有字段中搜索 “Hello”,请使用以下内容
Hello
查询关键字、数值、日期或布尔字段时,该值必须完全匹配,包括标点符号和大小写。但是,查询文本字段时,Elasticsearch 会根据字段的映射设置分析提供的值。例如,搜索 http.request.body.content
(一个 text
字段)包含文本 “null pointer” 的文档
http.request.body.content: null pointer
因为这是一个 text
字段,所以这些搜索词的顺序无关紧要,甚至包含 “pointer null” 的文档也会返回。要搜索 text
字段中按给定顺序排列的词语,请将该值用引号括起来,如下所示
http.request.body.content: "null pointer"
某些字符必须用反斜杠转义(除非用引号括起来)。例如,要搜索 http.request.referrer
为 https://example.com 的文档,请使用以下任一查询
http.request.referrer: "https://example.com" http.request.referrer: https\://example.com
您必须转义以下字符
\():<>"*
过滤指定范围内的文档
编辑要搜索包含指定范围内词语的文档,请使用 KQL 的范围语法。例如,要搜索 http.response.bytes
小于 10000 的所有文档,请使用以下语法
http.response.bytes < 10000
要搜索包含的范围,请组合多个范围查询。例如,要搜索 http.response.bytes
大于 10000 但小于或等于 20000 的文档,请使用以下语法
http.response.bytes > 10000 and http.response.bytes <= 20000
您还可以将范围语法用于字符串值、IP 地址和时间戳。例如,要搜索早于两周前的文档,请使用以下语法
@timestamp < now-2w
有关可接受的日期格式的更多示例,请参阅 日期数学。
使用通配符过滤文档
编辑要搜索与模式匹配的文档,请使用通配符语法。例如,要查找 http.response.status_code
以 4 开头的文档,请使用以下语法
http.response.status_code: 4*
默认情况下,出于性能原因,不允许使用前导通配符。您可以使用 query:allowLeadingWildcards
高级设置修改此行为。
目前仅支持 *
。它匹配零个或多个字符。
否定查询
编辑要否定或排除一组文档,请使用 not
关键字(不区分大小写)。例如,要过滤 http.request.method
不是 GET 的文档,请使用以下查询
NOT http.request.method: GET
组合多个查询
编辑要组合多个查询,请使用 and
/or
关键字(不区分大小写)。例如,要查找 http.request.method
为 GET 或 http.response.status_code
为 400 的文档,请使用以下查询
http.request.method: GET OR http.response.status_code: 400
同样,要查找 http.request.method
为 GET 且 http.response.status_code
为 400 的文档,请使用此查询
http.request.method: GET AND http.response.status_code: 400
要在组合多个查询时指定优先级,请使用括号。例如,要查找 http.request.method
为 GET 且 http.response.status_code
为 200,或 http.request.method
为 POST 且 http.response.status_code
为 400 的文档,请使用以下内容
(http.request.method: GET AND http.response.status_code: 200) OR (http.request.method: POST AND http.response.status_code: 400)
当查询同一字段的多个值时,您也可以使用括号进行简写语法。例如,要查找 http.request.method
为 GET、POST 或 DELETE 的文档,请使用以下内容
http.request.method: (GET OR POST OR DELETE)
匹配多个字段
编辑通配符也可用于查询多个字段。例如,要搜索 datastream
的任何子字段包含 “logs” 的文档,请使用以下内容
datastream.*: logs
当使用通配符查询多个字段时,如果字段的类型不同,则可能会发生错误。例如,如果 datastream.*
同时匹配数值字段和字符串字段,则上述查询将导致错误,因为不能针对字符串值查询数值字段。
查询嵌套字段
编辑查询 嵌套字段 需要特殊语法。考虑以下文档,其中 user
是一个嵌套字段
{ "user" : [ { "first" : "John", "last" : "Smith" }, { "first" : "Alice", "last" : "White" } ] }
要查找 user
数组中的单个值包含名为 “Alice” 且姓为 “White” 的文档,请使用以下内容
user:{ first: "Alice" and last: "White" }
因为嵌套字段可以位于其他嵌套字段内,所以您必须指定要查询的嵌套字段的完整路径。例如,考虑以下文档,其中 user
和 names
都是嵌套字段
{ "user": [ { "names": [ { "first": "John", "last": "Smith" }, { "first": "Alice", "last": "White" } ] } ] }
要查找 user.names
数组中的单个值包含名为 “Alice” 且 姓为 “White” 的文档,请使用以下内容
user.names:{ first: "Alice" and last: "White" }