指标

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

应用程序和请求指标是可用性和性能的重要指标。自定义指标可以提供洞察力,了解可用性指标如何影响用户体验或业务。收集的数据可用于发出故障警报或在需求高峰时自动触发调度决策,以扩展部署规模。

为了理解OpenTelemetry中的指标工作方式,让我们看一下在对我们的代码进行工具化时将扮演角色的组件列表。

Meter Provider

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

Meter

Meter创建指标工具,在运行时捕获有关服务的度量。Meter是从Meter Provider创建的。

指标导出器

指标导出器将度量数据发送给消费者。这个消费者可以是用于调试和开发时的标准输出,也可以是OpenTelemetry收集器或您选择的任何开源或供应商后端。

指标工具

在OpenTelemetry中,度量是通过指标工具来捕获的。指标工具由以下信息定义:

  • 名称
  • 类别
  • 单位(可选)
  • 描述(可选)

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

指标工具的类别有以下几种:

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

聚合

除了度量工具之外,聚合的概念也是一个重要的概念。聚合是一种技术,通过将大量的测量结果合并为在时间窗口内发生的指标事件的精确或估计的统计信息。OTLP协议会传输此类聚合指标。OpenTelemetry API为每个工具提供了默认聚合方式,可以使用视图来覆盖它。OpenTelemetry项目旨在提供默认聚合方式,这些方式受可视化工具和遥测后端支持。

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

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

视图

视图为SDK用户提供了定制SDK的度量输出的灵活性。您可以定制要处理或忽略哪些指标工具。您还可以自定义聚合和要在指标上报的属性。

语言支持

指标是OpenTelemetry规范中的稳定信号。对于指标API和SDK的各个语言特定实现,情况如下:

Language Metrics
C++ Stable
C#/.NET Stable
Erlang/Elixir Experimental
Go Stable
Java Stable
JavaScript Stable
PHP Stable
Python Stable
Ruby Not yet implemented
Rust Alpha
Swift Experimental

规范

要了解有关OpenTelemetry中的指标的更多信息,请参阅指标规范

最后修改 December 10, 2023: translate (a4350d6e)