RUM 設定¶
Windows SDK は、C# と Native C/C++ の両方で同じ View、Action、Resource、Error、Long Task を収集します。C# は UI フレームワークの自動収集を提供し、Native は明示的な C ABI と HWND および WinHTTP 向けのアダプターを使用します。
RUM 初期化設定¶
サンプリング設定¶
| 意味 | .NET / C# | Native C/C++ | デフォルト値 | 範囲 |
|---|---|---|---|---|
| 通常セッションのサンプリング | SampleRate |
sample_rate |
1.0 |
0.0~1.0 |
| Error セッションの追加サンプリング | SessionErrorSampleRate |
session_error_sample_rate |
0.0 |
0.0~1.0 |
サンプリングの決定は同じセッション内で一貫しています。まず 1.0 で接続を検証してから、データ量に応じて調整することをお勧めします。
収集範囲¶
| 機能 | .NET / C# | Native C/C++ |
|---|---|---|
| View | WPF、WinForms は自動。WinUI 3 は Window を明示的に関連付け | ウィンドウのライフサイクルで View C ABI を呼び出し |
| Action | 一般的な UI コントロールとアプリ起動を自動収集 | アプリ起動を自動収集。業務操作では Action C ABI を呼び出し |
| Resource | HttpClient を自動収集 |
WinHTTP アダプターまたは手動の Resource C ABI |
| Error | 未処理の例外を自動収集。手動 Error に対応 | Native クラッシュからの復旧または手動 Error |
| Long Task | UI スレッドのプローブまたは手動報告 | HWND Watchdog または手動報告 |
収集の有効化¶
{{ windows_sdk_name }}Sdk.EnableAutomaticInstrumentation(new AutomaticInstrumentationOptions
{
EnableWpf = true,
EnableWinForms = true,
EnableWinUI = true,
EnableWebView = true,
EnableHttpClient = true,
EnableUnhandledException = true,
EnableUiThreadBlock = true,
EnableAppLaunch = true,
UiThreadBlockThreshold = TimeSpan.FromMilliseconds(500),
UiThreadProbeInterval = TimeSpan.FromMilliseconds(250),
UiThreadLongTaskCooldown = TimeSpan.FromSeconds(5)
});
自動収集パラメーター¶
| パラメーター | デフォルト値 | 説明 |
|---|---|---|
EnableWpf |
true |
WPF の Window と一般的なコントロールを自動収集します。 |
EnableWinForms |
true |
WinForms の Form と一般的なコントロールを自動収集します。 |
EnableWinUI |
true |
WinUI 3 コントロールの収集を有効にします。Window は引き続き明示的な関連付けが必要です。 |
EnableWebView |
true |
対応する WebView2 コントロールを自動的に検出します。 |
EnableHttpClient |
true |
.NET HTTP 診断イベントを通じて Resource を収集します。 |
EnableUnhandledException |
true |
アプリケーションドメインと UI フレームワークの未処理例外を収集します。 |
EnableUiThreadBlock |
true |
UI スレッドのブロッキングを監視します。 |
EnableAppLaunch |
true |
アプリ起動フェーズを収集します。 |
UiThreadBlockThreshold |
500 ms |
ロングタスクのしきい値。 |
UiThreadProbeInterval |
250 ms |
UI スレッドのプローブ間隔。 |
UiThreadLongTaskCooldown |
5 s |
連続ブロック報告の集約クールダウン時間。 |
同じコレクター群が重複登録されることはありませんが、アプリは起動処理内で 1 回だけ呼び出す必要があります。
Native SDK は初期化後、デフォルトでコールドスタートとホットスタートを自動収集し、それぞれ action_type=launch_cold、action_type=launch_hot の Action を生成します。{{ windows_sdk_id }}_sdk_config_init() は enable_app_launch_tracking を 1 に初期化します。自動起動 Action が不要な場合は、{{ windows_sdk_id }}_sdk_init() を呼び出す前に 0 に設定します:
{{ windows_sdk_id }}_sdk_config config;
{{ windows_sdk_id }}_sdk_config_init(&config);
config.enable_app_launch_tracking = 0;
自動収集では、現在のプロセスのトップレベルウィンドウと最初の合成フレームが監視されます。コールドスタート Action には、アプリコード実行前、アプリ初期化、最初のフレームの 3 つのフェーズが含まれます。アプリがバックグラウンドからフォアグラウンドに戻ると、ホットスタート Action が生成されます。アプリは {{ windows_sdk_id }}_rum_add_launch_action() を使用して、ホスト側で測定された起動フェーズを報告することもできます。コールドスタートを手動で報告した場合、SDK は重複する自動コールドスタート Action を生成しません。
トップレベルウィンドウの作成後、UI Watchdog とクラッシュリカバリを有効にできます:
{{ windows_sdk_id }}_sdk_native_monitoring_config monitoring;
{{ windows_sdk_id }}_sdk_native_monitoring_config_init(&monitoring);
monitoring.enable_ui_hang_monitoring = 1;
monitoring.main_window_handle = reinterpret_cast<uintptr_t>(main_window);
monitoring.enable_native_crash_reporting = 1;
monitoring.enable_minidump = 0;
if (!{{ windows_sdk_id }}_sdk_enable_native_monitoring(rum, &monitoring)) {
// HWND または設定が無効です。
}
Native モニタリングパラメーター¶
{{ windows_sdk_id }}_sdk_native_monitoring_config はバージョン管理された構造体です。最初に初期化関数を呼び出す必要があります。
| フィールド | デフォルト値 | 説明 |
|---|---|---|
enable_ui_hang_monitoring |
0 |
HWND UI Watchdog を有効にするかどうか。 |
enable_native_crash_reporting |
0 |
SEH と次回起動時のクラッシュリカバリを有効にするかどうか。 |
main_window_handle |
0 |
現在のプロセスが所有する有効なトップレベル HWND。 |
ui_probe_interval_ms |
250 |
UI プローブ間隔。 |
long_task_threshold_ms |
500 |
ロングタスクのしきい値。 |
hang_threshold_ms |
5000 |
Application Not Responding のしきい値。 |
hang_report_cooldown_ms |
5000 |
継続的なハング報告のクールダウン時間。 |
crash_cache_path |
SDK のデフォルトディレクトリ | クラッシュエンベロープとオプションの Dump のローカルディレクトリ。 |
enable_minidump |
0 |
ローカル最小 Dump を保持するかどうか。Dump は RUM にアップロードされません。 |
max_crash_files |
3 |
クラッシュファイル数の上限。 |
max_crash_file_bytes |
32 MiB |
クラッシュファイルの総バイト数の上限。 |
C++ アプリでは {{ windows_sdk_id }}_sdk.hpp をインクルードして、ホスト側アダプターが std::terminate ハンドラーを正しくインストールして復元できるようにする必要があります。クラッシュしたプロセスはネットワーク書き込みやキューへの書き込みを実行しません。次回の初期化時に、制限付きのクラッシュエンベロープが RUM Error に変換されます。
ネットワーク Resource¶
EnableHttpClient = true にすると、URL、メソッド、ステータスコード、合計所要時間、リクエスト/レスポンスサイズ、HTTP プロトコルが自動的に記録されます。明示的な Handler が必要な場合:
C++ WinHTTP ではスコープベースのアダプターを使用します:
{{ windows_sdk_id }}::rum::WinHttpResource resource(
rum,
request,
"https://api.example.com/items",
"GET");
resource.send();
resource.receive();
その他のネットワークライブラリでは、{{ windows_sdk_id }}_rum_start_resource() と {{ windows_sdk_id }}_rum_stop_resource_ext() を呼び出します。Trace Header と RUM の関連付けについては Trace 設定 を参照してください。
アプリは実際のネットワークフェーズの所要時間が取得できた場合にのみ、DNS、TCP、TLS、TTFB を記録できます。欠落したフェーズを推定してはなりません。
RUM の手動計装¶
自動収集で業務セマンティクスを表現できない場合は、Action、View、Error、Long Task、Resource を手動で報告できます。.NET / C# では {{ windows_sdk_name }}Sdk を、Native C/C++ では {{ windows_sdk_id }}_rum.h の C ABI を使用します。どちらの接続方法でも同じ Windows RUM データ型が生成されます。
重複収集の回避
手動 API と自動収集は同じセッションに書き込まれます。ウィンドウ、コントロール、HttpClient、WinHTTP、WebView2 によって自動収集されたデータは、手動で再度報告しないでください。
Action¶
自動終了する Action¶
ユーザー操作の収集に使用し、操作中に発生した Resource、Error、Long Task を関連付けます:
通常モードは Android SDK と同じ動作です。同時にアクティブな Action は 1 つだけ保持されます。100 ms 以内に StartAction を連続して呼び出すと、新しい呼び出しは無視されます。100 ms を超えてから再度呼び出すと、前の Action が終了し、新しい Action が開始されます。Action は View の切り替え時に終了し、最大で約 5 秒間継続します。
業務の終了を待つ Action¶
業務操作が非同期ロジックをカバーする必要がある場合、needWait モードを有効にします。このモードでのみ StopAction とのペアでの使用が必要です:
needWait Action は明示的に終了するまで新しい Action に置き換えられません。ただし、約 5 秒の最大継続時間と View 切り替えの制限は同様に適用されます。Action の開始時に空の ID が返された場合は、その呼び出しが受け入れられなかったことを意味するため、StopAction を呼び出さないでください。
所要時間が既知の Action¶
AddAction は、すでに終了し所要時間が既知の独立した Action を直接報告するために使用します。100 ms の高頻度保護と 5 秒の制限を受けず、後続で発生した Resource、Error、Long Task も関連付けられません。
View¶
新しい View を開始すると、現在アクティブな View は自動的に終了します。View 名は安定したページを表す名前にしてください。注文番号、ユーザー ID、オブジェクトアドレス、検索語句は含めないでください。
Error¶
try
{
await LoadOrdersAsync();
}
catch (Exception exception)
{
{{ windows_sdk_name }}Sdk.AddError(
exception,
new Dictionary<string, object?>
{
["operation"] = "load_orders"
});
}
Exception 以外のエラーは {{ windows_sdk_name }}Sdk.AddError(stack, message, errorType, source) を使用できます。未処理例外の自動収集を有効にしている場合、手動で報告した後も同じ例外をスローし続け、最終的にプロセスが終了すると、windows_crash も 1 件生成されます。業務セマンティクスに応じて重複報告を避けてください。
自動収集された .NET の致命的例外は error_type=windows_crash を、Native SEH と C++ std::terminate は error_type=native_crash を使用します。Crash の error_source はどちらも logger です。Native クラッシュモニタリングは次回起動時にクラッシュ Error を復元します。クラッシュハンドラー内で手動 Error API を呼び出さないでください。完全な型とフィールドの説明はアプリケーションデータ収集を参照してください。
Long Task¶
UI スレッドのブロッキング監視を有効にしている場合、同じブロッキングを手動で再度報告しないでください。
Resource¶
var resourceId = {{ windows_sdk_name }}Sdk.StartResource(
"https://api.example.com/orders",
"GET");
{{ windows_sdk_name }}Sdk.StopResource(
resourceId,
statusCode: 200,
timing: RumResourceTiming.FromTotalElapsed(
TimeSpan.FromMilliseconds(120),
source: "manual"),
responseSize: 2048,
requestSize: 0,
resourceType: "http");
アプリが DNS、TCP、TLS、TTFB をすでに計測している場合は、RumResourceTiming.FromPhases() を使用してフェーズごとの所要時間を書き込めます。信頼できるデータがない場合は、合計所要時間のみを書き込みます。
C++ アプリでは、ResourceScope を使用して、例外が発生した場合や途中で return する場合でも Resource が確実に終了するようにできます:
#include "{{ windows_sdk_id }}_sdk.hpp"
{{ windows_sdk_id }}::rum::ResourceScope resource(
rum,
"https://api.example.com/orders",
"GET",
"http");
const auto response = send_request();
resource.complete(
response.status_code,
response.body_size,
response.request_size);
純粋な C アプリでは、{{ windows_sdk_id }}_rum_start_resource() と {{ windows_sdk_id }}_rum_stop_resource() をペアで呼び出せます。trace_id、span_id、リクエストサイズ、HTTP プロトコルを書き込む必要がある場合は、{{ windows_sdk_id }}_rum_stop_resource_ext() を使用します。
リクエストが失敗した場合も Resource を終了し、ステータスコードを 0 に設定する必要があります。HttpClient または WinHTTP の自動 Resource を有効にしている場合、同じリクエストに対して手動 API を再度呼び出さないでください。
Flush¶
手動イベントはまずローカルキューに入ります。重要なフローの後にすぐに報告を試みる場合は:
アプリを正常に終了する場合も、ShutdownAsync() または {{ windows_sdk_id }}_sdk_shutdown() を呼び出す必要があります。HTTP Trace の伝搬とアプリケーションログについては、それぞれ Trace 設定 と Log 設定 を参照してください。
Session Replay¶
試験的機能
Windows Session Replay はデフォルトで無効です。明示的に有効にして検証することはできますが、安定版のリリース範囲にはまだ入っていません。導入側は、リプレイの互換性、プライバシー、パフォーマンス、データ量を自身で評価する必要があり、現在の動作を安定した互換性の約束とみなしてはなりません。
初期化時に明示的に有効にし、Replay のサンプリングとデフォルトのプライバシーポリシーを設定します:
{{ windows_sdk_name }}Sdk.Init(new {{ windows_sdk_name }}Config
{
// DatawayUrl / ClientToken / RumAppId ...
SessionReplay = new RumSessionReplayConfig
{
Enabled = true,
SampleRate = 1.0,
OnErrorSampleRate = 0.0,
TextAndInputPrivacy = SessionReplayTextAndInputPrivacy.MaskAll,
TouchPrivacy = SessionReplayTouchPrivacy.Show,
ImagePrivacy = SessionReplayImagePrivacy.MaskAll
}
});
SampleRate と OnErrorSampleRate の範囲はどちらも 0.0~1.0 です。初期化後は録画を手動で制御できます:
{{ windows_sdk_name }}Sdk.StartSessionReplayRecording();
{{ windows_sdk_name }}Sdk.StopSessionReplayRecording();
手動で開始しても Enabled = false を回避できません。最初に初期化設定で有効にする必要があります。要素レベルのプライバシー API については Windows セッションリプレイのプライバシーオーバーライド を参照してください。
{{ windows_sdk_id }}_sdk_config config;
{{ windows_sdk_id }}_sdk_config_init(&config);
config.session_replay_enabled = 1;
config.session_replay_sample_rate = 1.0;
config.session_replay_on_error_sample_rate = 0.0;
{{ windows_sdk_id }}_sdk_handle rum = {{ windows_sdk_id }}_sdk_init(&config);
{{ windows_sdk_id }}_rum_register_replay_window(
rum,
reinterpret_cast<uintptr_t>(main_window));
Native Replay は独立した永続キューと v1/write/rum/replay アップロードチャネルを使用します。{{ windows_sdk_id }}_rum_start_session_replay() と {{ windows_sdk_id }}_rum_stop_session_replay() で録画を手動で制御できますが、開始の呼び出しでも無効化された初期化設定を上書きすることはできません。
WebView2 と Electron のページレコードは、ネイティブ Bridge を通じて同じネイティブセッション、セグメント、キュー、アップロードチャネルに入ります。それぞれ WebView2 監視 と Electron 監視 を参照してください。