スナップショット デバッガーを使用して .NET アプリケーションの例外をデバッグする

有効にすると、スナップショット デバッガーは、稼働中の .NET アプリケーションで例外が発生したときに、ソース コードと変数のデバッグ スナップショットを自動的に収集します。 Application Insights のスナップショット デバッガーでは、以下を行います。

  • Web アプリからシステムによって生成されたログを監視します。
  • スローされる上位の例外のスナップショットを収集します。
  • 運用環境の問題を診断するために必要な情報を提供します。

スナップショット デバッガーとスナップショット アップローダー プロセスの詳細を確認してください。

サポートされているアプリケーションと環境

このセクションでは、サポートされているアプリケーションと環境を示します。

アプリケーション

スナップショット コレクションは次のアプリケーションで使用できます。

  • .NET Framework 4.6.2 以降のバージョン。
  • Windows 上の .NET 6.0 以降

環境

次の環境がサポートされています。

Note

クライアント アプリケーション (たとえば、WPF、Windows フォーム、または UWP) はサポートされません。

スナップショット デバッガーを使うための前提条件

パッケージと構成

アクセス許可

スナップショット デバッガーのしくみ

スナップショット デバッガーは、Application Insights テレメトリ プロセッサとして実装されています。 アプリケーションが実行されると、スナップショット デバッガー テレメトリ プロセッサがアプリケーションのシステムで生成されたログ パイプラインに追加されます。

重要

スナップショットには、変数やパラメーターの値に個人データなどの機密情報が含まれている場合があります。 スナップショット データは、自分の Application Insights リソースと同じリージョンに格納されます。

スナップショット デバッガー プロセス

スナップショット デバッガー プロセスの開始と終了には TrackException メソッドを使います。 プロセス スナップショットは実行中のプロセスの一時停止されたクローンであるため、ユーザー側の中断はほとんど発生しません。 一般的なシナリオ:

  1. アプリケーションから TrackException がスローされます。

  2. スナップショット デバッガーは、AppDomain.CurrentDomain.FirstChanceException イベントをサブスクライブすることで、スローされた例外を監視します。

  3. その問題 ID のカウンターが増分されます。

    • カウンターが ThresholdForSnapshotting 値に達すると、問題 ID が収集計画に追加されます。

    Note

    ThresholdForSnapshotting の既定の最小値は 1 です。 この値の場合、スナップショットが作成される前に、アプリは同じ例外を "2 回" トリガーする必要があります。

  4. 例外イベントの問題 ID が計算され、収集計画の問題 ID と比較されます。

  5. 一致する問題 ID があれば、実行中のプロセスのスナップショットが作成されます。

    • スナップショットには一意の識別子が割り当てられ、例外にはその識別子を使用してスタンプされます。

    Note

    スナップショットの作成速度は SnapshotsPerTenMinutesLimit 設定によって制限されます。 既定では、10 分ごとに 1 つのスナップショットが上限です。

  6. FirstChanceException ハンドラーが戻った後、スローされた例外は通常どおり処理されます。

  7. 例外は再び TrackException メソッドに到達し、スナップショット識別子と共に Application Insights に報告されます。

Note

Visual Studio でデバッグ中にスナップショットを生成する場合は、IsEnabledInDeveloperModetrue に設定します。

スナップショット アップローダー プロセス

スナップショット デバッガー プロセスが実行を継続し、ほとんど中断することなくユーザーにトラフィックを提供する間に、スナップショットはスナップショット アップローダー プロセスに渡されます。 一般的なシナリオでは、スナップショット アップローダーは次の操作を行います。

  1. ミニダンプを作成します。

  2. 関連するシンボル (.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 のドキュメントをご覧ください。 最良の結果を得るために、FullPortable、または Embedded を使用することをお勧めします。

  • 最適化されたビルド

    場合によっては、JIT コンパイラによって適用される最適化のために、リリース ビルドでローカル変数を表示できないことがあります。

    ただし、App Service では、スナップショット デバッガーが収集計画の一部であるスロー方法を非最適化する可能性があります。

    ヒント

    Application Insights サイト拡張機能を App Service のインスタンスにインストールして、非最適化のサポートを得ます。

次のステップ

次のアプリケーションに対して Application Insights スナップショット デバッガーを有効にします。