取り込みのメカニズム

アプリケーションで生成されたスパンを Datadog に送信する (取り込む) かどうかは、複数のメカニズムによって決定されます。これらのメカニズムの背後にあるロジックは、トレーシングライブラリと Datadog Agent の中にあります。構成によっては、インスツルメントされたサービスによって生成されたトラフィックの全てまたは一部が取り込まれます。

取り込まれた各スパンには、このページで説明されているメカニズムのいずれかを参照する一意の取り込み理由が付加されています。使用量メトリクス datadog.estimated_usage.apm.ingested_bytesdatadog.estimated_usage.apm.ingested_spansingestion_reason によってタグ付けされています。

取り込み理由ダッシュボードを使って、それぞれの取り込み理由を確認することができます。各メカニズムに起因するボリュームの概要を把握し、どの構成オプションに焦点を当てるべきかを迅速に知ることができます。

ヘッドベースサンプリング

デフォルトのサンプリングメカニズムは_ヘッドベースサンプリング_と呼ばれています。トレースを維持するか削除するかの決定は、トレースの一番最初、ルートスパンの開始時に行われます。この決定は、HTTP リクエストヘッダーなどのリクエストコンテキストの一部として、他のサービスに伝搬されます。

この判断はトレースの最初に行われ、その後トレースのすべての部分に伝えられるため、トレースは全体として保持または削除されることが保証されます。

ヘッドベースサンプリングのサンプリングレートは、以下の 2 か所で設定できます。

  • Agent レベル (デフォルト)
  • トレースライブラリ**レベル: 任意のトレースライブラリのメカニズムが Agent の設定をオーバーライドします。

Agent で

ingestion_reason: auto

Datadog Agent は、トレーシングライブラリにサンプリングレートを継続的に送信し、トレースのルートで適用させます。Agent は、1 秒間に 10 個のトレースを目標にレートを調整し、トラフィックに応じて各サービスに分配します。

例えば、サービス AB よりもトラフィックが多い場合、Agent は A のサンプリングレートを変化させて、A が 1 秒間に 7 つ以上のトレースを保持しないようにし、同様に B のサンプリングレートを調整して B が 1 秒間に 3 つのトレース、合計 1 秒間に 10 個以上のトレースを保持しないようにします。

Agent のメインコンフィギュレーションファイル (datadog.yaml) または環境変数に、Agent の目標の 1 秒あたりのトレースを設定します。

@param max_traces_per_second - 整数 - オプション - デフォルト: 10
@env DD_APM_MAX_TPS - 整数 - オプション - デフォルト: 10

トレーシングライブラリ: ユーザー定義のルール

ingestion_reason: rule

ライブラリレベルでは、より具体的なサンプリング構成が可能です。

  • Agent のデフォルトメカニズムをオーバーライドし、すべてのルートサービスに適用する特定のサンプリングレートを設定します。
  • 特定のルートサービスのサンプリングレートを設定します。
  • 1 秒間に取り込まれるトレース数の上限を設定します。

: これらのルールは、ヘッドベースサンプリングメカニズムにも従っています。あるサービスのトラフィックが構成された最大トレース数/秒より大きい場合、トレースはルートでドロップされます。不完全なトレースを作成することはありません。

構成は、環境変数で設定するか、コードで直接設定することができます。

@env  DD_TRACE_SAMPLE_RATE - 整数 - オプションの null (デフォルトは Agent のデフォルトフィードバックループ)
@env DD_TRACE_SAMPLING_RULES - 整数 - オプションの null
@env  DD_TRACE_RATE_LIMIT - 整数 - オプションの 100 (Agent のデフォルトメカニズムを使用する場合、レートリミッターは無視されます)

以下の Python の例では、全トレースの 10% をサンプリングし、1 秒間に 100 トレースのレート制限をかけ、特定のサービスのサンプリングレートをオーバーライドしています。

# in dd-trace-py
tracer.configure(sampler=DatadogSampler(
    default_sample_rate=0.10, # トレースの 10% を保持
    rate_limit=100, #ただし、1 秒あたり最大 100 トレース
    rules=[
      # 「my-service」のサンプリングは 100% だが、全体のトレース数は 100/秒に制限されている
      SamplingRule(sample_rate=1.0, service=’my-service’),
    ],
)

取り込みの構成については、トレーシングライブラリのドキュメントを参照してください。

: ユーザー定義ルールで構成されたサービスは、Ingestion Control Page Configuration 列に Configured と表示されます。デフォルトのメカニズムを使用するように構成されたサービスは、Automatic と表示されます。

強制維持と削除

ingestion_reason: manual

ヘッドベースのサンプリングメカニズムは、トレーシングライブラリレベルでオーバーライドすることができます。例えば、クリティカルなトランザクションを監視する必要がある場合、関連するトレースを強制的に保持させることができます。一方、ヘルスチェックのような不要または反復的な情報については、トレースを強制的に削除することができます。

  • スパンに ManualKeep を設定して、そのスパンとすべての子スパンを取り込むように指示します。問題のスパンがトレースのルートスパンでない場合、結果のトレースは UI で不完全に表示されることがあります。
// dd-trace-go で
span.SetTag(ext.ManualKeep, true)
span.SetTag(ext.ManualDrop, true)

シングルスパン (App Analytics)

ingestion_reason: analytic

2020 年 10 月 20 日、App Analytics は Tracing without Limits に置き換わりました。これは、レガシーの App Analytics に関連する構成情報を持つ非推奨のメカニズムです。代わりに、新しい構成オプションのヘッドベースサンプリングを使用して、データ取り込みを完全に制御します。

特定のスパンをサンプリングする必要があるが、トレース全体を利用する必要がない場合、トレーサーでは、単一のスパンに対してサンプリングレートを構成することが可能です。このスパンは、包含するトレースが削除された場合でも、構成されたレートを下回ることなく取り込まれます。

トレーシングライブラリで

分析メカニズムを使用するには、環境変数またはコード内のいずれかで有効にします。また、すべての analytics_enabled スパンに適用されるサンプリングレートを定義します。

@env  DD_TRACE_ANALYTICS_ENABLED - ブール値 - オプションの false
// dd-trace-go で
// デフォルトで analytics_enabled を設定
tracerconfig.WithAnalytics(on bool)
// すべての analytics_enabled スパンに適用される生のサンプリングレートを設定
tracerconfig.SetAnalyticsRate(0.4)

任意のシングルスパンに analytics_enabled:true のタグを付けます。さらに、そのスパンに関連付けるサンプリングレートを指定します。

// dd-trace-go で
// スパン analytics_enabled を作成
span.SetTag(ext.AnalyticsEvent, true)
// 0.5 のレートでスパン analytics_enabled を作成
s := tracer.StartSpan("redis.cmd", AnalyticsRate(0.5))

Agent で

Agent では、追加のレートリミッターが 200 スパン/秒に設定されています。この制限に達した場合、一部のスパンは削除され、Datadog に転送されません。

Agent のメインコンフィギュレーションファイル (datadog.yaml) または環境変数でレートを設定します。

@param max_events_per_second - 整数 - オプションの 200
@env DD_APM_MAX_EPS - 整数 - オプションの 200

エラーとレアトレース

ヘッドベースサンプリングで捕捉できなかったトレースについては、Agent メカニズムにより、重要かつ多様なトレースが保持され、取り込まれるようにします。この 2 つのサンプラーは、あらかじめ決められたタグの組み合わせをすべてキャッチすることで、多様なトレースセットを保持します。

  • Error traces: サンプリングエラーは、システムの潜在的な不具合を可視化するために重要です。
  • Rare traces: レアトレースをサンプリングすることで、トラフィックの少ないサービスやリソースを確実に監視し、システム全体の可視性を維持することができます。

: ライブラリサンプリングルールを設定したサービスでは、エラーサンプリングとレアサンプリングは無視されます。

エラートレース

ingestion_reason: error

エラーサンプラーは、ヘッドベースのサンプリングでは捕捉できないエラースパンを含むトレースの断片を捕捉します。servicenameresourcehttp.statuserror.type のすべての組み合わせを捕捉するように 10 トレース/秒のレートを分散させます。

Agent バージョン 7.33 以降では、Agent のメインコンフィギュレーションファイル (datadog.yaml) または環境変数でエラーサンプラーを構成することが可能です。

@param errors_per_second - 整数 - オプション - デフォルト: 10
@env DD_APM_ERROR_TPS - 整数 - オプション - デフォルト: 10

: エラーサンプラーを無効にするには、このパラメーターを 0 に設定します。

レアトレース

ingestion_reason: rare

レアサンプラーは、レアスパンのセットを Datadog に送信します。レアサンプリングは、envservicenameresourceerror.typehttp.status の組み合わせをキャッチするために、分散レートにもなっています。レアトレースのデフォルトのサンプリングレートは、1 秒間に 5 個のトレースです。

Agent バージョン 7.33 以降では、Agent のメインコンフィギュレーションファイル (datadog.yaml) または環境変数でレアサンプラーを無効にすることが可能です。

@params apm_config.disable_rare_sample - ブール値 - オプション - デフォルト: false
@env DD_APM_DISABLE_RARE_SAMPLER - ブール値 - オプション - デフォルト: false

: このメカニズムは、ヘッドベースのサンプリングの下流で発生するため、サンプリングされたレアトレースは不完全になる可能性があります。Agent がトレーシングライブラリから完全なトレースを受信することを保証する方法はありません。

製品の取り込まれたスパン

いくつかの追加の取り込み理由は、特定の Datadog 製品によって生成されるスパンに起因します。

製品取り込み理由取り込みのメカニズムの説明
Synthetic モニタリングsyntheticssynthetics-browserHTTP テストやブラウザテストでは、バックエンドのサービスがインスツルメントされると、トレースが生成されます。Synthetic テストの実行からバックエンドトレースを見つけます。
リアルユーザーモニタリング (RUM)RUMウェブアプリケーションやモバイルアプリケーションからのブラウザリクエストは、バックエンドサービスがインスツルメントされると、トレースを生成します。RUM ブラウザセッションとリソースからバックエンドトレースを見つけます。
サーバーレスlambdaxrayDatadog トレーシングライブラリまたは AWS X-Ray インテグレーションでトレースしたサーバーレスアプリケーションから受信したトレース。
アプリケーション セキュリティ モニタリングappsecDatadog トレーシングライブラリから取り込まれたトレースで、ASM によって脅威としてフラグが立てられたもの。

その他の参考資料