使用 ES|QL

编辑

Elasticsearch 查询语言 ES|QL 使您更容易在不离开 Discover 的情况下探索数据。

在本教程中,我们将使用 Discover 和 Lens 中的 Kibana 示例 Web 日志来探索数据并创建可视化。

有关完整的 ES|QL 文档,包括教程、示例和完整的语法参考,请参阅Elasticsearch 文档。有关 Kibana 中 ES|QL 的更详细概述,请参阅在 Kibana 中使用 ES|QL

先决条件

编辑

要在 Discover 中查看 ES|QL 选项,必须从 Kibana 的 高级设置中启用 enableESQL 设置。默认情况下已启用。

使用 ES|QL

编辑

加载示例数据

  1. 安装 Web 日志示例数据.
  2. 转到 Discover
  3. 从应用程序菜单栏中选择 尝试 ES|QL

假设我们想了解用户使用的操作系统以及他们机器上的内存大小。

  1. 将时间范围设置为 过去 7 天
  2. 复制下面的查询

    FROM kibana_sample_data_logs 
    | KEEP machine.os, machine.ram 

    我们专门查找刚刚安装的示例 Web 日志中的数据。

    我们只在结果表中保留 machine.osmachine.ram 字段。

    将每个处理命令放在新的一行,以提高可读性。

  3. 点击 ▶运行

    An image of the query result

    ES|QL 关键字不区分大小写。

让我们向查询添加 geo.dest,以找出访问的地理目的地,并限制结果。

  1. 复制下面的查询

    FROM kibana_sample_data_logs
    | KEEP machine.os, machine.ram, geo.dest
    | LIMIT 10
  2. 再次点击 ▶运行。您会注意到表格现在限制为 10 个结果。可视化也根据查询自动更新,并为您分解了数据。

    当您不使用 KEEP 指定要保留的任何特定字段时,可视化不会自动分解。相反,可视化上方会出现一个额外的选项,允许您手动选择一个字段。

    An image of the extended query result

我们现在将更进一步,按机器内存大小对数据进行排序,并过滤掉 GB 目的地。

  1. 复制下面的查询

    FROM kibana_sample_data_logs
    | KEEP machine.os, machine.ram, geo.dest
    | SORT machine.ram desc
    | WHERE geo.dest != "GB"
    | LIMIT 10
  2. 再次点击 ▶运行。表格和可视化不再显示 geo.dest 字段值为“GB”的结果,并且表格中的结果现在根据 machine.ram 字段按降序排序。

    An image of the full query result

  3. 点击 保存以将查询和可视化保存到仪表板。

编辑 ES|QL 可视化

编辑

您可以通过点击铅笔图标来更改可视化。这将打开其他设置,允许您根据自己的喜好调整图表类型、轴、细分、颜色和显示的信息。如果您不确定选择哪种方式,请查看可视化编辑器中提供的建议之一。

如果您想保留可视化并将其添加到仪表板,可以使用软盘图标保存它。

ES|QL 和时间序列数据

编辑

默认情况下,当索引包含 @timestamp 字段时,ES|QL 会识别时间序列数据。这将为您的查询启用时间范围选择器和可视化选项。

如果您的索引没有明确的 @timestamp 字段,但有不同的时间字段,您仍然可以通过在查询中调用 ?_start?_tend 参数来启用时间范围选择器和可视化选项。

例如,电子商务示例数据集没有 @timestamp 字段,但有一个 order_date 字段。

默认情况下,当查询此数据集时,时间序列功能未激活。不会生成可视化,并且时间选择器被禁用。

FROM kibana_sample_data_ecommerce
| KEEP customer_first_name, email, products._id.keyword
ESQL query without time series capabilities enabled

在仍然查询相同数据集的情况下,通过根据 order_date 字段添加 ?_start?_tend 参数,Discover 启用时间序列功能。

FROM kibana_sample_data_ecommerce
| WHERE order_date >= ?_tstart and order_date <= ?_tend
ESQL query with a custom time field enabled