スナップショット デバッガーを使用して .NET アプリケーションの例外をデバッグする
有効にすると、スナップショット デバッガーは、稼働中の .NET アプリケーションで例外が発生したときに、ソース コードと変数のデバッグ スナップショットを自動的に収集します。 Application Insights のスナップショット デバッガーでは、以下を行います。
- Web アプリからシステムによって生成されたログを監視します。
- スローされる上位の例外のスナップショットを収集します。
- 運用環境の問題を診断するために必要な情報を提供します。
スナップショット デバッガーとスナップショット アップローダー プロセスの詳細を確認してください。
サポートされているアプリケーションと環境
このセクションでは、サポートされているアプリケーションと環境を示します。
アプリケーション
スナップショット コレクションは次のアプリケーションで使用できます。
- .NET Framework 4.6.2 以降のバージョン。
- Windows 上の .NET 6.0 以降。
環境
次の環境がサポートされています。
- Azure App Service
- Azure Functions
- OS ファミリ 4 以降を実行している Azure Cloud Services
- Windows Server 2012 R2 以降で稼働している Azure Service Fabric
- Windows Server 2012 R2 以降を実行している Azure Virtual Machines および Azure Virtual Machine Scale Sets
- Windows Server 2012 R2 以降または Windows 8.1 以降を実行しているオンプレミスの仮想マシンまたは物理マシン
Note
クライアント アプリケーション (たとえば、WPF、Windows フォーム、または UWP) はサポートされません。
スナップショット デバッガーを使うための前提条件
パッケージと構成
- Snapshot Collector NuGet パッケージをアプリケーションに含めます。
ApplicationInsights.config
でコレクション パラメーターを構成します。
アクセス許可
- ターゲット Application Insights スナップショットの Application Insights スナップショット デバッガー ロールに自分が追加されていることを確認します。
スナップショット デバッガーのしくみ
スナップショット デバッガーは、Application Insights テレメトリ プロセッサとして実装されています。 アプリケーションが実行されると、スナップショット デバッガー テレメトリ プロセッサがアプリケーションのシステムで生成されたログ パイプラインに追加されます。
重要
スナップショットには、変数やパラメーターの値に個人データなどの機密情報が含まれている場合があります。 スナップショット データは、自分の Application Insights リソースと同じリージョンに格納されます。
スナップショット デバッガー プロセス
スナップショット デバッガー プロセスの開始と終了には TrackException
メソッドを使います。 プロセス スナップショットは実行中のプロセスの一時停止されたクローンであるため、ユーザー側の中断はほとんど発生しません。 一般的なシナリオ:
アプリケーションから
TrackException
がスローされます。スナップショット デバッガーは、
AppDomain.CurrentDomain.FirstChanceException
イベントをサブスクライブすることで、スローされた例外を監視します。その問題 ID のカウンターが増分されます。
- カウンターが
ThresholdForSnapshotting
値に達すると、問題 ID が収集計画に追加されます。
Note
ThresholdForSnapshotting
の既定の最小値は 1 です。 この値の場合、スナップショットが作成される前に、アプリは同じ例外を "2 回" トリガーする必要があります。- カウンターが
例外イベントの問題 ID が計算され、収集計画の問題 ID と比較されます。
一致する問題 ID があれば、実行中のプロセスのスナップショットが作成されます。
- スナップショットには一意の識別子が割り当てられ、例外にはその識別子を使用してスタンプされます。
Note
スナップショットの作成速度は
SnapshotsPerTenMinutesLimit
設定によって制限されます。 既定では、10 分ごとに 1 つのスナップショットが上限です。FirstChanceException
ハンドラーが戻った後、スローされた例外は通常どおり処理されます。例外は再び
TrackException
メソッドに到達し、スナップショット識別子と共に Application Insights に報告されます。
Note
Visual Studio でデバッグ中にスナップショットを生成する場合は、IsEnabledInDeveloperMode
を true
に設定します。
スナップショット アップローダー プロセス
スナップショット デバッガー プロセスが実行を継続し、ほとんど中断することなくユーザーにトラフィックを提供する間に、スナップショットはスナップショット アップローダー プロセスに渡されます。 一般的なシナリオでは、スナップショット アップローダーは次の操作を行います。
ミニダンプを作成します。
関連するシンボル (.pdb) ファイルと共にミニダンプを Application Insights にアップロードします。
Note
1 日あたり 50 個を超えるスナップショットをアップロードすることはできません。
スナップショット デバッガーを有効にしたのにスナップショットが表示されない場合は、「トラブルシューティング ガイド」を参照してください。
スナップショット デバッガーのアップグレード
スナップショット デバッガーは、組み込みのプレインストールされた Application Insights サイト拡張機能を介して自動的にアップグレードされます。
スナップショット デバッガーを最新の状態に保つために Application Insights サイト拡張機能を手動で追加することは、非推奨となりました。
間接費
スナップショット デバッガーは、運用環境で使用するように設計されています。 既定の設定には、アプリケーションへの影響を最小限に抑えるためのレート制限が含まれています。
ただし、次のようなときに、スナップショット デバッガーに伴う CPU、メモリ、および I/O のオーバーヘッドがわずかに発生することがあります。
- アプリケーションで例外がスローされたとき
- 例外ハンドラーがスナップショットの作成を決定した場合
TrackException
が呼び出されたとき
スナップショット デバッガーによってキャプチャされたデータを保存するための追加コストはありません。
スナップショット デバッガーのオーバーヘッドが発生する可能性があるシナリオの例を参照してください。
制限事項
このセクションでは、スナップショット デバッガーの制限事項について説明します。
データ保持
デバッグ スナップショットは 15 日間格納されます。 デフォルトのデータ保持ポリシーは、アプリケーションごとに設定されます。 この値を増やす必要がある場合は、Azure portal でサポート ケースを開くことによって増加を要求できます。 Application Insights のインスタンスごとに、1 日あたり最大 50 個のスナップショットが許可されます。
シンボルを発行する
スナップショット デバッガーでは、運用サーバー上のシンボル ファイルが次の処理を行う必要があります。
- 変数をデコードする
- Visual Studio でデバッグ エクスペリエンスを提供する
Visual Studio 2017 のバージョン 15.2 以降では、App Service に公開する際に、既定でリリース ビルドのシンボルを公開します。
以前のバージョンでは、シンボルがリリース モードで公開されるように、発行プロファイルの
.pubxml
ファイルに次の行を追加する必要があります。<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Azure Compute および他のタイプでは、シンボル ファイルが次のいずれかであることを確認してください。
- メイン アプリケーション
.dll
の同じフォルダー (通常はwwwroot/bin
) にあること、または - 現在のパスで使用できること。
使用できるさまざまなシンボル オプションについて詳しくは、Visual Studio のドキュメントをご覧ください。 最良の結果を得るために、Full、Portable、または Embedded を使用することをお勧めします。
最適化されたビルド
場合によっては、JIT コンパイラによって適用される最適化のために、リリース ビルドでローカル変数を表示できないことがあります。
ただし、App Service では、スナップショット デバッガーが収集計画の一部であるスロー方法を非最適化する可能性があります。
ヒント
Application Insights サイト拡張機能を App Service のインスタンスにインストールして、非最適化のサポートを得ます。
次のステップ
次のアプリケーションに対して Application Insights スナップショット デバッガーを有効にします。