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

作者:Ninoslav Miskovic

通过使用 ES|QL 直接从 Discover 创建聚合、可视化和警报,缩短获得见解的时间。

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

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

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

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

ES|QL 为 Elastic Stack 增加 3 项强大功能

  1. 一个新的、快速的分布式和专用查询引擎,为 _query 提供支持。 新的 ES|QL 查询引擎通过并发处理提供高级搜索功能,无论数据源和结构如何,都可以提高速度和效率。 新引擎的性能经过测量并公开。 请在公共仪表板中查看性能基准测试。
  2. 一种新的、强大的管道语言。 ES|QL 是 Elastic 的新型管道语言,可转换、丰富和简化数据调查。 在文档中了解有关 ES|QL 语言功能的更多信息。
  3. 一种全新的、统一的数据探索/调查体验,通过从一个屏幕创建聚合和可视化来加速解决问题,从而提供不间断的工作流程。

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

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

Elastic 致力于增强用户的数据探索体验,这促使我们投资 ES|QL。 它旨在为初学者提供方便,为专家提供强大功能。 借助 ES|QL 直观的界面,用户可以快速启动并深入研究数据,而无需艰难的学习曲线。 自动完成和应用程序内文档可确保制作高级查询成为一个简单的工作流程。

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

此外,直接集成到仪表板和警报功能反映了我们对有凝聚力的端到端体验的愿景。

从本质上讲,我们对 ES|QL 的投资是对社区不断变化的需求的直接响应 —— 朝着更加互联、富有洞察力和高效的工作流程迈出的一步。

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

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

对于 SREs 来说,可观察性至关重要。 每一秒的停机或故障都会对用户体验产生连锁反应,从而影响利润。 ES|QL 的警报功能就是一个例子:它强调突出孤立事件的有意义的趋势,SRE 可以主动查明并解决系统效率低下或故障的问题。 这可以减少噪音并确保他们对系统稳定性的真正威胁做出反应,从而使他们的响应更加及时和有效。

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

对于威胁猎手来说,安全形势在不断发展和变化。 ENRICH 功能是 ES|QL 如何在不断变化的环境中为他们提供支持的一个例子。 此功能使他们能够跨不同数据集查找数据,从而揭示可能表明安全威胁的隐藏模式或异常情况。 此外,上下文可视化意味着他们不仅可以看到原始数据,还能获得以视觉方式呈现的可操作的见解。 这大大减少了识别潜在威胁所需的时间,确保对漏洞做出更快的反应。

无论你是试图破译服务器负载峰值的 SRE、评估最新版本影响的 DevOps 专业人员,还是调查潜在漏洞的威胁猎人,ES|QL 都能为用户提供补充,而不是让整个过程变得复杂。

博客文章的下一部分将帮助你开始使用 ES|QL 并展示一些具体示例,说明它在探索数据时的强大功能。

如何在 Kibana 中开始使用 ES|QL

要开始使用 ES|QL,请导航到 Discover,然后只需从数据视图选择器中选择 Try ES|QL。 它用户友好且简单。

这将使你进入 Discover 中的 ES|QL 模式。

高效、简单的查询构建

Discover 中的 ES|QL 提供自动完成和应用内文档,让你可以轻松地直接从查询栏创建强大的查询。

查询栏中自动完成,帮助你快速完成查询

In-app 文档可帮助你学习 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 (文档)

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

limit(文档)

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

总之,查询:

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

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

下面是上述查询的条形图形式的直观表示和表格表示,其中包含 max_cpu、avg_mem 和 kubernetes.pod.name 列:

具有可观察性和时间序列数据用例的 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 源命令(文档)

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

where (文档)

其中 url.original==”/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_attempts” 列降序排序。 这意味着结果将在顶部显示最多的登录尝试次数。

总之,查询:

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

下面是上述查询的条形图形式的直观表示和表格表示,其中包含登录尝试、时间桶和用户名列。

Discover 及 Dashboard 中的内嵌可视化编辑

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

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

  1. 编写 ES|QL 查询
  2. 根据查询的性质获取上下文可视化
  3. 内联编辑可视化
  4. 将其保存到仪表板
  5. 能够从仪表板编辑可视化

ES

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

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

步骤 2. 根据查询的性质获取上下文可视化(在本例中为指标可视化)

然后,你可以选择铅笔图标进入内联编辑模式。

步骤 3. 使用内联编辑模式编辑可视化

在上述情况下,我们希望可视化处于动态(dynamic)颜色模式,因此我们将其切换为 “Dynamic”。

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

步骤 4. 保存到仪表板

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

直接从 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. 单击 “Alerta”,然后单击 “Create search threshold rule

你可以在查询栏中定义 ES|QL 查询之后或定义 ES|QL 查询之前开始创建 ES|QL 警报规则类型。 定义后执行此操作的好处是查询会自动粘贴到 “Create Alert” 弹出窗口中。

步骤 2. 开始定义 ES|QL 警报规则类型

步骤 3. 测试你的警报规则类型查询

你可以迭代粘贴的 ES|QL 查询,并通过单击 “Test query” 对其进行测试。 这将为你提供表格中结果的预览。

第 4 步:设置连接器并“保存”。

你现在已成功创建 ES|QL 警报规则类型!

使用另一个数据集中的字段丰富你的查询数据集

你可以使用 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
上面的 ENRICH 查询的表格结果和可视化表示

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

要查找丰富策略的概述,请导航到 Stack ManagementIndex Management,你将在其中看到一个名为 Enrich Policies 的选项卡:

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

你可以通过单击 “Create enrich policy” 轻松开始创建新的丰富策略。 一旦你创建并执行了一个,就可以在 Discover 中的 ES|QL 查询中使用它。

在此处了解有关丰富策略的更多信息,以及在此处了解有关 ES|QL 中的 ENRICH 命令的更多信息。

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

ES|QL 是 Elastic 推进数据分析和探索的最新创新。 这不仅仅是展示数据; 它是为了使其易于理解、可操作且具有视觉吸引力。 ES|QL 由快速、分布式和专用查询引擎提供支持,设计为一种新的管道语言,并包含统一的数据探索体验,可以满足站点可靠性工程师(site reliability engineer - SRE)、DevOps、威胁猎人和其他类型的分析师的挑战。。

ES|QL 使 SRE 能够有效解决系统效率低下的问题,帮助 DevOps 确保高质量部署,并为威胁搜寻者提供快速识别潜在安全威胁的工具。 它直接集成到仪表板、内嵌可视化编辑、警报功能以及丰富命令等功能,提供了无缝且高效的工作流程。 ES|QL 界面结合了强大功能和用户友好性,允许用户深入研究数据,使他们的分析更简单、更有洞察力。 ES|QL 的推出只是 Elastic 围绕增强数据探索体验和满足用户社区不断变化的需求而努力的延续。

你今天就可以尝试 ES|QL 的所有功能! 为此,请注册 Elastic 试用帐户或在我们的公共演示环境中进行测试。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

原文:Getting started with ES|QL (Elasticsearch Query Language) | Elastic Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/126965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握互联网的未来:5G时代的新机遇

随着5G技术的快速发展,我们正步入一个全新的互联网时代。5G不仅仅是速度的飞跃,它还代表着无限的可能性和前所未有的创新机遇。本文将探讨5G如何重新定义互联网,并为您提供洞察如何抓住这波科技浪潮。 5G技术的核心优势 超高速度&#xff1a…

Python 3D建模指南【numpy-stl | pymesh | pytorch3d | solidpython | pyvista】

想象一下,我们需要用 python 编程语言构建某个对象的三维模型,然后将其可视化,或者准备一个文件以便在 3D 打印机上打印。 有几个库可以解决这些问题。 让我们看一下如何在 python 中从点、边和图元构建 3D 模型。 如何执行基本 3D 建模技术&…

人车实时精准管控!北斗让换流站作业更安全

换流站是高压直流输电系统的核心组成部分,对促进电网稳定运行、保障电力行业的可持续发展有着重要作用。长期以来,随着电网主变改扩建设工程的开展,站内作业人员安全管控压力随之增大,仅依靠传统的“人盯人”和“自主”管控模式较…

CLion配置libtorch找不到xxx.dll

项目场景: 使用CLion配置libtorch时遇到该问题 问题描述 使用CLion配置libtorch时,CMakeLists.txt文件写完后,cmake也能成功,但是一旦运行代码就会报错找不到xxx.dll,比如找不到torch_cuda.dll或找不到c10.dll 原因分…

随机链表的复制

题目描述 给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。 深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的nex…

对话大众软件子公司:中国的智舱、智驾比欧洲早一代

作者 | 德新 编辑 | 王博 尤其在上海车展之后,大部分的外资车企都在转型调整。 2023年的上海车展是一个重要节点。在这之前,疫情阻断了国内和海外频繁的线下交流,而国内汽车的新能源化和智能化在这期间完成了一次飞跃式的发展。所以车展开…

打包 广告

小米广告 Type android.support.v4.app.INotificationSideChannel is defined multiple times d8clsPath: Error in D:\ChannelFolder\JJChannelPackageForTest\ToolConfigPath\channels-ad\ATemp-100057\xiaomi\lib\xiaomi_ad_merge_20231104.jar:android/support/v4/app/IN…

Leetcode-876 链表的中间结点

本人解法有点硬凑答案… /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

关于Office阻止访问嵌入对象的解决办法

问题 Word文档中想要下载嵌入的文件时被Office阻止了,无法下载。 解决办法 打开文件——选项——信任中心,在宏设置中启用所有宏,关于Macro、Acitve X插件等项目设置上,建议暂时全部设置为允许,看下相关对象的访问…

第五章《数据降维:深入理解 PCA 的来龙去脉》笔记

主成分分析(Principal Component Analysis,PCA) 就是机器学习中一种常用且有效的数据降维方法。 5.1 PCA是什么 PCA 将相关性高的变量转变为较少的独立新变量,实现用较少的综合指标分别代表存在于 各个变量中的各类信息,既减少高维数据的变…

C++ 信息学奥赛 2048:【例5.18】串排序

#include<bits/stdc.h> using namespace std; int main() {string s[25];//string类数组 int n;cin >> n;for(int i 1; i < n; i)cin >> s[i];sort(s1, s1n);//默认升序 调用函数默认排序 for(int i 1; i < n; i)cout << s[i] << endl;…

mysql隐式转换转换引起的bug

生产环境中遇到一个情况情况 &#xff0c;过滤数据发现过滤不掉相关值情况&#xff0c;具体情况如下 原始数据&#xff1a; CREATE TABLE test (id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,subject_id bigint(11) NOT NULL DEFAULT 0 COMMENT 主题id,subject_nam…

从零实现label-studio和SAM进行半自动标注以及踩坑日志

这里写目录标题 引言什么是半自动标注conda环境创建与启动playground下载pytorch下载&#xff08;Linux服务端和Win10客户端&#xff09;SAM安装和预训练权重添加SAM相关库安装问题1 安装 Label-Studio 和 label-studio-ml-backend问题2&#xff1a;TypeError: numpy._DTypeMet…

嵌入式软件开发常用工具有哪些?

分享一些嵌入式软件开发常用工具。 1、Keil MDK&#xff1a;这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具&#xff0c;它提供了包括C编译器、宏汇编、连接器、库管理器、仿真器等在内的完整开发方案。Keil还提供了丰富的中间件和库函数&…

Verilog 之 initial 模块与always 模块的用法与差异

文章目录 initial语法和用法特点和注意事项用途 always语法和用法特点和注意事项用途 二者差异 initial 在 Verilog 中&#xff0c;initial 块是用来在模拟开始时执行一次性初始化操作的一种建模方式。它通常用于模拟初始条件或进行一次性的初始化设置&#xff0c;而且只会在模…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言&#xff1a; 从这一篇开始&#xff0c;我们将正式进入使用LINUX进行写程序和开发的阶段&#xff0c;可以说&#xff0c;由此开始&#xff0c;我们才开始真正去使用LINUX。 介绍工具&#xff1a; 1.LINUX软件包管理器yum&#xff1a; 1.yum的介绍&#xff1a; 在LINUX…

Sublime Text Mac/Win中文版:代码编辑器的卓越典范

你是否曾为寻找一个功能强大且易于使用的代码编辑器而感到困扰&#xff1f;现在&#xff0c;我要向你介绍一个解决方案——Sublime Text。这款代码编辑器以其高效、灵活和直观的特点&#xff0c;赢得了开发人员的广泛喜爱。让我们深入了解一下Sublime Text的优点。 一、强大的…

易点易动固定资产管理系统:实现全生命周期闭环式管理和快速盘点

固定资产管理对于企业来说至关重要&#xff0c;它涉及到资产的采购、领用、使用、维护和报废等各个环节。然而&#xff0c;传统的固定资产管理方式往往繁琐、耗时&#xff0c;容易导致信息不准确和资源浪费。为了解决这些问题&#xff0c;我们引入易点易动固定资产管理系统&…

【Git企业开发】第六节.配置 Git和标签管理

文章目录 前言一、配置 Git 1.1 忽略特殊文件 1.2 给命令配置别名二、标签管理 2.1 理解标签 2.2 创建标签 2.3 操作标签 总结 前言 一、配置 Git 1.1 忽略特殊文件 在日常开发中&#xff0c;我们有些文件不想或者不应该提交到远端&#xff0c;…

第四章Web服务器(2)

第四章Web服务器(2) 1.基于https协议的静态网站 1.1.概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#…
最新文章