热力直达:使用 Elasticsearch 插件将 ES|QL 引入你的 Grafana 仪表板

📅 2026/7/2 23:20:14
热力直达:使用 Elasticsearch 插件将 ES|QL 引入你的 Grafana 仪表板
作者来自 Elastic Cauê Marcondes现在你可以通过 Elasticsearch 插件在 Grafana 中编写 ES|QL 查询。了解如何启用该功能并直接在 Grafana 界面中编写基于管道pipe的查询。通过以下方式亲身体验 Elasticsearch深入探索 Elasticsearch Labs 仓库 中的示例 Notebooks开始 免费云试用或立即在你的 本地机器 上体验 Elastic。Elasticsearch 数据源是 Grafana 生态系统中最受欢迎的插件之一现在从 Grafana 13.0 开始它新增了对 ES|QL 的实验性支持。ES|QL 是 Elasticsearch 现代化的基于管道pipe的查询语言可用于查询日志、指标和追踪数据并支持将 Elasticsearch 作为原生的 Prometheus PromQL 数据源所有操作都可以直接在 Grafana 查询编辑器中完成。该集成由 Elastic 与 Grafana Labs 合作开发并贡献回 Grafana 开源项目。只需启用一个功能开关elasticsearchESQLQuery true即可启用基于 Monaco 编辑器的 ES|QL 查询体验支持语法高亮、自动补全和内联错误提示。本文将介绍如何启用该功能并编写你的第一个 ES|QL 查询用于日志分析、时间序列可视化以及指标聚合。背景Elasticsearch 一直是 Grafana UI 中使用最广泛的插件之一。此前Elasticsearch 插件仅支持 Lucene 和原始 Query DSL 查询。ES|QL 是 Elastic 推出的现代化管道式查询语言专为日志、指标和追踪数据分析而设计。相比 Query DSL 或 Lucene其直观的语法使过滤、聚合和数据转换更加简单。自 2024 年以来这一直是社区持续提出的需求详见grafana/grafana#81765。如何在 Grafana 中启用 ES|QL 支持该功能由elasticsearchESQLQuery功能开关控制。要启用它请将以下配置添加到你的grafana.ini[feature_toggles] elasticsearchESQLQuery true保存配置后重新启动 Grafana。该功能从 Grafana 13.0 开始提供。Grafana 查询编辑器中的 ES|QL启用该功能开关后Elasticsearch 查询编辑器将新增一个查询语言Query language选择器。你可以在同一个编辑器面板中在 Lucene、Raw DSL 和 ES|QL 之间自由切换。选择 ES|QL 后编辑器会切换为基于 Monaco 的代码编辑器——与 VS Code 使用的是同一个编辑器引擎。你将开箱即用地获得语法高亮、错误高亮以及基础自动补全功能。智能索引预填充Smart index pre-population让你能够快速开始如果数据源设置中配置了索引模式index pattern首次点击进入 ES|QL 编辑器时会自动插入FROM index。你可以自由修改或删除它。如果没有配置索引则FROM子句会保持为空。运行你的第一个查询按严重级别统计日志条目数量这是一个很好的入门查询可以用来确认 ES|QL 已正常工作同时帮助你熟悉其语法。FROM logs* | STATS count COUNT(*) BY log.level | SORT count DESC在Raw Data原始数据面板类型中运行它就可以看到按日志级别log level统计的表格结果。浏览最新错误Browse the latest errorsWHERE、KEEP、SORT和LIMIT让你可以轻松过滤出你真正关心的字段和行。FROM logs | WHERE log.level error | KEEP timestamp, host.name, service.name, message | SORT timestamp DESC | LIMIT 20日志随时间变化使用BUCKET将日志数量按小时区间分组。这与Metrics面板类型配合效果很好可以将其渲染为时间序列图。FROM logs* | STATS count COUNT(*) BY bucket BUCKET(timestamp, 1 hour) | SORT bucket ASC按日志活动统计的 Top hosts识别最活跃的 hosts 是一个常见的运维任务。使用 STATS 搭配 BY 和 LIMIT 可以让它更简洁。FROM logs* | STATS log_count COUNT(*) BY host.name | SORT log_count DESC | LIMIT 10TS 命令用于时间序列指标对于 时间序列数据流Time Series Data StreamsTSDS 中的指标数据ES|QL 的TS源命令可以实现指标分析与时间序列聚合。示例RATE()随时间变化的速率AVG_OVER_TIME()在滑动窗口内的平均值INCREASE()某个时间段内的总增长量DELTA()首尾值之间的差值LAST_OVER_TIME()窗口内的最新值其模式遵循两层聚合先对单个时间序列应用内部函数再对结果进行外部聚合例如按 host 或 service 分组。TS metrics* | STATS SUM(RATE(metrics.system.cpu.time)) BY TBUCKET(10 m)你也可以使用 AVG_OVER_TIME()来计算一个 metric 在 sliding window 上的平均值然后按 host 和 10-minute buckets 对结果进行拆分TS metrics* | STATS MAX(AVG_OVER_TIME(metrics.system.memory.utilization)) BY host.name,TBUCKET(10m)TS也会通过 ES|QL 向量化计算引擎执行查询。内部基准测试显示相比在 TSDS 支持的数据上执行等价 Query DSL 查询性能提升可达一个数量级或更高。参考TS 命令文档时间序列聚合函数内联错误信息ES|QL 查询通过 Elasticsearch 的 /_query HTTP 端点 执行。如果你的查询存在语法错误或引用了不存在的字段Elasticsearch 会返回结构化错误响应。插件会将其直接展示为查询编辑器中的内联提示让你在 Grafana UI 中就能清楚看到问题所在。在上面的示例中host.nam少了最后的e。Elasticsearch 会将其识别为校验异常verification exception并返回无法解析的字段名称。该错误信息会以内联方式显示在查询编辑器中就在查询下方。技术细节在底层实现中该插件将 ES|QL 和其他查询类型分成不同的处理路径。ES|QL 查询会发送到/_query端点并使用Content-Type: application/json。Lucene 和 Query DSL 查询仍然使用/_msearch并采用Content-Type: application/x-ndjson。这种拆分是有意设计的/_query返回的是不同结构的响应插件会独立解析该响应然后再将数据传递给 Grafana 的面板。试用一下这也意味着现在是一个很好的时机去尝试并提供反馈。上游 PRupstream PR以及原始跟踪 issueoriginal tracking issue都是公开的。如果你遇到问题或有需求都可以在这些地方留言。下一步在你的 Grafana 13.0 实例中通过elasticsearchESQLQuery true启用该功能在你自己的索引上尝试上面的示例查询对于指标数据可以在 Elasticsearch 9.2 或 Serverless 数据源上尝试 ES|QL 的TS命令阅读完整的 ES|QL 概览 以探索该语言的更多能力如果你还没有使用 Elasticsearch可以在 Elastic Cloud 上启动免费试用。原文Piping Hot: Bringing ES|QL to Your Grafana Dashboards Using the Elasticsearch Plugin - Elasticsearch Labs