トラブルシューティング¶
SDK 初期化時の異常チェック¶
.NET / C# 設定の検証¶
GuanceSdk.Init() は呼び出し時に重要な設定を即座に検証します:
| 異常情報 | 対処方法 |
|---|---|
RumAppId is required. |
管理コンソールで作成したアプリケーション ID を設定してください。 |
ServiceName is required. |
空でない ServiceName を設定してください。 |
Version is required. |
アプリケーションバージョンを設定してください。 |
Env must be one of... |
prod、gray、pre、common、local のいずれかを使用してください。 |
Either DatawayUrl or DatakitUrl is required. |
少なくとも 1 つの送信先アドレスを設定してください。 |
ClientToken is required when DatawayUrl is configured. |
パブリックネットワーク DataWay モードの場合は Client Token を追加してください。 |
SampleRate must be between 0 and 1. |
サンプリングレートを 0.0~1.0 の範囲に調整してください。 |
Native C/C++ の初期化または読み込みの失敗¶
- アプリケーション、インポートライブラリ、
guance_windows_native.dllがすべて同じアーキテクチャであることを確認してください。現在の vcpkg ポートは動的x64-windowsのみを提供します。他のアーキテクチャでは、対応するアーキテクチャのソースコードからビルドした成果物を使用する必要があります。 - DLL がアプリケーションディレクトリまたは Windows DLL 検索パス内に存在することを確認してください。NuGet パッケージ内の x86、x64、ARM64 各 Native ランタイムアセットは .NET ラッパー層で使用されるものであり、C/C++ のヘッダーファイルやインポートライブラリとは異なります。
- 最初に
guance_sdk_config_init()を呼び出し、その後アドレス、Token、アプリケーション ID、サービス名、バージョン、環境を設定してください。 - パブリックネットワーク DataWay の場合はアドレスと Client Token が必要です。ローカル環境(Datakit)にデプロイする場合は、アクセス可能な Datakit アドレスを設定してください。
guance_sdk_init()が空の Handle を返す場合は、必須項目、キャッシュディレクトリの権限、プロセスアーキテクチャを確認してください。
SDK は正常に動作しているがデータがない¶
コンソールに RUM データがない¶
以下の項目を順に確認してください:
- App ID が現在のワークスペースの「カスタム」アプリケーションと一致しているか。
- パブリックネットワーク DataWay に、正しいベースアドレスと Client Token の両方が設定されているか。
- ローカル環境(Datakit)にアプリケーションプロセスからアクセス可能で、RUM コレクターが有効になっているか。
- RUM の
SampleRateまたはsample_rateが0より大きいか。 - View がすでに開始されているか、対応する自動収集が有効になっているか。
- アプリケーション終了前に、待機またはクローズ API の呼び出しが行われているか。
var snapshot = GuanceSdk.GetDiagnosticsSnapshot();
Console.WriteLine(
$"sampled={snapshot.SessionSampled}, " +
$"enqueued={snapshot.RumEventsEnqueued}, " +
$"uploaded={snapshot.RumUploadSuccessCount}, " +
$"retry={snapshot.RumUploadRetryCount}, " +
$"terminal={snapshot.RumUploadTerminalFailureCount}, " +
$"lastStatus={snapshot.LastRumUploadStatusCode}, " +
$"lastError={snapshot.LastRumUploadError}");
guance_sdk_diagnostics diagnostics{};
if (guance_sdk_get_diagnostics(rum, &diagnostics)) {
printf("queued=%lld uploaded=%lld retries=%lld status=%lld error=%lld\n",
static_cast<long long>(diagnostics.rum_events_enqueued),
static_cast<long long>(diagnostics.rum_upload_success_count),
static_cast<long long>(diagnostics.rum_upload_retry_count),
static_cast<long long>(diagnostics.last_rum_upload_status_code),
static_cast<long long>(diagnostics.last_rum_upload_error_code));
}
エンキューカウントが 0 の場合は、まずサンプリング、View、収集スイッチを確認してください。リトライが増加し続ける場合は、ネットワーク、プロキシ、DNS、送信先アドレスを確認してください。最終失敗が増加する場合は、Token、権限、サーバー側のステータスコードを確認してください。
デスクトップ UI に View や Action がない¶
WPF および WinForms¶
- 最初のウィンドウが作成される前に
EnableAutomaticInstrumentation()を呼び出してください。 EnableWpfまたはEnableWinFormsが無効になっていないか確認してください。- 重要なコントロールには、安定した
Name、タイトル、またはアクセシビリティ名を設定してください。 - 動的 WinForms コントロールは Application Idle 時にスキャンされます。メッセージループが長時間アイドル状態にならない場合、検出が遅れる可能性があります。
WinUI 3¶
WinUI 3 ウィンドウは Activate() の前に明示的に関連付ける必要があります。マルチウィンドウアプリケーションでは、各ウィンドウを個別に関連付けてください:
window = new MainWindow().UseGuanceRum("MainWindow");
// または GuanceSdk.AttachWinUIWindow(window, "MainWindow");
window.Activate();
Native C/C++¶
- ウィンドウ作成後に
guance_rum_start_view()を呼び出し、ウィンドウクローズ前にguance_rum_stop_view()を呼び出してください。 - Action は、コマンド、メニュー、または入力メッセージ処理の境界で明示的に開始および終了する必要があります。
- UI Watchdog は、現在のプロセスが所有する有効なトップレベル
HWNDを必要とします。 - Native SDK は汎用のウィンドウフックやコントロールフックをインストールしないため、すべての MFC やカスタムフレームワークのイベントを自動検出することはできません。
ログデータがない¶
GuanceConfig.Loggingが設定されており、EnableCustomLog = trueであることを確認してください。SampleRate、LevelFilters、およびメッセージが 30 KiB UTF-8 の上限を超えていないか確認してください。System.Diagnostics.Traceの出力は SDK によって自動転送されません。アプリケーションの既存のログ出力ポイントで、明示的にAddLog()またはAddLogs()を呼び出してください。GetLogDiagnosticsSnapshot()を読み取り、設定、サンプリング、レベル、容量による破棄の各カウントを確認してください。
- 最初に
guance_log_config_init()を呼び出し、次にguance_log_configure()を呼び出してください。 enable_custom_logが1であること、およびsample_rateとlevel_filter_maskを確認してください。- Native SDK は Console、ETW、サードパーティのログライブラリを自動的にインターセプトしません。既存のログ出力ポイントで
guance_log_add()またはguance_log_add_batch()を呼び出してください。 guance_log_get_diagnostics()を使用して、エンキュー、破棄、リトライ、および最終ステータスコードを確認してください。
ログと RUM は独立したキューを使用します。RUM が正常でもログが有効であるとは限りません。その逆も同様です。
リクエストに Trace Header がない¶
EnableAutoTraceまたはenable_auto_traceが有効になっているか確認してください。- サンプリングレートが
0ではないこと、および対象 URL がShouldTraceまたはshould_traceを通過しているか確認してください。 - サーバー側が要求する伝搬フォーマットと
TraceTypeまたはtrace_typeが一致しているか確認してください。 - Trace Header は選択されたフォーマットによって決まります。
trace_idという名前の HTTP Header だけを探さないでください。 - 信頼できない送信先に Trace Header を公開しないでください。
自動診断サブスクリプションには AutomaticInstrumentationOptions.EnableHttpClient = true が必要です。カスタム HttpClient パイプラインでは、GuanceSdk.CreateHttpMessageHandler() を明示的に使用できます。
WinHTTP リクエストには guance_rum_winhttp.hpp アダプターを使用する必要があります。他の HTTP ライブラリでは、guance_trace_create_context() を呼び出し、返された Header をリクエストに書き込む必要があります。
リクエストにすでに同名の Trace Header が存在する場合は、SDK が注入した後に HTTP ライブラリやビジネスコードがそれを上書きしていないか確認してください。
Trace または Log が RUM に関連付けられていない¶
- Trace/Log 設定の
EnableLinkRumDataまたはenable_link_rum_dataをそれぞれ有効にしてください。 - アクティブな View または Action が存在する状態でリクエストを送信するか、ログを書き込んでください。SDK はすでに終了したコンテキストを遡及的に変更しません。
- Trace 関連付け情報は、対応する RUM Resource に書き込まれます。Windows SDK は独立して APM Span をアップロードしないため、Trace コンソールに Span がなくても、Header の注入が失敗したとは限りません。
WebView2 にページデータがない¶
- WebView2 Runtime がインストールされており、コントロールが
EnsureCoreWebView2Async()を完了できるか確認してください。 EnableWebView = trueであること、またはAttachWebView()が明示的に呼び出されていることを確認してください。- 動的コントロールの場合は、初期化完了後に明示的に関連付けることをお勧めします。
- コントロールが
UnloadedまたはDisposedになった後は、新しいインスタンスで再度関連付ける必要があります。 - 診断リスナーを登録し、
WebView2 initialization failedまたはdid not succeedを確認してください。
同じコントロールに対して AttachWebView() を繰り返し呼び出しても、再注入は行われません。ページ自体がすでに Browser RUM を初期化している場合は、同じページイベントを手動で重複して報告しないでください。
Electron にデータがない¶
まず、アプリケーションがどの Electron 接続方式を採用しているか確認してください。2 つの方式では Session とアップロードの所有者が異なり、設定を混在させることはできません。
- GuanceCloud vcpkg レジストリが設定されていること、およびマニフェストで
guance-windows-nativeのelectron-bridgeFeature が有効になっていることを確認してください。現在は動的x64-windowsのみをサポートしています。 - 開発環境では
vcpkg_installed/x64-windows/tools/guance-windows-native/を確認してください。パッケージング環境ではresources/native/を確認してください。両方のディレクトリにguance_windows_electron_bridge.exeとguance_windows_native.dllの両方が存在する必要があります。 - Bridge を起動する際は、
cwdを EXE と DLL が存在するディレクトリに設定し、完全な Native 設定を行い、stdout に[Guance.RUM.NativeBridge] readyが表示されるか確認してください。終了コード2は送信先アドレスまたは RUM Application ID の欠落を示し、終了コード3は Native Core の初期化またはログ設定の失敗を示します。 - Browser RUM/Logs は監視対象の Renderer でのみ初期化されます。各ウィンドウには Preload のインストール、信頼できる
webContentsの登録、および最小限の初期化の実行が必要です。Renderer には Bridge モードに必要なプレースホルダーパラメータのみを記入し、実際の Token、アプリケーション ID、送信先アドレスは記入しないでください。 - Renderer の DevTools Network に RUM、Log、Replay の直接送信リクエストが表示されないようにしてください。固定の IPC Channel がメッセージを受信しているか、Main Process が信頼できる Renderer を受け入れているか、Native Host の stdin が書き込み可能かを確認してください。
- Native Host の RUM、Log、Replay のエンキューカウント、アップロードステータスコード、リトライ、最終失敗カウントを確認してください。アプリケーション終了時は
shutdown()が完了するまで待機し、キュー内のデータが失われないようにしてください。
Bridge は Electron Main Process のクラッシュを自動的にキャプチャできません。Renderer の unresponsive および render-process-gone は、Main Process がリッスンし、信頼できる Bridge コマンドに変換する必要があります。完全な接続方法については、Electron 監視 を参照してください。
- Browser RUM は Renderer でのみ初期化され、個々の独立した Renderer ページごとに初期化が必要です。
file://ページの場合はsessionPersistence: "local-storage"を設定してください。- Main Process は自動的に RUM インスタンスをリモートページに渡しません。
- Browser RUM の
applicationId、site/datakitOrigin、Token、サンプリングレートを確認してください。 - このモードでは Windows Native Bridge は起動しません。完全なトラブルシューティング方法については、Web RUM Electron アプリケーション接続 を参照してください。
データの重複¶
- アプリケーション起動中に、対応する SDK Handle は一度だけ初期化してください。
.NETでGuanceSdk.Init()を繰り返し呼び出すと、古いクライアントが非同期に解放され、初期化の境界が重なって重複収集が発生する可能性があります。- 自動収集がすでにカバーしているコントロールの操作、
HttpClientリクエスト、または WinHTTP リクエストを手動で再度報告しないでください。 - WinUI 3 では、同じウィンドウに対して 1 つの関連付け方法のみを使用してください。
- Electron renderer は、初期化エントリが一度だけ実行されるようにしてください。
終了時にキューにデータが残っている¶
非同期クローズをトリガーした後、すぐにプロセスを終了しないでください。Native のクラッシュ Error は、次回起動時に復旧されキューに追加されますが、クラッシュしたプロセス内でネットワークアップロードが実行されることはありません。
デバッグモードを有効にする¶
テスト環境で Debug = true または debug = 1 を有効にしてください。C# では GuanceSdk.AddDiagnosticListener() を使用して、SDK レベル、ソース、メッセージを記録できます。問題を報告する際は、以下を提供してください:
- SDK バージョン、ランタイムまたはコンパイラバージョン、Windows バージョン;
- UI フレームワーク、プロセスアーキテクチャ、接続言語;
- マスク処理済みの設定;
- RUM と Log の診断カウント、ステータスコード;
- 再現可能な最小手順。
Client Token、認証 Header、Cookie、ユーザーの機密情報、またはローカルの絶対パスは提出しないでください。