首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ES|QL 引入 SPARKLINE 函数:一眼洞察趋势

ES|QL 引入 SPARKLINE 函数:一眼洞察趋势

原创
作者头像
点火三周
发布2026-09-07 21:25:06
发布2026-09-07 21:25:06
510
举报

当你运行一个 STATS ... BY 查询并得到几十或几百个结果(日志模式、主机、服务、状态码)时,单纯的数量统计并不能告诉你随时间变化的趋势。错误计数或日志模式是在上升还是趋于稳定?是否在正常范围内?目前,要回答这些问题,你需要单独构建一个时间序列可视化,或者对着数字瞪眼期盼最佳结果。

这需要大量的精力、时间和上下文切换,而本应只是看一眼的事情。在这篇博客中,我们将解释 Elasticsearch 查询语言(ES|QL)的 SPARKLINE 函数如何工作、有什么作用,以及如何开始使用。

工作原理

SPARKLINE 是一个 ES|QL 聚合函数,其签名非常直观:

SPARKLINE(aggregation, key, buckets, from, to)

  • **aggregation** 计算 y 轴值的表达式,支持任何聚合函数:COUNT(*)SUM(bytes)AVG(latency) 等。
  • **key** 用于推导桶的日期表达式。
  • **buckets** 目标桶数量。
  • **from** / **to** 时间范围边界。(在 Kibana 中,它们通过查询参数绑定到时间选择器。)

在内部,SPARKLINE 将时间范围分桶,计算每个桶的聚合值,并将结果打包成一个有序数组。空桶将填充为零,这样每个分组共享相同的 x 轴网格,便于快速、直观地进行视觉比较。

该函数自然地与 STATS ... BY 组合,因此你可以将其与任何分组结合使用。

闪光的应用场景

SPARKLINE 的第一个亮相场景是 Discover 的日志模式分析,从 9.5 版本开始。当你运行一个 CATEGORIZE 查询时,Discover 在后台构建 SPARKLINE 查询,并在每个模式旁边渲染趋势线。你无需手动编写 SPARKLINE;当你在 ES|QL 编辑器中使用“识别模式”选项时,Discover 会自动处理。结果是立竿见影的:你扫描数十个日志模式,立刻就能看出哪些模式正在激增,哪些全天保持平稳。

仪表盘显示了一个每小时事件计数的条形图,上方是结果表格。图表展示了几天内的活动,表格每行包含计数值、走势图和模式标签。
仪表盘显示了一个每小时事件计数的条形图,上方是结果表格。图表展示了几天内的活动,表格每行包含计数值、走势图和模式标签。

以下是后台运行的查询:

代码语言:sql
复制
FROM app-logs-*| WHERE @timestamp <= ?_tend AND @timestamp > ?_tstart| STATS count = COUNT(*), sparkline = SPARKLINE(COUNT(*), @timestamp, 50, ?_tstart, ?_tend) BY pattern = CATEGORIZE(message)| SORT count DESC

想象一个平台团队正在研究如何降低日志成本。他们将 Discover 指向数千万个文档,让 CATEGORIZE 将它们聚类成模式。两个模式脱颖而出:冗长的生命周期消息,例如“fetching resource...”和“completed resource...”,每个都有数百万次命中。这些行旁边的走势图揭示了剩余的故事:平稳、持续不断的流,全天运行。不是由事件驱动,没有突发性,只是持续的噪音,悄悄消耗着数百 TB 的存储空间。

仪表盘显示了一个每小时结果计数的条形图,上方是结果表格。图表展示了几天内的持续活动,表格每行包含计数值、走势图和模式标签。
仪表盘显示了一个每小时结果计数的条形图,上方是结果表格。图表展示了几天内的持续活动,表格每行包含计数值、走势图和模式标签。

这类情况的修复通常很简单:调整日志级别、在采集时丢弃该模式,或将其路由到更便宜的存储层。难点一直在于“发现”它。借助日志模式分析和 ES|QL 中的内联走势图,这一发现过程从数小时缩短到数秒。

Elastic 内部站点可靠性工程(SRE)团队经常成功使用日志模式分析,并充分利用了 ES|QL 的每项增强功能。

这些只是一些具体示例。按区域拆分请求计数,查看哪些区域呈上升趋势。比较各容器 ID 的延迟。按消费者组监控队列深度。用途无穷无尽。

设计简洁

我们刻意让 SPARKLINE 保持专注:

  • 它是一个聚合函数,而不是一个新命令。它与现有的 STATS ... BY 语法组合,因此在结构上无需学习新东西。
  • 它返回数据,由消费者在上下文中渲染。 该函数生成一个值数组。这些值如何渲染(在 Discover 中作为迷你图表、在笔记本中作为折线图、或在 API 响应中作为 JSON 数组)取决于消费者。
  • 它填充空桶。 每个分组获得相同数量的值,并对齐到相同的时间网格。这是一个刻意的选择:当你能一目了然地比较各行形状时,走势图最有用,而这需要一致的对齐。

模式始终如一:一次查询,多条趋势线,即时视觉分类。

未来规划

SPARKLINE 在 Elasticsearch 9.5 中作为技术预览功能发布。未来的工作包括在更多 ES|QL 界面中渲染走势图,除了最初在 Kibana 中与 CATEGORIZE 上下文的集成之外,还包括仪表板以及 Elastic Observability 的以下用例:

在应用性能监控(APM)工作流中,工程师通常分析速率、错误和持续时间(RED)指标来了解服务健康状况。挑战在于聚合数字会隐藏维度上的异常值。一个服务可能整体看起来健康,但某个区域、某个容器或某个新部署的版本可能正在悄悄恶化。

目前,Elastic APM UI 允许你按事务名称分解指标,但根本原因分析需要按任意维度进行切片:可用区、服务版本、容器 ID、云区域。SPARKLINE 可以使这一过程变得实用。按 service.version 分解错误率,立即就能看到哪个版本的走势线偏离了群体。

开始使用

SPARKLINE 在 Elasticsearch 9.5 中作为技术预览功能提供。你可以通过 ES|QL _query API 或在 Kibana 的 Discover 中试用。查看 SPARKLINE 函数参考 获取完整语法和受支持的类型。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 工作原理
  • 闪光的应用场景
  • 设计简洁
  • 未来规划
  • 开始使用
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档