- 重要な情報
- はじめに
- 用語集
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
APM と Real User Monitoring のインテグレーションにより、Web およびモバイルアプリケーションからのリクエストを対応するバックエンドトレースにリンクできます。この組み合わせにより、1 つのレンズを通してフロントエンドとバックエンドの完全なデータを確認できます。
RUM のフロントエンドデータに加えて、トレース ID 挿入のバックエンド、インフラストラクチャー、ログ情報を使用して、スタック内の問題を特定し、ユーザーに起こっていることを理解します。
allowedTracingUrls
に追加していること。firstPartyHosts
に追加していること。allowedTracingUrls
または firstPartyHosts
へのリクエストに対応するトレースがあること。RUM ブラウザモニタリングを設定します。
RUM SDK を初期化します。ブラウザアプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、allowedTracingUrls
初期化パラメーターを設定します。
import { datadogRum } from '@datadog/browser-rum'
datadogRum.init({
applicationId: '<DATADOG_APPLICATION_ID>',
clientToken: '<DATADOG_CLIENT_TOKEN>',
...otherConfig,
service: "my-web-application",
allowedTracingUrls: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("https://api.example.com")]
})
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 セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。
RUM Android モニタリングを設定します。
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.com
と foo.example.com
のトレースも有効になります。
(オプション) traceSamplingRate
パラメーターを構成して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 20% が Datadog に送信されます。バックエンドトレースの 100% を保持する場合:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(RumInterceptor(traceSamplingRate = 100f))
.build()
注: traceSamplingRate
は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。
RUM iOS モニタリングを設定します。
iOS アプリケーションによって呼び出される内部のファーストパーティオリジンのリストを使用して、ビルダー関数 trackURLSession(firstPartyHosts:)
を呼び出します。
Datadog.initialize(
appContext: .init(),
configuration: Datadog.Configuration
.builderUsing(
rumApplicationID: "<rum_app_id>",
clientToken: "<client_token>",
environment: "<env_name>"
)
.trackURLSession(firstPartyHosts: ["example.com", "api.yourdomain.com"])
.build()
)
グローバル Tracer
を初期化します。
Global.sharedTracer = Tracer.initialize(
configuration: Tracer.Configuration(...)
)
セットアップにあるように、URLSession を初期化します。
let session = URLSession(
configuration: ...,
delegate: DDURLSessionDelegate(),
delegateQueue: ...
)
デフォルトでは、リストされたホストのすべてのサブドメインがトレースされます。たとえば、example.com
を追加すると、api.example.com
と foo.example.com
のトレースも有効になります。
URLSession
に URLRequest
を指定した場合、トレース ID 挿入が機能します。URL
オブジェクトを使用した場合、分散型トレーシングは機能しません。
(オプション) tracingSamplingRate
初期化パラメーターを設定して、バックエンドトレースの定義されたパーセンテージを保持するように設定します。設定しない場合、アプリケーションのリクエストから来るトレースの 20% が Datadog に送信されます。
バックエンドトレースの 100% を保持する場合:
Datadog.initialize(
appContext: .init(),
configuration: Datadog.Configuration
.builderUsing(rumApplicationID: "<rum_app_id>", clientToken: "<client_token>", environment: "<env_name>")
.set(tracingSamplingRate: 100)
.build()
)
注: tracingSamplingRate
は RUM セッションのサンプリングには影響しません。バックエンドのトレースのみがサンプリングされます。
以下の Datadog トレーシングライブラリがサポートされています。
ライブラリ | 最小バージョン |
---|---|
Python | 0.22.0 |
Go | 1.10.0 |
Java | 0.24.1 |
Ruby | 0.20.0 |
JavaScript | 0.10.0 |
PHP | 0.33.0 |
.NET | 1.18.2 |
RUM は、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
には、使用したいプロパゲーターに対応する文字列をリストで指定します。
datadog
: Datadog のプロパゲーター (x-datadog-*
)tracecontext
: W3C Trace Context (traceparent
)b3
: B3 シングルヘッダー (b3
)b3multi
: B3 マルチヘッダー (X-B3-*
)上記に従い、RUM を APM に接続するためのセットアップを行います。
次のように、trackURLSession(firstPartyHosts:)
の代わりに trackURLSession(firstPartyHostsWithHeaderTypes:)
を使用します。
Datadog.initialize(
appContext: .init(),
configuration: Datadog.Configuration
.builderUsing(
rumApplicationID: "<rum_app_id>",
clientToken: "<client_token>",
environment: "<env_name>"
)
.trackURLSession(
firstPartyHostsWithHeaderTypes: [
"api.example.com": [.tracecontext]
]
)
.build()
)
trackURLSession(firstPartyHostsWithHeaderTypes:)
には Dictionary<String, Set<TracingHeaderType>>
をパラメーターとして指定します。キーはホスト、値はサポートされるサポートトレーシングヘッダータイプのリストになります。
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
.datadog
: Datadog のプロパゲーター (x-datadog-*
).tracecontext
: W3C Trace Context (traceparent
).b3
: B3 シングルヘッダー (b3
).b3multi
: B3 マルチヘッダー (X-B3-*
)上記に従い、RUM を APM に接続するためのセットアップを行います。
内部のファーストパーティオリジンのリストと、使用するトレーシングヘッダータイプを指定して、次のように OkHttpClient
インターセプターを構成します。
val tracedHosts = mapOf("example.com" to setOf(TracingHeaderType.TRACECONTEXT),
"example.eu" to setOf(TracingHeaderType.DATADOG))
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(DatadogInterceptor(tracedHosts))
.addNetworkInterceptor(TracingInterceptor(tracedHosts))
.eventListenerFactory(DatadogEventListener.Factory())
.build()
TracingHeaderType
は列挙型で、次のトレーシングヘッダータイプを表します。
.DATADOG
: Datadog のプロパゲーター (x-datadog-*
).TRACECONTEXT
: W3C Trace Context (traceparent
).B3
: B3 シングルヘッダー (b3
).B3MULTI
: B3 マルチヘッダー (X-B3-*
)Datadog は分散型トレーシングプロトコルを使用し、次の HTTP ヘッダーをセットアップします。
x-datadog-trace-id
x-datadog-parent-id
Real User Monitoring SDK から生成されます。Datadog がトレースから最初のスパンを生成できるようにします。
x-datadog-origin: rum
リアルユーザーモニタリングから生成されたトレースが、APM インデックススパン数に影響を与えないようにします。
x-datadog-sampling-priority: 1
traceparent: [version]-[trace id]-[parent id]-[trace flags]
version
: 現行の仕様では、バージョンは 00
に設定することを想定しています。trace id
: 128 ビットのトレース ID (16 進数で 32 桁)。ソーストレース ID は APM との互換性を維持するため 64 ビットになっています。parent id
: 64 ビットのスパン ID (16 進数で 16 桁)。trace flags
: サンプリングあり (01
)、またはサンプリングなし (00
)traceparent: 00-00000000000000008448eb211c80319c-b7ad6b7169203331s-01
b3: [trace id]-[span id]-[sampled]
trace id
: 64 ビットのトレース ID (16 進数で 16 桁)。span id
: 64 ビットのスパン ID (16 進数で 16 桁)。sampled
: True (1
) または False (0
)b3: 8448eb211c80319c-b7ad6b7169203331-1
X-B3-TraceId: 8448eb211c80319c
X-B3-SpanId: b7ad6b7169203331
X-B3-Sampled: 1
上記 HTTP ヘッダーは CORS セーフリストに登録されていないため、SDK が監視するように設定されているリクエストを扱うサーバーで Access-Control-Allow-Headers を構成する必要があります。サーバーは、すべてのリクエストの前に SDK によって作られるプレフライトリクエストも許可する必要があります (OPTIONS リクエスト)。
RUM とトレースを接続すると、APM の取り込み量が大幅に増加する可能性があります。初期化パラメーター traceSampleRate
を使用して、ブラウザとモバイルのリクエストから始まるバックエンドのトレースのシェアを維持します。
これらのトレースは、Live Search エクスプローラーで 15 分間利用可能です。より長い期間、トレースを保持するには、保持フィルターを作成します。重要なページとユーザーアクションのトレースを保持するために、任意のスパンタグにこれらの保持フィルターを適用します。