OpenTelemetry Sum 指标完全攻略:两大核心支柱 📈

大家好!今天我们将深入探讨OpenTelemetry (OTel) 的核心指标类型之一:Sum。🕵️‍♂️ 许多人可能认为Sum仅仅是“计算总和的指标”,但您是否知道,有两个重要的属性决定了它的行为方式?

它们就是单调性 (Monotonicity) 和聚合时效性 (Aggregation Temporality)。只有理解了这两个支柱,才能准确地解释和利用Sum指标。那么,现在就让我们详细了解这两个概念吧!


🗺️ 全局视角:Sum 指标的两大支柱

首先理解决定Sum指标行为方式的两个核心要素至关重要。它们并非独立概念,而是相互结合,共同定义了Sum指标的最终特性。

  1. 单调性 (Monotonicity):这个值是只能增加,还是增加和减少都可以?
  2. 聚合时效性 (Aggregation Temporality):在报告(导出)指标时,是发送整体累积值,还是只发送最近的变化量?

这两个问题的答案组合,就是您将看到的Sum指标的形态。

The image you are requesting does not exist or is no longer available


1️⃣ 第一个支柱:单调性 (Monotonicity)

单调性是关于值变化方向的规则。

✅ Monotonic: true (单调递增)

这意味着值只能增加或保持不变,绝不会减少。就像汽车的总里程表一样,里程表不会倒退! 🚗

  • 特点:只添加零或正值。
  • 使用示例:
  • 累计API请求数
  • 服务启动后发生的总错误数
  • 传输的总数据字节数(bytes)
  • 相关OTel Instrument:Counter

↕️ Monotonic: false (非单调,可增可减)

这意味着值可以增加,也可以减少。就像房间里的人数一样,有人进来就增加,有人出去就减少。👨‍👩‍👧‍👦

  • 特点:可以添加正值或负值。
  • 使用示例:
  • 当前活跃连接数(连接时+1,断开时-1)
  • 消息队列中堆积的项数(发布时+1,消费时-1)
  • 内存使用量的变化
  • 相关OTel Instrument:UpDownCounter

2️⃣ 第二个支柱:聚合时效性 (Aggregation Temporality)

聚合时效性是一个非常重要的属性,它决定了收集到的指标值将以哪个时间点为基准进行报告。通常,此设置在最终数据导出的Exporter级别确定。

🧱 Cumulative (累积)

Cumulative,顾名思义,是报告从进程(应用程序)启动时到当前时刻的整体累积总和的方式。

  • 特点:每次报告时值不会重置,而是持续累积。(但是,如果Monotonic: false,值也可能减少。)
  • 为何使用?:像Prometheus这样的监控系统偏爱这种方式。在计算特定时间段内的变化率(rate)时,基于整体累积值进行计算对数据丢失(例如:采集失败)更具鲁棒性。如果只接收变化量,而中间漏掉一次采集,那么该时间段的数据将永远无法得知。
  • 报告方式示例(累积请求数):
// 假设每隔1分钟报告一次指标
// T=0: 服务启动

// T=1分钟: 发生100个请求
export({"http.server.requests": 100})

// T=2分钟: 额外发生150个请求
export({"http.server.requests": 250}) // 之前的100 + 新的150

// T=3分钟: 额外发生60个请求
export({"http.server.requests": 310}) // 之前的250 + 新的60

如您所见,该值始终表示整体累积总和。

💧 Delta (增量,变化量)

Delta是只报告自上次报告时间点以来的变化量(增加或减少)的方式。

  • 特点:一旦报告完成,内部聚合值将为下一次报告而重置。
  • 为何使用?:它与StatsD等重视“每时每刻的变化”的系统非常契合。此外,它也是OTLP (OpenTelemetry Protocol) 的默认值,为采集代理或后端提供了灵活处理数据的空间。
  • 报告方式示例(累积请求数):
// 假设每隔1分钟报告一次指标
// T=0: 服务启动

// T=1分钟: 发生100个请求
export({"http.server.requests": 100})

// T=2分钟: 额外发生150个请求
export({"http.server.requests": 150}) // 过去1分钟的变化量

// T=3分钟: 额外发生60个请求
export({"http.server.requests": 60}) // 接下来1分钟的变化量

与Cumulative不同,每次报告仅表示独立时间段内的值。


📊 一目了然的总结

特点 说明 相关Instrument 主要使用示例
Monotonicity 决定值是只增加(true),还是增减皆可(false)。 Counter (true) http.server.request.count (累计请求数)
UpDownCounter (false) system.processes.active (活跃进程数)
Aggregation Temporality 决定是报告进程启动后的整体累积值(Cumulative),还是只报告上次报告以来的变化量(Delta)。 (Exporter设置) Cumulative: Prometheus偏好 Delta: OTLP Exporter默认值

—

🚀 结论

现在,您应该已经清楚地认识到,OpenTelemetry的Sum指标并非简单的“总和”。通过Monotonicity定义数据的增减特性,并通过Aggregation Temporality决定如何报告这些数据。

理解这两个核心支柱,您就拥有了在任何监控环境中准确配置指标、清晰解释仪表盘图表的强大武器。现在,开始更深入地观察您的系统吧!


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注