このページは日本語には対応しておりません。随時翻訳に取り組んでいます。
翻訳に関してご質問やご意見ございましたら、
お気軽にご連絡ください。
概要
APM と Real User Monitoring のインテグレーションにより、Web およびモバイルアプリケーションからのリクエストを対応するバックエンドトレースにリンクできます。この組み合わせにより、1 つのレンズを通してフロントエンドとバックエンドの完全なデータを確認できます。
RUM のフロントエンドデータに加えて、トレース ID 挿入のバックエンド、インフラストラクチャー、ログ情報を使用して、スタック内の問題を特定し、ユーザーに起こっていることを理解します。
iOS アプリケーションのトレースだけを Datadog に送信し始めるには、iOS トレース収集をご覧ください。
使用状況
前提条件
- RUM アプリケーションの対象となるサービスに APM トレースを設定していること。
- サービスが HTTP サーバーを使用していること。
- HTTP サーバーで、分散型トレーシングをサポートするライブラリが使用されていること。
- ご利用の SDK に応じて次の設定を行っていること。
- Browser SDK の場合は、RUM エクスプローラーで XMLHttpRequest (XHR) または Fetch リソースを
allowedTracingUrls
に追加していること。 - Mobile SDK の場合は、Native または XMLHttpRequest (XHR) を
firstPartyHosts
に追加していること。
allowedTracingUrls
または firstPartyHosts
へのリクエストに対応するトレースがあること。
RUM の設定
注: RUM とトレースの構成では、RUM で APM の有料データを使用するため、APM の請求に影響を与える可能性があります。
RUM ブラウザモニタリングを設定します。
RUM SDK を初期化します。ブラウザアプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、allowedTracingUrls
初期化パラメーターを設定します。
npm インストールの場合:
import { datadogRum } from '@datadog/browser-rum'
datadogRum.init({
clientToken: '<CLIENT_TOKEN>',
applicationId: '<APPLICATION_ID>',
site: 'datadoghq.com',
// service: 'my-web-application',
// env: 'production',
// version: '1.0.0',
allowedTracingUrls: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("https://api.example.com")],
sessionSampleRate: 100,
sessionReplaySampleRate: 100, // if not specified, defaults to 100
trackResources: true,
trackLongTasks: true,
trackUserInteractions: true,
})
CDN インストールの場合:
window.DD_RUM.init({
clientToken: '<CLIENT_TOKEN>',
applicationId: '<APPLICATION_ID>',
site: 'datadoghq.com',
// service: 'my-web-application',
// env: 'production',
// version: '1.0.0',
allowedTracingUrls: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("https://api.example.com")],
sessionSampleRate: 100,
sessionReplaySampleRate: 100, // if not included, the default is 100
trackResources: true,
trackLongTasks: true,
trackUserInteractions: true,
})
RUM をトレースに接続するには、service
フィールドにブラウザアプリケーションを指定する必要があります。
allowedTracingUrls
は完全な URL (<scheme>://<host>[:<port>]/<path>[?<query>][#<fragment>]
) に一致します。次のタイプを指定できます。
string
: 指定した値で始まるすべての URL に一致します。したがって、https://api.example.com
は https://api.example.com/v1/resource
に一致します。RegExp
: 指定された正規表現と URL で検証を実行します。function
: URL をパラメーターとして評価を実行します。戻り値の boolean
が true
に設定されていた場合は、一致することを示します。
(オプション) traceSampleRate
初期化パラメーターを構成して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、ブラウザのリクエストから来るトレースの 100% が Datadog に送信されます。バックエンドトレースの 20% を保持する場合:
import { datadogRum } from '@datadog/browser-rum'
datadogRum.init({
...otherConfig,
traceSampleRate: 20
})
注: traceSampleRate
は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。
(オプション) traceSampleRate
を設定している場合、バックエンドサービス側のサンプリング判定が適用されるように、初期化パラメーター traceContextInjection
を sampled
に設定してください (デフォルトは all
です)。
例えば、Browser SDK で traceSampleRate
を 20% に設定した場合:
traceContextInjection
が all
のとき、バックエンドトレースの 20% が保持され、80% が破棄されます。
ブラウザ SDK の初期化後に生成されたリクエストには、エンドツーエンドのトレーシングを利用できます。初めの HTML 文書のエンドツーエンドトレースおよび始めのブラウザリクエストはサポートされません。
RUM Android モニタリングを設定します。
Android トレース収集を設定します。
モジュールレベルの build.gradle
ファイルで、dd-sdk-android-okhttp
ライブラリに Gradle 依存関係を追加します。
dependencies {
implementation "com.datadoghq:dd-sdk-android-okhttp:x.x.x"
}
Android アプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、OkHttpClient
インターセプターを構成します。
val tracedHosts = listOf("example.com", "example.eu")
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(DatadogInterceptor.Builder(tracedHosts).build())
.addNetworkInterceptor(TracingInterceptor.Builder(tracedHosts).build())
.eventListenerFactory(DatadogEventListener.Factory())
.build()
デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com
を追加すると、api.example.com
と foo.example.com
のトレースも有効になります。
(オプション) traceSampler
パラメーターを構成して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 20% が Datadog に送信されます。バックエンドトレースの 100% を保持する場合:
val tracedHosts = listOf("example.com")
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(
DatadogInterceptor.Builder(tracedHosts)
.setTraceSampler(RateBasedSampler(100f))
.build()
)
.build()
注:
traceSampler
は RUM セッションのサンプリングには影響しません。サンプリング対象となるのはバックエンドトレースのみです。- Datadog の設定でカスタムトレーシングヘッダータイプを定義していて、かつ
GlobalTracer
に登録したトレーサーを使用している場合は、実際に使用しているトレーサーにも同じヘッダータイプが設定されていることを確認してください。
RUM iOS モニタリングを設定します。
urlSessionTracking
オプションと firstPartyHostsTracing
パラメーターを指定して RUM
を有効化してください。
RUM.enable(
with: RUM.Configuration(
applicationID: "<rum application id>",
urlSessionTracking: .init(
firstPartyHostsTracing: .trace(
hosts: [
"example.com",
"api.yourdomain.com"
]
)
)
)
)
URLSessionDataDelegate
プロトコルに準拠した SessionDelegate
タイプ用に、URLSession のインスツルメンテーションを有効化してください。
URLSessionInstrumentation.enable(
with: .init(
delegateClass: <YourSessionDelegate>.self
)
)
セットアップにあるように、URLSession を初期化します。
let session = URLSession(
configuration: ...,
delegate: <YourSessionDelegate>(),
delegateQueue: ...
)
デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com
を追加すると、api.example.com
と foo.example.com
のトレースも有効になります。
URLSession
に URLRequest
を指定した場合、トレース ID 挿入が機能します。URL
オブジェクトを使用した場合、分散型トレーシングは機能しません。
(オプション) バックエンドトレースの特定の割合を保持するには、sampleRate
パラメーターを設定します。設定しない場合、アプリケーションリクエストから送信されるトレースの 20% が Datadog に送られます。
バックエンドトレースの 100% を保持する場合:
RUM.enable(
with: RUM.Configuration(
applicationID: "<rum application id>",
urlSessionTracking: .init(
firstPartyHostsTracing: .trace(
hosts: [
"example.com",
"api.yourdomain.com"
],
sampleRate: 100
)
)
)
)
注: sampleRate
は RUM セッションのサンプリングには影響しません。サンプリング対象となるのはバックエンドトレースのみです。
RUM React Native モニタリングを設定します。
firstPartyHosts
の初期化パラメーターを設定して、React Native アプリケーションが呼び出す内部のファーストパーティオリジンのリストを定義します。
const config = new DatadogProviderConfiguration(
// ...
);
config.firstPartyHosts = ["example.com", "api.yourdomain.com"];
デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com
を追加すると、api.example.com
と foo.example.com
のトレースも有効になります。
(オプション) resourceTracingSamplingRate
初期化パラメーターを設定して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 20% が Datadog に送信されます。
バックエンドトレースの 100% を保持する場合:
const config = new DatadogProviderConfiguration(
// ...
);
config.resourceTracingSamplingRate = 100;
注: resourceTracingSamplingRate
は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。
RUM Flutter Monitoring をセットアップしてください。
Automatic Resource Tracking の説明に従って、Datadog Tracking HTTP Client パッケージを含め、HTTP 追跡を有効にします。これには、Flutter アプリケーションによって呼び出される内部、ファーストパーティーのオリジンのリストを追加するために、初期化に対する以下の変更が含まれます。
final configuration = DatadogConfiguration(
// ...
// added configuration
firstPartyHosts: ['example.com', 'api.yourdomain.com'],
)..enableHttpTracking()
RUM for Roku は、US1-FED Datadog サイトではご利用いただけません。
RUM Roku モニタリングを設定します。
ネットワークリクエストを行うには、datadogroku_DdUrlTransfer
コンポーネントを使用します。
ddUrlTransfer = datadogroku_DdUrlTransfer(m.global.datadogRumAgent)
ddUrlTransfer.SetUrl(url)
ddUrlTransfer.EnablePeerVerification(false)
ddUrlTransfer.EnableHostVerification(false)
result = ddUrlTransfer.GetToString()
RUM Kotlin Multiplatform Monitoring をセットアップしてください。
Ktor インスツルメンテーションをセットアップしてください。
Datadog Ktor Plugin の設定において、tracedHosts
初期化パラメーターを使用し、Kotlin Multiplatform アプリケーションが呼び出す内部 (ファーストパーティ) のドメインリストを定義してください。
val ktorClient = HttpClient {
install(
datadogKtorPlugin(
tracedHosts = mapOf(
"example.com" to setOf(TracingHeaderType.DATADOG),
"example.eu" to setOf(TracingHeaderType.DATADOG)
),
traceSampleRate = 100f
)
)
}
デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com
を追加すると、api.example.com
と foo.example.com
のトレースも有効になります。
(オプション) バックエンドトレースの特定の割合を保持するには、traceSampleRate
初期化パラメーターを設定します。設定しない場合、アプリケーションリクエストから送信されるトレースの 20% が Datadog に送られます。
バックエンドトレースの 100% を保持する場合:
val ktorClient = HttpClient {
install(
datadogKtorPlugin(
tracedHosts = mapOf(
"example.com" to setOf(TracingHeaderType.DATADOG),
"example.eu" to setOf(TracingHeaderType.DATADOG)
),
traceSampleRate = 100f
)
)
}
注: traceSampleRate
は RUM セッションのサンプリングには影響しません。サンプリング対象となるのはバックエンドトレースのみです。
セットアップの検証
RUM との APM インテグレーションが構成されていることを検証するには、RUM をインストールした SDK に基づいて以下の手順に従ってください。
- アプリケーションのページにアクセスします。
- ブラウザの開発者ツールで、Network タブを開きます。
- 相関が期待されるリソースリクエストのリクエストヘッダーに Datadog からの相関ヘッダーが含まれていることを確認します。
サポートされるライブラリ
サポートされているバックエンドライブラリは、ネットワークリクエストを受け取るサービス上に導入する必要があります。
OpenTelemetry のサポート
RUM は、OpenTelemetry ライブラリを使ってインスツルメントされたバックエンドとリソースを接続するため、複数のプロパゲータータイプをサポートしています。
既定の注入形式は tracecontext
と Datadog
です。
注: Next.js/Vercel など、OpenTelemetry を使用するバックエンドフレームワークを使用している場合は、以下の手順に従ってください。
上記に従い、RUM を APM に接続するためのセットアップを行います。
allowedTracingUrls
を次のように変更します。
import { datadogRum } from '@datadog/browser-rum'
datadogRum.init({
...otherConfig,
allowedTracingUrls: [
{ match: "https://api.example.com", propagatorTypes: ["tracecontext"]}
]
})
match
では、上記のようにシンプルな形式で使用した場合と同じパラメータータイプ (string
、RegExp
、function
) を指定できます。
propagatorTypes
には、使用したいプロパゲーターに対応する文字列をリストで指定します。
上記に従い、RUM を APM に接続するためのセットアップを行います。
以下のように、.trace(hosts:sampleRate:)
の代わりに .traceWithHeaders(hostsWithHeaders:sampleRate:)
を使用してください:
RUM.enable(
with: RUM.Configuration(
applicationID: "<rum application id>",
urlSessionTracking: .init(
firstPartyHostsTracing: .traceWithHeaders(
hostsWithHeaders: [
"api.example.com": [.tracecontext]
],
sampleRate: 100
)
)
)
)
.traceWithHeaders(hostsWithHeaders:sampleRate:)
は Dictionary<String, Set<TracingHeaderType>>
をパラメーターとして取り、キーがホスト、値がサポートされるトレーシングヘッダータイプのリストとなります。
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
上記に従い、RUM を APM に接続するためのセットアップを行います。
内部のファーストパーティオリジンのリストと、使用するトレーシングヘッダータイプを指定して、次のように OkHttpClient
インターセプターを構成します。
val tracedHosts = mapOf("example.com" to setOf(TracingHeaderType.TRACECONTEXT),
"example.eu" to setOf(TracingHeaderType.DATADOG))
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(DatadogInterceptor.Builder(tracedHosts).build())
.addNetworkInterceptor(TracingInterceptor.Builder(tracedHosts).build())
.eventListenerFactory(DatadogEventListener.Factory())
.build()
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
RUM を APM と接続するように設定します。
内部のファーストパーティオリジンのリストと、使用するトレーシングヘッダータイプを指定して、次のように RUM SDK を構成します。
const config = new DatadogProviderConfiguration(
// ...
);
config.firstPartyHosts = [{
match: "example.com",
propagatorTypes: [
PropagatorType.TRACECONTEXT,
PropagatorType.DATADOG
]
}];
PropagatorType
は列挙型で、次のトレーシングヘッダータイプを表します。
PropagatorType.DATADOG
: Datadog のプロパゲーター (x-datadog-*
)PropagatorType.TRACECONTEXT
: W3C Trace Context (traceparent
)PropagatorType.B3
: B3 シングルヘッダー (b3
)PropagatorType.B3MULTI
: B3 マルチヘッダー (X-B3-*
)
上記に従い、RUM を APM に接続するためのセットアップを行います。
以下のように、firstPartyHosts
の代わりに firstPartyHostsWithTracingHeaders
を使用してください:
final configuration = DatadogConfiguration(
// ...
// added configuration
firstPartyHostsWithTracingHeaders: {
'example.com': { TracingHeaderType.tracecontext },
},
)..enableHttpTracking()
firstPartyHostsWithTracingHeaders
には Map<String, Set<TracingHeaderType>>
をパラメーターとして指定します。キーはホスト、値はサポートされるサポートトレーシングヘッダータイプのリストになります。
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
TracingHeaderType.datadog
: Datadog のプロパゲーター (x-datadog-*
)TracingHeaderType.tracecontext
: W3C Trace Context (traceparent
)TracingHeaderType.b3
: B3 シングルヘッダー (b3
)TracingHeaderType.b3multi
: B3 マルチヘッダー (X-B3-*
)
RUM を APM と接続するように設定します。
内部のファーストパーティオリジンのリストと、使用するトレーシングヘッダータイプを指定して、次のように RUM SDK を構成します。
val ktorClient = HttpClient {
install(
datadogKtorPlugin(
tracedHosts = mapOf(
"example.com" to setOf(TracingHeaderType.DATADOG),
"example.eu" to setOf(TracingHeaderType.DATADOG)
),
traceSampleRate = 100f
)
)
}
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
TracingHeaderType.DATADOG
: Datadog のプロパゲータ (x-datadog-*
)TracingHeaderType.TRACECONTEXT
: W3C Trace Context (traceparent
)TracingHeaderType.B3
: B3 シングルヘッダー (b3
)TracingHeaderType.B3MULTI
: B3 マルチヘッダー (X-B3-*
)
RUM リソースはどのようにトレースにリンクされていますか?
Datadog は分散トレーシングプロトコルを用いて、以下の HTTP ヘッダーを設定します。デフォルトでは、トレースコンテキストと Datadog 専用の両方のヘッダーが使用されます。
x-datadog-trace-id
- Real User Monitoring SDK によって生成されます。Datadog がトレースと RUM リソースを関連付けるために使用されます。
x-datadog-parent-id
Real User Monitoring SDK から生成されます。Datadog がトレースから最初のスパンを生成できるようにします。
x-datadog-origin: rum
リアルユーザーモニタリングから生成されたトレースが、APM インデックススパン数に影響を与えないようにします。
x-datadog-sampling-priority
- トレースがサンプリングされた場合は
1
、そうでない場合は 0
が Real User Monitoring SDK によって設定されます。
traceparent: [version]-[trace id]-[parent id]-[trace flags]
version
: 現在の仕様では常に 00
。trace id
: 128 ビットのトレース ID (16 進数で 32 桁)。APM との互換性のため、ソース側のトレース ID は 64 ビット。parent id
: 64 ビットのスパン ID (16 進数で 16 桁)。trace flags
: サンプリングあり (01
)/なし (00
)。tracestate: dd=s:[sampling priority];o:[origin]
dd
: Datadog のベンダープレフィックス。sampling priority
: サンプリングされた場合は 1
、そうでない場合は 0
。origin
: 常に rum
と設定し、Real User Monitoring によって生成されたトレースが APM のインデックススパン数に影響しないようにします。- 例:
traceparent: 00-00000000000000008448eb211c80319c-b7ad6b7169203331s-01
tracestate: dd=s:1;o:rum
b3: [trace id]-[span id]-[sampled]
trace id
: 64 ビットのトレース ID (16 進数で 16 桁)。span id
: 64 ビットのスパン ID (16 進数で 16 桁)。sampled
: True (1
) または False (0
)。- b3 シングルヘッダーの例:
b3: 8448eb211c80319c-b7ad6b7169203331-1
- b3 マルチヘッダーの例:
X-B3-TraceId: 8448eb211c80319c
X-B3-SpanId: b7ad6b7169203331
X-B3-Sampled: 1
これらの HTTP ヘッダーは CORS の safelist に含まれていないため、SDK でモニタリング対象に設定したリクエストを受け取るサーバー側で Access-Control-Allow-Headers を構成する必要があります。また、クロスサイトの URL でトレースが有効になっている場合、ブラウザが各リクエスト前に送信するプリフライトリクエスト (OPTIONS リクエスト) をサーバー側が受け付ける必要があります (プレフライトリクエスト)。
APM クオータへの影響
RUM とトレースを接続すると、APM の取り込み量が大幅に増加する可能性があります。初期化パラメーター traceSampleRate
を使用して、ブラウザとモバイルのリクエストから始まるバックエンドのトレースのシェアを維持します。
トレースの保持期間
これらのトレースは、Live Search エクスプローラーで 15 分間利用可能です。より長い期間、トレースを保持するには、保持フィルターを作成します。重要なページとユーザーアクションのトレースを保持するために、任意のスパンタグにこれらの保持フィルターを適用します。
その他の参考資料