Search CTRL + K

指标

OpenTelemetry 中,指标 是服务运行时捕获的数值。某一时刻的数值也叫指标事件(metric event),包含数值本身、时间和一些元信息。

指标仪器

指标仪器(metric instrument) 是代码中某一指标的捕获器,一个 指标仪器 包含 [1]

指标类型

OpenTelemetry 定义了六种指标类型 [1:1]

同步仪器 需要在操作进行时主动调用:

异步仪器 需要提供回调函数,在特定条件下被调用,因此也无法和操作上下文关联:

他们的对比汇总:

类型 传递值方式 单调 可求和 调用方式 例子
Counter delta/cumulative Yes Yes Add() 请求数量;请求大小
Asynchronous Counter delta/cumulative Yes Yes Callback CPU 时间
UpDownCounter cumulative No No Add() 连接数量
Asynchronous UpDownCounter cumulative No No Add() 内存使用大小
Histogram delta/cumulative No N/A Record() 请求耗时; 请求大小
Asynchronous Gauge cumulative No No Callback 内存利用率

对于 Counter、Asynchronous Counter 和 Histogram 类型,强烈建议使用 delta 指标而不是 cumulative[2],这样传输的数据更小,并且对于 ClickHouse 等非 prometheus 的后端存储而言,delta 类型可以有更多计算方式。

选择仪器

参考 uptrace[3]

  1. 需要直方图、热力图或者百分位数:Histogram
  2. 需要统计增量值
    • 如果是单调的:Counter
    • 否则:UpDownCounter
  3. 需要统计实际值
    • 数值可累加
      • 如果是单调的:Asynchronous Counter
      • 否则:Asynchronous UpDownCounter
    • 否则:Gauge

聚合

在 OTLP 协议中,指标会被聚合后传输,专门用于展示系统的统计信息。共有三种聚合类型 [4]

视图

视图 是 SDK 中重要能力,用于调整哪些仪器被处理、被忽略,以及调整 聚合 方式。

每个指标类型都有默认聚合类型:

指标类型 聚合类型
Counter Sum Aggregation
Asynchronous Counter Sum Aggregation
UpDownCounter Sum Aggregation
Asynchronous UpDownCounter Sum Aggregation
Histogram Explicit Bucket Histogram Aggregation
Asynchronous Gauge Last Value Aggregation

Metrics

A metric is a measurement of a service captured at runtime. The moment of capturing a measurements is known as a metric event, which consists not only of the measurement itself, but also the time at which it was captured and associated metadata.[5]


  1. https://opentelemetry.io/docs/concepts/signals/metrics/#metric-instruments ↩︎ ↩︎

  2. https://uptrace.dev/get/opentelemetry-go.html#already-using-otlp-exporter ↩︎

  3. https://uptrace.dev/opentelemetry/metrics.html#choosing-instruments ↩︎

  4. https://github.com/open-telemetry/opentelemetry-go/blob/4242228103c19cabc435a75b02d7aea82aa8bf36/sdk/metric/reader.go#L158 ↩︎

  5. https://opentelemetry.io/docs/concepts/signals/metrics/ ↩︎