OpenTelemetryのメトリクス
この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/otel/metrics/
翻訳元: open-telemetry/opentelemetry-specification v1.60.0(コミット 29ae8c7)
概要
設計目標
今日、多くの確立されたメトリクスソリューションが存在することを踏まえると、OpenTelemetryのメトリクスへの取り組みの目標を理解することが重要です。
メトリクスを他のシグナルへ結び付けられるようにすること。例えば、メトリクスとトレースはエグゼンプラーを介して関連付けられ、メトリクスの属性はバゲージやコンテキストによってエンリッチされます。さらに、リソースは、ログ、メトリクス、トレースに一貫した形で適用できます。
OpenCensusのユーザーがOpenTelemetryへ移行するための道筋を提供すること。これはOpenTelemetryの元々の目標であり、OpenCensusとOpenTracingを収束させることでした。私たちは、APIの1対1のマッピングを行うのではなく、セマンティクスと能力を提供することに焦点を当てます。
既存のメトリクス計装プロトコルや標準と連携すること。ここでは最低限の目標を挙げます。
- Prometheusを完全にサポートすること。ユーザーはOpenTelemetryのクライアントとCollectorを使って、Prometheusネイティブのクライアントと同じ機能を実現しつつ、メトリクスを収集・エクスポートできるべきです。
- OpenTelemetry Collectorを使ってStatsDのメトリクスを収集できるようにすること。
概念
API
OpenTelemetry Metrics API(以下「API」)は2つの目的を果たします。
- 生の測定値を効率的かつ同時に捕捉すること。
- 計装をSDKから分離し、アプリケーションでSDKを指定・組み込めるようにすること。
アプリケーションに明示的なSDKが組み込まれていない、あるいは有効化されていない場合、テレメトリーデータは収集されません。詳細は、全体的なOpenTelemetry APIの概念と、APIと最小限の実装を参照してください。
SDK
OpenTelemetry Metrics 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 |
| ... | | | | |
| ... | +-----------------+ +--------------+
+------------------+
仕様
参考文献
- メトリクスAPI/SDKプロトタイピングのシナリオ(OTEP 146)