ES|QL(Elasticsearch 查询语言)入门

通过直接从 Discover 中使用 ES|QL 创建聚合、可视化和告警来缩短见解获取时间

ES_QL_blog-720x420-07.png

什么是 ES|QL(Elasticsearch 查询语言)?

ES|QL(Elasticsearch 查询语言)是 Elastic® 的全新创新管道查询语言,其设计宗旨是通过提供强大的计算和聚合功能来加快数据分析和调查过程。

更加轻松高效地应对识别正在发生的网络攻击或确定生产问题的复杂性。

ES|QL 不仅简化了搜索、聚合和可视化海量数据集的过程,还为用户提供了查找和实时处理等高级功能,所有这些都是在 Discover 中的一个屏幕中完成。

ES|QL 为 Elastic Stack 添加了 3 项强大的功能

  1. 一种全新的快速分布式专用查询引擎,可为 _query 提供强大支持。全新的 ES|QL 查询引擎通过并行处理提供高级搜索功能,无论数据源和结构如何,都能提高速度和效率新引擎的性能已经过衡量并且已公开。遵循此公共仪表板中的性能基准测试。

  2. 一种全新且功能强大的管道语言。ES|QL 是 Elastic 的全新管道语言,用于转换、扩充和简化数据调查。在本文档中深入了解 ES|QL 语言的功能。

  3. 一种全新统一的数据探索/调查体验,通过从一个屏幕上创建聚合和可视化来加快解决速度,从而提供不间断的工作流。

参加 Elasticsearch 开发人员调查

您是否开发搜索应用?请完成这份 15 分钟的调查,分享您的反馈。

参加调查

我们为什么对 ES|QL 投入时间和精力?

我们的用户需要敏捷的工具,这些工具不仅可以呈现数据,而且还可以提供高效的方法来理解数据,以及提供根据见解实时采取行动和采集后数据处理的能力。

Elastic 增强用户的数据探索体验的承诺促使我们投资于 ES|QL。它的设计宗旨是为初学者提供便利,为专家提供强大的功能。通过 ES|QL 的直观界面,用户可以快速开始并深入研究他们的数据,而无需陡峭的学习曲线。自动完成和应用内文档可确保编写高级查询成为一个简单的工作流。

此外,ES|QL 不仅仅向您显示数字,还会使数字栩栩如生。由 Lens 建议引擎提供技术支持的上下文可视化会自动适应查询的性质,从而让您清晰地了解见解。

此外,直接集成到仪表板和 Alerting 功能反映了我们对高度综合的端到端体验的愿景。

实际上,我们对 ES|QL 的投资是对我们社区不断发展的需求的直接回应 — 这是朝着互联程度越来越高、更富有洞见和更高效的工作流迈出的一大步。

深入研究安全性和可观测性用例

我们对 ES|QL 的承诺还源于对我们用户(例如,网站可靠性工程师 (SRE)、DevOps 和威胁猎人)所面临的挑战的深刻理解。

对于 SRE 而言,可观测性至关重要。每一秒的停机或小故障都会给用户体验带来连锁效应,从而影响利润。ES|QL 的 Alerting 功能就是一个示例:它重在强调有意义的趋势,而不是孤立的事件,SRE 可以主动确定和解决系统效率低下问题或故障。这可以减少干扰,并确保他们对系统稳定性的真正威胁做出反应,从而使他们的反应更加及时有效。

DevOps 团队一直在与时间赛跑,部署多个更新、补丁和新功能。通过 ES|QL 全新强大的数据探索和数据可视化,他们可以快速评估每次部署的影响,监测系统运行状况,并接收实时反馈。这不仅提高了部署的质量,而且确保在需要时快速修正航向。

对于威胁猎人来说,安全态势一直在不断发展和变化。ENRICH 功能就是 ES|QL 如何在这种不断变化的环境中为他们赋能的一个示例。此功能允许他们在不同的数据集中查找数据,从而揭示可能表明安全威胁的隐藏模式或异常。此外,上下文可视化意味着他们不仅可以看到原始数据,还可以直观地呈现可操作的见解。这大大缩短了识别潜在威胁所需的时间,从而确保对漏洞做出更快的反应。

无论您是尝试解读服务器负载峰值的 SRE,还是评估最新版本影响的 DevOps 专业人员,或者是调查潜在漏洞的威胁猎人,ES|QL 都可以为用户提供辅助,而不是使过程复杂化。

本博文的下一部分将帮助您开始使用 ES|QL,并展示在探索数据时的强大功能的一些真实示例。

如何在 Kibana 开始使用 ES|QL

要开始使用 ES|QL,请导航至 Discover,然后只需从数据视图选取器中选择试用 ES|QL。它使用方便且简洁明了。

1 - 开始使用

这将使您在 Discover 中进入 ES|QL 模式。

高效简便的查询构建

Discover 中的 ES|QL 提供了自动完成和应用内文档,使您可以轻松地直接从查询栏中编写强大的查询。

2 - 查询栏中的自动完成可帮助您快速完成查询
查询栏中的自动完成可帮助您快速完成查询
3 - 应用内文档可帮助您学习 ES|QL!
应用内文档可帮助您学习 ES|QL!

如何使用 ES|QL 分析和可视化数据

使用 ES|QL,您可以进行全面且强大的数据探索。它允许您在 Discover 中进行临时数据探索、创建聚合、转换数据、扩充数据集等等,这一切都可以直接在查询生成器中完成。结果以表格形式或可视化形式显示,具体取决于您正在执行的查询。

下面是一些示例,展示了 ES|QL 查询可观测性,以及结果是如何以表格形式和可视化表示形式呈现的。

指标用例中的 ES|QL 查询:

from metrics* 
| stats max_cpu = max(kubernetes.pod.cpu.usage.node.pct), max_mem = max(kubernetes.pod.memory.usage.bytes) by kubernetes.pod.name 
| sort max_cpu desc 
| limit 10

上面的查询展示了如何利用以下源命令、聚合函数和处理命令:

from 源命令(文档

from metrics*:这将从与模式“metrics*”匹配的索引模式启动查询。 星号 (*) 充当通配符,表示它将从名称以“metrics”开头的所有索引模式中选择数据。

stats…by 聚合(文档)、max文档)和 by文档

此部分根据具体统计数据汇总数据。它分解如下:

max_cpu=max(kubernetes.pd.cpu.usage.node.pct):对于每个不同的“kubernetes.pod.name”,它会找到最大 CPU 使用百分比,并将该值存储在名为“max_cpu”的新列中。

max_mem = max(kubernettes.pod.memory.usage.bytes):对于每个不同的“kubernetes.pod.name”,它会找到最大内存利用率(以字节为单位),并将该值存储在名为“avg_mem”的新列中。

处理命令(文档

sort max_cpu desc:这将按“max_cpu”列对结果数据行进行降序排列。这意味着“max_cpu”值最高的行将位于顶部。

limit 10:这会将输出限制为排序后的前 10 行。

总之,查询:

  • 使用索引模式对所有指标索引中的数据进行分组
  • 聚合数据以找到每个不同 Kubernetes pod 的最大 CPU 使用百分比和最大内存利用率
  • 按最大 CPU 使用率对聚合数据进行降序排列
  • 仅输出 CPU 使用率最高的前 10 行

上下文可视化:在 Discover 中编写 ES|QL 查询时,您将收到由 Lens 建议引擎提供技术支持的视觉表示。查询的性质决定了您获得的可视化类型,无论是指标、直方图热图等。

下面是上述查询的条形图和表格表示形式的可视化表示,其中显示了 max_cpu、avg_mem 列和 kubernetes.pod.name 列:

4 - 多个条形图

可观测性和时序数据用例中的 ES|QL 查询示例:

from apache-logs |
where url.original == "/login" |
eval time_buckets = auto_bucket(@timestamp, 50, "2023-09-11T21:54:05.000Z", "2023-09-12T00:40:35.000Z") |
stats login_attempts = count(user.name) by time_buckets, user.name |
sort login_attempts desc

上面的查询展示了如何利用以下源命令、聚合函数、处理命令和函数。

from 源命令(文档

from apache-logs:这将从名为“apache-logs”的索引中启动查询。 该索引包含与 Apache Web 服务器流量相关的日志条目。

where文档

where url.original=="/cn/login":仅筛选出“url.original”字段等于“/login”的记录。 这意味着我们仅对与登录尝试或访问登录页面有关的日志条目感兴趣。

eval文档)和 auto_bucket文档

eval time_buckets =...:这将创建一个名为“time_buckets”的新列。

auto_bucket”函数可创建人性化的存储桶,并为每一行返回一个日期时间值,该值对应于该行所属的结果存储桶。

“@timestamp”是包含每个日志条目的时间戳的字段。

“50”是存储桶的数量。

“2023-09-11T21:54:05.000Z”:进行存储的开始时间

“2023-09-12T00:40:35.000Z”:进行存储的结束时间

这意味着,从“2023-09-11T21:54:05.000Z”到“2023-09-12T00:40:35.000Z”的日志条目将被划分为 50 个等距间隔,每个条目将基于其时间戳与特定间隔相关联。

目标并不是确切地提供存储桶的目标数量,而是选择一个您满意的范围,最多提供存储桶的目标数量。如果您需要更多存储桶,那么 auto_bucket 可以选择更小的范围。

stats…by 聚合(文档)、count文档)和 by文档

stats login_attempts = count(user.name) by time_buckets, user.name:聚合数据以计算登录尝试次数。它通过计算“user.name”(表示尝试登录的唯一用户)的出现次数来执行此操作。

计数按“time_buckets”(我们创建的时间间隔)和“user.name”进行分组。 这意味着对于每个时间存储桶,我们会看到每个用户尝试登录的次数。

sort文档

sort login_attempts desc:最后,聚合结果按“login_tempts”列进行降序排列。这意味着结果将在顶部显示最高的登录尝试次数。

总之,查询:

  • 从“apache-logs”索引中选择数据
  • 筛选出与登录页面相关的日志条目
  • 将这些条目存储到特定的时间间隔
  • 统计每个用户在每个时间间隔内的登录尝试次数
  • 按最高登录尝试次数在前的顺序输出结果

下面是上述查询的条形图和表格表示形式的可视化表示,其中显示了 login_attempts、time_buckets 和 user.name 列。

5 - 彩色图表

Discover 和仪表板中的内联可视化编辑

直接在 Discover 和仪表板中编辑 ES|QL 可视化。无需导航至 Lens 进行快速编辑;您可以无缝地做出更改。

您可以观看下面的端到端工作流的视频或阅读分步指南:

  1. 编写 ES|QL 查询

  2. 基于查询的性质获得上下文可视化

  3. 内联编辑可视化

  4. 保存到仪表板

  5. 能够从仪表板编辑可视化

Video thumbnail

第 1 步:编写 ES|QL 查询。生成指标可视化的查询示例:

from apache-logs
| stats avgbytes = avg(http.response.body.bytes)
| eval roundbytes = round(avgbytes)
| drop avgbytes

第 2 步:基于查询的性质获得上下文可视化(在本例中为指标可视化)。然后,您可以选择铅笔图标进入内联编辑模式。

6

第 3 步:使用内联编辑模式编辑可视化

7

在上面的示例中,我们希望可视化处于动态颜色模式,因此我们将其切换到“动态”。

8

我们还有机会定义我们想要使用的颜色范围:

9

第 4 步:保存到仪表板

10
11

第 5 步:能够从仪表板编辑可视化

12 - roundbytes
13

直接从 Discover 创建 ES|QL 告警

您可以将 ES|QL 用于可观测性和安全告警,将聚合值设置为阈值。通过强调有意义的趋势而不是孤立的事件和减少误报,提高检测准确性并接收可操作的通知。

下面,我们将重点介绍如何从 Discover 创建 ES|QL 告警规则类型。

新的告警规则类型位于现有的 Elasticsearch 规则类型下。此规则类型提供了 ES|QL 中可用的所有新功能,并解锁了新的告警用例。

使用这个新类型,用户将能够根据定义的 ES|QL 查询生成单个告警,并在保存规则之前预览查询结果。当查询返回空结果时,不会生成告警。

告警的查询示例:

from metrics-pods |
stats max_cpu = max(kubernetes.pod.cpu.usage.node.pct) by kubernetes.pod.name|
sort max_cpu desc | limit 10

如何从 Discover 创建告警

第 1 步:单击“告警”,然后单击“创建搜索阈值规则”。 您可以在查询栏中定义 ES|QL 查询之后或在定义 ES|SQL 查询之前,开始创建 ES|QL 告警规则类型。在定义后执行此操作的好处是,查询会自动粘贴到“创建告警”浮出控件中。

14

第 2 步:开始定义 ES|QL 告警规则类型

15

第 3 步:测试您的告警规则类型查询。您可以对粘贴的 ES|QL 查询进行迭代,并通过单击“测试查询”对其进行测试。 这会在一个表格中提供结果预览。

16 - 创建规则
17 - 测试查询

第 4 步:设置连接器并“保存”。 您现在已经成功创建了 ES|QL 告警规则类型!

18

使用其他数据集中的字段扩充查询数据集

您可以使用 enrich 命令(文档)通过其他数据集中的字段来增强查询数据集,并为所选策略提供具有上下文的建议(即,提示匹配字段和扩充的列)。

使用 ENRICH 的查询示例,其中通过查询利用扩充策略“servers-to-project”来使用 name、server_hostname 和 cost 扩充数据集:

from projects* | limit 10 |
enrich servers-to-project on project_id with name, server_hostname, cost |
stats num_of_servers = count(server_hostname), total_cost = sum(cost) by project_id |
sort total_cost desc
20
上述使用 ENRICH 的查询的表格结果和可视化表示

我们还通过添加概述和创建扩充策略的向导,让用户可以轻松创建扩充策略。

要查找扩充策略的概述,请导航至“堆栈管理”⇒“索引管理”,在这里您将看到一个名为扩充策略的选项卡:

21

以下是上述查询中使用的扩充策略:“servers-to-project”:

22

您可以通过单击创建扩充策略,轻松开始创建新的扩充策略。创建并执行一个扩充策略后,便可在 Discover 中的 ES|QL 查询中进行使用。

23 - 创建扩充策略

此处深入了解扩充策略,在此处深入了解 ES|QL 中的 ENRICH 命令。

提升数据探索:ES|QL 的威力和前景

ES|QL 是 Elastic 在推进数据分析和探索方面的最新创新。它不仅能够显示数据,还能够使数据容易理解、可操作并在视觉上更具吸引力。ES|QL 由一个快速、分布式的专用查询引擎提供技术支持,设计为一种新的管道语言,并打包在一个统一的数据探索体验中,可应对用户(例如网站可靠性工程师、DevOps、威胁猎人)和其他类型的分析人员的各种挑战。

ES|QL 使 SRE 能够有效解决系统效率低下问题,帮助 DevOps 确保高质量的部署,并为威胁猎人提供快速识别潜在安全威胁的工具。它直接集成到仪表板、内联可视化编辑、告警功能以及 enrich 命令等功能,可提供无缝衔接的高效工作流。ES|QL 界面集强大的功能和用户友好性于一体,允许用户深入研究他们的数据,使他们的分析更简单、更富有见地。ES|QL 的推出只是 Elastic 围绕增强数据探索体验和满足用户社区不断发展的需求之旅的延续。

您可以立即试用 ES|QL 的所有功能!要进行试用,请注册一个 Elastic 试用帐户或者在我们的公开演示环境中进行测试。

本博文所描述的任何特性或功能的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何功能或特性可能无法按时提供或根本不会提供。