OpenTelemetry 指标

概述

设计目标

鉴于目前存在许多成熟的指标解决方案,了解 OpenTelemetry 指标工作的目标非常重要。

  • 能够将指标与其他信号连接。例如,指标和跟踪可以通过 示例 进行关联,并且指标属性可以通过 BaggageContext 进行丰富。此外,Resource 可以以一致的方式应用于 日志/指标/跟踪

  • OpenCensus 用户提供迁移到 OpenTelemetry 的路径。这是 OpenTelemetry 的初衷——融合 OpenCensus 和 OpenTracing。我们将侧重于提供语义和功能,而不是一对一地映射 API。

  • 与现有的指标检测协议和标准协同工作。以下是最低目标集:

    • Prometheus 提供全面支持——用户应该能够使用 OpenTelemetry 客户端和 Collector 来收集和导出指标,并实现与原生 Prometheus 客户端相同的功能。
    • 通过 OpenTelemetry Collector 收集 StatsD 指标的能力。

概念

API

OpenTelemetry 指标 API(下称“API”)服务于两个目的:

  • 高效且同时地捕获原始测量值。
  • 将检测与 SDK 分离,允许在应用程序中指定/包含 SDK。

当应用程序中没有显式包含/启用 SDK 时,将不会收集任何遥测数据。有关更多信息,请参阅整体 OpenTelemetry API 概念和 API 和最小实现

SDK

OpenTelemetry 指标 SDK(下称“SDK”)实现了 API,提供了配置、聚合、处理器和导出器等功能和可扩展性。

OpenTelemetry 要求 API 与 SDK 分离,以便在运行时配置不同的 SDK。有关更多信息,请参阅整体 OpenTelemetry SDK 概念。

编程模型

+------------------+
| MeterProvider    |                 +-----------------+             +--------------+
|   Meter A        | Measurements... |                 | Metrics...  |              |
|     Instrument X +-----------------> In-memory state +-------------> MetricReader |
|     Instrument Y |                 |                 |             |              |
|   Meter B        |                 +-----------------+             +--------------+
|     Instrument Z |
|     ...          |                 +-----------------+             +--------------+
|     ...          | Measurements... |                 | Metrics...  |              |
|     ...          +-----------------> In-memory state +-------------> MetricReader |
|     ...          |                 |                 |             |              |
|     ...          |                 +-----------------+             +--------------+
+------------------+

Specifications

参考

  • 指标 API/SDK 原型设计的场景(OTEP 146