在 Kibana 中使用 ES|QL
Elastic Stack Serverless
您可以在 Kibana 中使用 ES|QL 来查询和聚合数据、创建可视化效果以及设置警报。
更具体地说,ES|QL 是 Kibana 中一个强大的工具,可以帮助您解决特定的解决方案用例。例如
- 可观测性:ES|QL 使从单个查询中分析指标、日志和跟踪变得更加容易。通过动态定义字段、使用查找丰富数据以及使用同步查询处理,快速找到性能问题。将 ES|QL 与机器学习和 AiOps 结合使用可以提高检测准确性并使用聚合值阈值。
- 安全性:使用 ES|QL 通过使用查找来检索用于调查的重要信息。动态丰富数据并创建新字段,以获得有价值的见解,从而更快地做出决策和采取行动。例如,对 IP 地址执行查找以识别其地理位置、其与已知恶意实体的关联,或者它是否属于已知的云服务提供商,所有这些都来自一个搜索栏。ES|QL 通过在检测规则中包含聚合值来确保更准确的警报。
本指南向您展示如何在 Kibana 中使用 ES|QL。 要按照查询进行操作,请通过从 Kibana 的 Integrations 页面中选择 Sample Data,选择 Other sample data sets,然后单击 Sample web logs 卡上的 Add data 来加载“Sample web logs”示例数据集。
默认情况下,ES|QL 在 Kibana 中处于启用状态。可以使用 高级设置 中的 enableESQL
设置禁用它。
这将从各种应用程序中隐藏 ES|QL 用户界面。但是,用户将能够访问现有的 ES|QL 项目,如已保存的搜索和可视化效果。
要开始使用 ES|QL,请转到 Discover。 接下来,从应用程序菜单栏中选择 Try ES|QL。
切换到 ES|QL 模式后,查询栏会显示您先前转换为 ES|QL 的 KQL 或 Lucene 查询。如果查询为空,它会显示一个示例查询。例如
from kibana_sample_data_logs | limit 10
每个查询都以一个 源命令 开头。在此查询中,源命令是 FROM
。 FROM
从数据流、索引或别名检索数据。在本例中,数据是从 kibana_sample_data_logs
检索的。
源命令后可以跟一个或多个 处理命令。在此查询中,处理命令是 LIMIT
。 LIMIT
限制检索的行数。
单击 ES|QL help 按钮以打开产品内置的参考文档,了解所有命令和函数,或获取推荐的查询,以帮助您入门。
为了更轻松地编写查询,自动完成功能提供了可能的命令和函数建议

ES|QL 关键字不区分大小写。以下查询与上一个查询相同
FROM kibana_sample_data_logs | LIMIT 10
为了便于阅读,您可以将每个处理命令放在新行上。以下查询与上一个查询相同
FROM kibana_sample_data_logs
| LIMIT 10
您可以使用查询编辑器的页脚中的 Add line breaks on pipes 按钮来执行此操作。

您可以根据需要通过拖动其底边来调整编辑器的高度。
查询可能会导致警告,例如在查询不支持的字段类型时。发生这种情况时,警告符号会显示在查询栏中。要查看详细的警告,请展开查询栏,然后单击 warnings。
您可以在查询栏中重复使用最近的 ES|QL 查询。在查询栏中,单击 Show recent queries。
然后,您可以滚动浏览最近的查询

ES|QL 具有应用内帮助和建议功能,因此您可以更快地入门,而不必离开应用程序来检查语法。
从查询历史记录中,您可以将一些查询标记为收藏,以便以后更快地查找和访问它们。
在查询栏中,单击 Show recent queries。
从 Recent 选项卡中,您可以为所需的任何查询加星标。
在 Starred 选项卡中,找到您之前加星标的所有查询。

对于示例查询,结果表显示 10 行。省略 LIMIT
命令时,结果表默认最多显示 1000 行。使用 LIMIT
,您可以将限制增加到最多 10,000 行。
10,000 行的限制仅适用于查询检索并显示在 Discover 中的行数。任何查询或聚合都在完整数据集上运行。
对于示例查询,每一行显示两列:一列包含 @timestamp
字段,另一列包含完整的文档。要显示文档中的特定字段,请使用 KEEP
命令
FROM kibana_sample_data_logs
| KEEP @timestamp, bytes, geo.dest
要将所有字段显示为单独的列,请使用 KEEP *
FROM kibana_sample_data_logs
| KEEP *
Discover 中的最大列数为 50。如果查询返回超过 50 列,Discover 仅显示前 50 列。
要按其中一列排序,请单击要排序的列名并选择排序顺序。请注意,这会执行客户端排序。它仅对查询检索到的行进行排序,由于(隐式)限制,这些行可能不是完整的数据集。要对完整数据集进行排序,请使用 SORT
命令
FROM kibana_sample_data_logs
| KEEP @timestamp, bytes, geo.dest
| SORT bytes DESC
要在指定的时间范围内显示数据,您可以使用标准时间过滤器、自定义时间参数或 WHERE 命令。
当您查询的索引具有名为 @timestamp
的字段时,标准 时间过滤器 处于启用状态。
如果您的索引没有名为 @timestamp
的字段,您可以使用 ?_tstart
和 ?_tend
参数来指定时间范围。这些参数适用于任何时间戳字段,并自动与 时间过滤器 同步。
FROM my_index
| WHERE custom_timestamp >= ?_tstart AND custom_timestamp < ?_tend
您还可以将 ?_tstart
和 ?_tend
参数与 BUCKET
函数一起使用,以便在 ES|QL 可视化效果 中创建自动递增的时间段。例如
FROM kibana_sample_data_logs
| STATS average_bytes = AVG(bytes) BY BUCKET(@timestamp, 50, ?_tstart, ?_tend)
此示例使用 50
个时间段,这是时间段的最大数量。
您还可以使用 WHERE
命令和 NOW
函数来限制时间范围。例如,如果时间戳字段名为 timestamp
,要查询最近 15 分钟的数据
FROM kibana_sample_data_logs
| WHERE timestamp > NOW() - 15minutes
在查询栏和结果表之间,Discover 显示日期直方图可视化效果。默认情况下,如果您查询的索引不包含 @timestamp
字段,则不会显示直方图。但您可以使用带有 ?_tstart
和 ?_tend
参数的自定义时间字段来启用它。
可视化效果会适应查询。查询的性质决定了可视化效果的类型。例如,此查询聚合每个目标国家/地区的总字节数
FROM kibana_sample_data_logs
| STATS total_bytes = SUM(bytes) BY geo.dest
| SORT total_bytes DESC
| LIMIT 3
结果可视化效果是显示前 3 个国家/地区的条形图

要更改可视化效果,例如更改可视化类型、轴和颜色,请单击铅笔按钮()。这将打开一个内联编辑器

您可以单击保存按钮()将可视化效果保存到新的或现有的仪表板。保存到仪表板后,您将被带到“仪表板”页面。您可以继续更改可视化效果。单击右上角的选项按钮(
),然后选择 编辑 ES|QL 可视化效果 以打开内联编辑器

您可以使用 ES|QL 查询在仪表板上创建面板。要将面板添加到仪表板,请在 仪表板 下,单击 添加面板 按钮,然后选择 ES|QL。
单击面板过滤器按钮()检查 ES|QL 查询

您也可以从此处编辑 ES|QL 可视化效果。单击右上角的选项按钮(),然后选择 编辑 ESQL 可视化效果 以打开内联编辑器。

ES|QL ENRICH
命令使您能够使用来自另一个数据集的字段丰富您的查询数据集。在使用 ENRICH
之前,您需要创建并执行一个丰富策略。如果策略存在,它将由自动完成功能建议。如果不存在,请单击 单击以创建 以创建一个。

接下来,您可以输入策略名称、策略类型、源索引,以及可选的查询

单击 下一步 以选择匹配字段和丰富字段

最后,单击 创建并执行。
现在,您可以在 ES|QL 查询中使用丰富策略
FROM kibana_sample_data_logs
| STATS total_bytes = SUM(bytes) BY geo.dest
| SORT total_bytes DESC
| LIMIT 3
| ENRICH countries
您可以使用 ES|QL 查询来创建警报。从“Discover”中,单击 警报 ,然后选择 创建搜索阈值规则 。这将打开一个面板,您可以使用 ES|QL 查询创建规则。接下来,您可以测试查询、添加连接器并保存规则。

- 当 Discover 处于 ES|QL 模式时,用于过滤数据的用户界面将被禁用。要过滤数据,请编写一个使用
WHERE
命令的查询。 - Discover 最多显示 10,000 行。此限制仅适用于查询检索并在 Discover 中显示的行数。查询和聚合在完整的数据集上运行。
- Discover 最多显示 50 列。如果查询返回超过 50 列,Discover 仅显示前 50 列。
- 从 Discover 导出的 CSV 文件最多显示 10,000 行。此限制仅适用于查询检索并在 Discover 中显示的行数。查询和聚合在完整的数据集上运行。
- 在没有任何过滤器的情况下一次查询多个索引可能会导致 Kibana 中出现错误,看起来像
[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888)
。来自 ES|QL 的响应太长。使用DROP
或KEEP
限制返回的字段数量。