指标

在运行时捕获的度量。

指标是服务在运行时捕获的度量。捕获度量的时刻称为指标事件,它不仅包含度量本身,还包含捕获的时间以及相关的元数据。

应用程序和请求指标是可用性和性能的重要指标。自定义指标可以提供有关可用性指标如何影响用户体验或业务的见解。收集的数据可用于发出停机通知,或在需求高时自动触发调度决策以扩展部署。

为了理解 OpenTelemetry 中的指标如何工作,让我们看一下将在代码检测中发挥作用的组件列表。

Meter Provider (度量提供程序)

Meter Provider(有时称为 MeterProvider)是 Meter 的工厂。在大多数应用程序中,Meter Provider 只初始化一次,其生命周期与应用程序的生命周期相匹配。Meter Provider 的初始化还包括 Resource 和 Exporter 的初始化。这通常是使用 OpenTelemetry 进行度量统计的第一步。在某些语言 SDK 中,一个全局的 Meter Provider 已经为您初始化好了。

Meter

Meter 创建 metric instruments(指标仪器),在运行时捕获关于服务的度量。Meter 是从 Meter Providers 创建的。

Metric Exporter (指标导出器)

Metric Exporter 将指标数据发送给消费者。这个消费者可以是用于开发期间调试的标准输出、OpenTelemetry Collector,或者您选择的任何开源或供应商后端。

Metric Instruments (指标仪器)

在 OpenTelemetry 中,度量是通过指标仪器捕获的。指标仪器由以下几部分定义:

  • 名称
  • Kind (类型)
  • Unit (单位) (可选)
  • Description (描述) (可选)

名称、单位和描述由开发人员选择,或通过 语义约定 为常见的指标(如请求和进程指标)定义。

仪器类型是以下之一:

  • Counter (计数器):一个随时间累积的值——你可以将其视为汽车的里程表;它只会增加。
  • Asynchronous Counter (异步计数器):与 Counter 相同,但每次导出收集一次。如果无法访问连续的增量,而只能访问聚合值,则可以使用此类型。
  • UpDownCounter (增减计数器):一个随时间累积的值,但也可以下降。一个例子是队列长度,它会随着队列中工作项的数量而增加和减少。
  • Asynchronous UpDownCounter (异步增减计数器):与 UpDownCounter 相同,但每次导出收集一次。如果无法访问连续的变化,而只能访问聚合值(例如,当前队列大小),则可以使用此类型。
  • Gauge (仪表盘):测量读取时当前的值。一个例子是汽车中的燃油表。Gauge 是同步的。
  • Asynchronous Gauge (异步仪表盘):与 Gauge 相同,但每次导出收集一次。如果无法访问连续的变化,而只能访问聚合值,则可以使用此类型。
  • Histogram (直方图):客户端对值的聚合,例如请求延迟。如果你对值统计感兴趣,直方图是一个不错的选择。例如:有多少请求花费的时间少于 1 秒?

有关同步和异步仪器以及哪种类型最适合您的用例的更多信息,请参阅 Supplementary Guidelines (补充指南)

聚合

除了指标仪器,聚合的概念也很重要。聚合是一种技术,其中大量度量被合并为在某个时间窗口内发生的指标事件的精确或估计统计信息。OTLP 协议传输此类聚合指标。OpenTelemetry API 为每种仪器提供默认聚合,可以使用 Views 进行覆盖。OpenTelemetry 项目旨在提供被可视化工具和遥测后端支持的默认聚合。

与旨在捕获请求生命周期并为请求的各个部分提供上下文的 请求跟踪 不同,指标旨在提供聚合的统计信息。指标的一些用例示例包括:

  • 报告服务按协议类型读取的总字节数。
  • 报告读取的总字节数以及每请求的字节数。
  • 报告系统调用的持续时间。
  • 报告请求大小以确定趋势。
  • 报告进程的 CPU 或内存使用情况。
  • 报告账户的平均余额值。
  • 报告当前正在处理的活动请求。

Views (视图)

View 为 SDK 用户提供了自定义 SDK 生成的指标输出的灵活性。您可以自定义要处理或忽略的指标仪器。您还可以自定义聚合以及要在指标上报告的属性。

Language Support (语言支持)

指标是 OpenTelemetry 规范中一项 稳定的信号。对于 Metrics API 和 SDK 的各个语言实现,状态如下:

语言指标
C++稳定
C#/.NET稳定
Erlang/Elixir开发
Go稳定
Java稳定
JavaScript稳定
PHP稳定
Python稳定
Ruby开发
RustBeta
Swift开发

规范

要了解更多关于 OpenTelemetry 指标的信息,请参阅 metrics specification (指标规范)


最后修改于 2025 年 7 月 15 日:修复拼写错误 (#7318) (34f672f4)