OpenTelemetry による取り込みサンプリング

概要

アプリケーションやサービスが OpenTelemetry のライブラリでインスツルメンテーションされている場合、次のことが可能です。

1 つ目と 2 つ目のシナリオでは、Datadog エクスプローラーで APM RED メトリクス (サービス、演算子、リソースごとのリクエスト/エラー回数とレイテンシー分布) が計算されます。3 つ目のケースでは、Datadog Agent がこれらのメトリクスを計算します。

Otel APM メトリクス計算

APM メトリクスと分散型トレーシングは、どちらもアプリケーションのパフォーマンスをモニターするのに便利なツールです。メトリクスは特定のリソースのレイテンシーやエラー率の上昇を発見するのに役立ち、分散型トレーシングは個々のリクエストレベルまで掘り下げることができます。

サンプリングが役立つ理由

Datadog トレーシングライブラリ、Datadog Agent、OpenTelemetry SDK、OpenTelemetry コレクターは全てサンプリング機能を備えています。なぜなら、ほとんどのサービスでは、アプリケーションの健全性を可視化するために、100% のトレースを取り込む必要はないためです。

Datadog にトレースを送信する前にサンプリングレートを構成することで、以下のことが可能になります。

  • ビジネスと観測可能性の目標に最も関連性の高いデータを取り込みます。
  • 未使用のトレースデータを Datadog プラットフォームに送信しないようにすることで、ネットワークコストを削減します。
  • 全体のコストをコントロールし、管理します。

取り込み量を減らす

OpenTelemetry では、OpenTelemetry ライブラリと OpenTelemetry コレクターの両方でサンプリングの構成が可能です。

  • OpenTelemetry SDK のヘッドベースサンプリング
  • OpenTelemetry コレクターでの追跡ベースサンプリング
Otel APM メトリクス計算

SDK レベルのサンプリング

SDK レベルでは、_ヘッドベースサンプリング_を実装することができ、これはサンプリングの決定がトレースの開始時に行われる場合です。このタイプのサンプリングは、高スループットのアプリケーションで、アプリケーションの健全性を監視するためにトラフィックの 100% を可視化する必要がないことが分かっている場合に特に有用です。また、OpenTelemetry がもたらすオーバーヘッドを抑制するのにも有効です。

TraceIdRatioBasedParentBased は、SDK レベルで trace_id に基づく決定論的なヘッドベースサンプリングを実装することができる SDK の組み込みサンプラーです。

ヘッドベースサンプリングでは、サンプリングされたトラフィックのみが OpenTelemetry コレクターまたは Datadog Agent に送信され、そこでメトリクスの計算が行われるため、APM メトリクスはサンプリングされたトラフィックで計算されます。

正確な統計情報を得るためには、SDK で構成されたサンプリングレートを知っていれば、Datadog のダッシュボードやモニターで計算式と関数を使ってメトリクスをアップスケールすることが可能です。

スパンからのトレース分析モニターとメトリクスにトレースサンプリングを設定することの意味については、取り込み量制御ガイドを参照してください。

コレクターレベルのサンプリング

OpenTelemetry コレクターレベルでは、_追跡ベースサンプリング_を行うことができ、より高度なルールを定義して、エラーや高レイテンシーのトレースに対する可視性を維持することができます。

Tail Sampling ProcessorProbabilistic Sampling Processor は、コレクターレベルで一連のルールに基づいてトレースをサンプリングすることが可能です。

: 追跡サンプリングの主な制限は、効果的なサンプリング決定のために、与えられたトレースのすべてのスパンが同じコレクターインスタンスによって受信されなければならないということです。トレースが複数のコレクターインスタンスに分散している場合、トレースの一部がドロップされ、同じトレースの他の一部が Datadog に送信される危険性があります。

コレクターレベルのテールベースサンプリングを使用しながら、APM メトリクスがアプリケーションのトラフィックの 100% に基づいて計算されるようにするには、Datadog Connector を使用します。

Datadog Connector は v0.83.0 から利用可能です。古いバージョンから移行する場合は、OpenTelemetry APM メトリクスのために Datadog Processor から Datadog Connector に切り替えるをお読みください。

スパンからのトレース分析モニターとメトリクスにトレースサンプリングを設定することの意味については、取り込み量制御ガイドを参照してください。

Datadog Agent によるサンプリング

Datadog Agent OTLP Ingest を使用する場合、Agent バージョン 7.44.0 から確率的サンプラーが利用できます。環境変数 DD_OTLP_CONFIG_TRACES_PROBABILISTIC_SAMPLER_SAMPLING_PERCENTAGE を使用して設定するか、Agent のコンフィグレーションファイルで以下の YAML を設定します。

otlp_config:
  # ...
  traces:
    probabilistic_sampler:
      sampling_percentage: 50

上記の例では、50% のトレースがキャプチャされます。

: 確率的サンプラーのプロパティは、すべての Agent で同じサンプリング率を使用すると仮定した場合、完全なトレースのみが取り込まれることを保証します。

確率的サンプラーは、SDK レベルでサンプリング優先度がすでに設定されているスパンを無視します。さらに、確率的サンプラーでキャプチャされなかったスパンは、Datadog Agent のエラーサンプラーと希少サンプラーでキャプチャされる可能性があり、取り込みデータセットにおいてエラーと稀少エンドポイントトレースの高い反映を確保することができます。

Datadog UI から取り込み量を監視する

APM 推定使用量ダッシュボードと推定使用量メトリクス datadog.estimated_usage.apm.ingested_bytes を活用すると、特定の期間の取り込み量を視覚化することができます。ダッシュボードで特定の環境とサービスをフィルターして、取り込み量の最大のシェアを占めるサービスを確認できます。

その他の参考資料