OpenTelemetry 指标
概述
设计目标
鉴于目前存在许多成熟的指标解决方案,了解 OpenTelemetry 指标工作的目标非常重要。
能够将指标与其他信号连接。例如,指标和跟踪可以通过 示例 进行关联,并且指标属性可以通过 Baggage 和 Context 进行丰富。此外,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)