RUM とトレースの接続

RUM とトレース

APM と Real User Monitoring のインテグレーションにより、Web およびモバイルアプリケーションからのリクエストを対応するバックエンドトレースにリンクできます。この組み合わせにより、1 つのレンズを通してフロントエンドとバックエンドの完全なデータを確認できます。

RUM のフロントエンドデータに加えて、トレース ID 挿入のバックエンド、インフラストラクチャー、ログ情報を使用して、スタック内の問題を特定し、ユーザーに起こっていることを理解します。

使用方法

前提条件

  • RUM アプリケーションの対象となるサービスに APM トレースを設定していること。
  • サービスが HTTP サーバーを使用していること。
  • HTTP サーバーで、分散型トレーシングをサポートするライブラリが使用されていること。
  • RUM エクスプローラーで XMLHttpRequest (XHR) または Fetch リソースを allowedTracingOrigins に設定していること。
  • allowedTracingOrigins へのリクエストに対応するトレースがあること。

RUM の設定

  1. RUM ブラウザモニタリングを設定します。

  2. RUM SDK を初期化します。ブラウザアプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、allowedTracingOrigins 初期化パラメーターを設定します。

    import { datadogRum } from '@datadog/browser-rum'
    
    datadogRum.init({
        applicationId: '<DATADOG_APPLICATION_ID>',
        clientToken: '<DATADOG_CLIENT_TOKEN>',
        ...otherConfig,
        service: "my-web-application",
        allowedTracingOrigins: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/]
    })
    

RUM をトレースに接続するには、service フィールドにブラウザアプリケーションを指定する必要があります。

注: allowedTracingOrigins は、<scheme> "://" <hostname> [ ":" <port> ] と定義された、ブラウザアプリケーションにより呼び出された呼び出し元と一致する Javascript 文字列および正規表現を受け入れます。

  1. (オプション) tracingSampleRate 初期化パラメータを構成して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、ブラウザのリクエストから来るトレースの 100% が Datadog に送信されます。バックエンドトレースの 20% を保持する場合:

    import { datadogRum } from '@datadog/browser-rum'
    
    datadogRum.init({
        ...otherConfig,
        tracingSampleRate: 20
    })
    

: tracingSampleRate は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。

ブラウザ SDK の初期化後に生成されたリクエストには、エンドツーエンドのトレーシングを利用できます。初めの HTML 文書のエンドツーエンドトレースおよび始めのブラウザリクエストはサポートされません。
  1. RUM Android モニタリングを設定します。

  2. Android アプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、OkHttpClient インターセプターを構成します。

    val tracedHosts =  listOf("example.com", "example.eu")
    
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(DatadogInterceptor(tracedHosts))
        .addNetworkInterceptor(TracingInterceptor(tracedHosts))
        .eventListenerFactory(DatadogEventListener.Factory())
       .build()
    

: デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com を追加すると、api.example.comfoo.example.com のトレースも有効になります。

  1. (オプション) traceSamplingRate パラメータを構成して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 100% が Datadog に送信されます。バックエンドトレースの 20% を保持する場合:
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(RumInterceptor(traceSamplingRate = 100f))
       .build()

: traceSamplingRate は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。

  1. RUM iOS モニタリングを設定します。

  2. iOS アプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、firstPartyHosts 初期化パラメーターを設定します。

    Datadog.initialize(
    appContext: .init(),
    configuration: Datadog.Configuration
        .builderUsing(rumApplicationID: "<rum_app_id>", clientToken: "<client_token>", environment: "<env_name>")
        .set(firstPartyHosts: ["example.com", "api.yourdomain.com"])
        .build()
    )
    
  3. セットアップにあるように、URLSession を初期化します。

    let session =  URLSession(
        configuration: ...,
        delegate: DDURLSessionDelegate(),
        delegateQueue: ...
    )
    

: デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com を追加すると、api.example.comfoo.example.com のトレースも有効になります。

  1. (オプション) tracingSamplingRate 初期化パラメータを設定して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 100% が Datadog に送信されます。バックエンドトレースの 20% を保持する場合:
    Datadog.initialize(
    appContext: .init(),
    configuration: Datadog.Configuration
        .builderUsing(rumApplicationID: "<rum_app_id>", clientToken: "<client_token>", environment: "<env_name>")
        .set(tracingSamplingRate: 20)
        .build()
    )
    

: tracingSamplingRate は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。

サポートされるライブラリ

以下の Datadog トレーシングライブラリがサポートされています。

ライブラリ最小バージョン
Python0.22.0
Go1.10.0
Java0.24.1
Ruby0.20.0
JavaScript0.10.0
PHP0.33.0
.NET1.18.2

RUM リソースはどのようにトレースにリンクされていますか?

Datadog は、分散型トレーシングプロトコルを使用し、以下の HTTP ヘッダーを設定します。

x-datadog-trace-id Real User Monitoring SDK から生成されます。Datadog がトレースを RUM リソースにリンクできるようにします。

x-datadog-parent-id Real User Monitoring SDK から生成されます。Datadog がトレースから最初のスパンを生成できるようにします。

x-datadog-origin: rum Real User Monitoring から生成されたトレースが、APM インデックススパン数に影響を与えないようにします。

x-datadog-sampling-priority: 1
Agent がトレースを維持するようにします。

: 上記 HTTP ヘッダーは CORS セーフリストに登録されていないため、SDK が監視するように設定されているリクエストを扱うサーバーで Access-Control-Allow-Headers を構成する必要があります。サーバーは、すべてのリクエストの前に SDK によって作られるプレフライトリクエストも許可する必要があります (OPTIONS リクエスト)。

APM クオータへの影響

RUM とトレースを接続すると、APM の取り込み量が大幅に増加する可能性があります。初期化パラメータ tracingSampleRate を使用して、ブラウザとモバイルのリクエストから始まるバックエンドのトレースのシェアを維持します。

トレースの保持期間

これらのトレースは、Live Search エクスプローラーで 15 分間利用可能です。より長い期間、トレースを保持するには、保持フィルターを作成します。重要なページとユーザーアクションのトレースを保持するために、任意のスパンタグにこれらの保持フィルターを適用します。