OpenTelemetry
https://gyazo.com/5b1b2888088bb547de70c0507607e0fc
もともと似たようなのが2ついたが、2019年にOpenTelemetryになった
主要概念GPT-4.icon
API
アプリケーションコードが観測情報を生成するためのインターフェース。
特徴:
ベンダー中立で、共通の記述方法を提供。
計測コードの移植性が高くなる。
例:
tracer.startSpan("operation-name")
meter.createCounter("request_count")
重要性: ユーザーコードに直接使われるため、軽量で安定している必要がある。
SDK
概要: APIを通じて記述された計測を実際に処理・出力するための実装。
役割:
計測データの収集、サンプリング、バッファリング、エクスポート。
構成要素:
TracerProvider、MeterProvider、Exporter など。
ポイント: APIと分離することで、アプリ側はSDKを差し替えてもコード変更が不要。
分散トレーシングの中核
SDK内のコンポーネント
主な用途:
処理の開始・終了(Spanの生成と終了)。
Spanに属性を追加(例: HTTPメソッド、エラー情報)。
例:
code:ts
const tracer = opentelemetry.trace.getTracer("my-service");
const span = tracer.startSpan("doSomething");
// ... 処理 ...
span.end();
メトリクス観測の中心。カウンターやゲージなどのインストルメントを提供。
用途:
リクエスト数、エラー数、レイテンシなどの定量的情報を測定。
例:
code:ts
const meter = opentelemetry.metrics.getMeter("my-service");
const requestCounter = meter.createCounter("request_count");
requestCounter.add(1);
Spanの親子関係やTrace IDなどのコンテキスト情報を処理間で伝播する仕組み。 用途:
サービス間の呼び出しでトレースをつなげる。
HTTPヘッダ、gRPCメタデータなどを介して情報を引き継ぐ。
関連API:
context.with(...), context.active(), propagation.inject(), propagation.extract()
計測データを外部のバックエンド(例: Jaeger, Prometheus, OTLPなど)に送る役割
種類:
TraceExporter
MetricsExporter
LogsExporter(開発中/実装中)
例:
OTLP exporter を使ってCollectorに送信
ConsoleExporter(デバッグ用)
OpenTelemetry公式のデータ集約・転送コンポーネント。
役割:
アプリケーションからのデータ(OTLPなど)を受信 バッチ処理やフィルタリング、変換、他システム(Datadog、Prometheusなど)への転送
利点:
アプリケーションにExporterを直接埋め込まずに済む(ベンダーロック回避)
セキュリティやパフォーマンス、運用面でもメリット
rust