作者:来自 Elastic Vinay Chandrasekhar
对 ES|QL 和基于 Discover 的指标探索的最新增强,为快速高效的指标分析释放了一套强大的工具。
指标在识别 “是什么” 方面至关重要
作为可观测性的核心支柱,指标提供了一个高度结构化、量化的系统性能与健康状况视图。它们提供了关键的症状性视角 —— 揭示正在发生的事情,例如应用程序延迟过高、服务错误增加或容器 CPU 使用率激增,这对于启动告警和分诊工作至关重要。这种有效监控、告警和分诊的能力,对于确保稳定的服务交付和实现成功的业务成果至关重要。
Elastic Observability 为指标数据提供了全面的端到端体验。Elastic 确保可以从众多来源收集指标数据,根据需要进行丰富化,并传输到 Elastic Stack。Elastic 通过 TSDS 索引模式(Time Series Data Stream)高效地存储这些时间序列数据,包括高基数指标,该模式在早期版本中引入,并广泛用于 Elastic 的时间序列集成中。这个基础通过开箱即用的仪表板、告警、SLO 和简化的数据管理,确保了全面的可观测性。
Elastic Observability 9.2 通过强大的查询语言扩展和扩展的 UI 功能,增强了指标探索与分析。这些增强旨在让基于 TSDS 数据的分析(通过计数器速率和常见的时间聚合)比以往更简单、更快速。
主要的指标增强围绕以下关键功能展开,并以技术预览(Tech Preview)的形式提供:
-
使用 TSDS 和 ES|QL 的指标分析
-
在 Discover 中的交互式指标探索
-
用于指标的 OTLP 端点
使用 TSDS 和 ES|QL 进行指标分析
在 TSDS 指标上引入新的 ES|QL(Elasticsearch Query Language)中 TS 源命令,大大简化了时间序列分析。
TS 命令专为时间序列索引而设计,与通用的 FROM 命令不同。它的核心优势在于能在 STATS 命令中启用一套专用的时间序列聚合函数。
这种机制采用了标准的双层聚合范式,是时间序列查询的常见模式。这类查询涉及两个聚合函数:
-
内部(时间序列)函数:隐式地对每个时间序列进行计算,通常基于分桶的时间间隔。
-
外部(常规)函数:用于聚合内部函数的结果。例如:
`STATS SUM(RATE(search_requests)) BY TBUCKET(1 hour), host` AI写代码这里
RATE()是应用在每个时间序列的每小时桶上的内部函数,而SUM()是外部函数,用于对每个主机及每小时桶的速率进行求和。
如果一个使用 TS 命令的 ES|QL 查询没有显式指定内部(时间序列)聚合函数,系统会隐式地使用 LAST_OVER_TIME()。
例如:
`TS metrics | STATS AVG(memory_usage)` AI写代码
等价于
`TS metrics | STATS AVG(LAST_OVER_TIME(memory_usage))` AI写代码
在 ES|QL 中通过 TS 命令可用的关键时间序列聚合函数
这些函数可对时间序列数据进行强大的分析:
| 函数 | 描述 | 示例用例 |
|---|---|---|
| RATE() / IRATE() | 计算计数器每秒平均增长率(RATE),考虑计数器重置等非单调中断,或仅计算最后两个数据点间的每秒增长率(IRATE),以实现高响应性。 | 计算每秒请求数(RPS)或吞吐量。 |
| AVG_OVER_TIME() | 计算指定时间范围内数值字段的平均值。 | 确定一小时内的平均资源使用量。 |
| SUM_OVER_TIME() | 计算指定时间范围内字段的总和。 | 统计特定时间窗口内的错误总数。 |
| MAX_OVER_TIME() / MIN_OVER_TIME() | 计算字段在时间范围内的最大值或最小值。 | 识别峰值资源消耗。 |
| DELTA() / IDELTA() | 计算指标字段在时间窗口内的绝对变化(DELTA),或仅在最后两个数据点间的变化(IDELTA),IDELTA对最近变化更敏感。 | 跟踪系统指标(如缓冲区大小)的变化。 |
| INCREASE() | 计算计数器的绝对增长量。 | 分析快速变化计数器的即时速率变化。 |
| FIRST_OVER_TIME() / LAST_OVER_TIME() | 计算字段最早或最新记录的值(基于 @timestamp 字段)。 | 查看桶内指标的初始和最终状态。 |
| ABSENT_OVER_TIME() / PRESENT_OVER_TIME() | 计算字段在结果中在时间范围内的缺失或存在情况。 | 识别监控覆盖的空白。 |
| COUNT_OVER_TIME() / COUNT_DISTINCT_OVER_TIME() | 计算字段在时间范围内的总计数或不同值的计数。 | 测量频率或基数变化。 |
这些函数通过 TS 命令提供,使 SRE 和运维团队能够轻松执行速率计算及其他常用聚合,从而将高效的指标分析作为可观察性工作流的日常操作。而且速度更快!内部性能测试显示,TS 命令在查询指标数据时的性能比其他方法高一个数量级或更多,而且表现稳定!
Discover 中的交互式指标探索
9.2 版本引入了在 Discover 界面中直接交互式探索和分析指标的能力。除了探索和分析日志及原始事件外,Discover 现在提供了专门的指标探索环境:
-
轻松开始:只需查询通过 TS metrics-* 导入的指标即可开始探索。
-
网格视图和预应用聚合:该命令以网格格式展示所有指标,并根据指标类型立即应用适当聚合,例如速率或平均值。
-
搜索和分组:可快速按名称搜索特定指标,也可按维度(标签)或具体值分组分析指标,从而聚焦所选指标和维度进行目标分析。
-
快速访问详细信息:界面提供关键详情访问,包括查询与响应详情、底层 ES|QL 命令、指标字段类型及适用维度等。
-
轻松调整与仪表盘:系统会自动生成 ES|QL 查询,方便对数据进行调整和切片分析。分析完成后,指标及分析结果可以轻松添加到新的或现有的仪表盘中。
指标的 OTLP 端点
我们还推出了一个原生 OpenTelemetry Protocol (OTLP) 端点,用于将指标直接导入 Elasticsearch。该端点尤其对自建客户有利,并将集成到 Elastic Cloud 管理的 OTLP 端点中,用于 Elastic 托管产品。原生端点及相关更新提升了 OTel 指标的导入性能和可扩展性,通过 _otlp 方法吞吐量可提升至 60%,使用经典 _bulk 方法吞吐量可提升至 25%。
总结
通过将 ES|QL 新的时间序列聚合功能与熟悉的 Discover 交互体验结合,Elastic 9.2 提供了一套强大的指标分析工具。这些工具显著提升了任何可观察性工作流中的指标探索和分析阶段。而我们才刚刚开始释放 Elastic Observability 中指标的全部潜力!
欢迎今天就试用这些新功能!
还可以在 Observability Labs 了解我们如何为 AWS、Azure、GCP、Kubernetes 和 LLM 提供指标分析。