スナップショット デバッガーを使用して .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 個を超えるスナップショットをアップロードすることはできません。
スナップショット デバッガーを有効にしたのにスナップショットが表示されない場合は、「トラブルシューティング ガイド」を参照してください。
制限事項
このセクションでは、スナップショット デバッガーの制限事項について説明します。
データ保持
デバッグ スナップショットは 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 スナップショット デバッガーを有効にします。
- Azure App Service
- Azure Functions
- Azure Cloud Services
- Azure Service Fabric
- Azure Virtual Machines と Virtual Machine Scale Sets
- オンプレミスの仮想マシンまたは物理マシン
Microsoft.ApplicationInsights.SnapshotCollector
のリリース ノート
このセクションでは、Application Insights スナップショット デバッガーで使用される、.NET アプリケーション向け Microsoft.ApplicationInsights.SnapshotCollector
NuGet パッケージのリリース ノートを記載します。
.NET アプリケーション向け Application Insights スナップショット デバッガーの詳細については、こちらを参照してください。
バグ レポートとフィードバックについては、GitHub でイシューをオープンしてください。
Note
インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。
1.4.6
.NET 8 アプリケーションを使用する際の回帰に対処するためのポイント リリース。
バグ修正
- .NET 8 で動的に生成されたメソッド (たとえば、コンパイルされた式ツリーなど) からスローされた例外が正しく追跡されなません。 固定。
1.4.5
ユーザーから報告されたバグに対処するためのポイント リリース。
バグ修正
- 一部の PDB を読み取る際の AccessViolationException を修正しました。
変更点
- ReadMe を NuGet パッケージに追加しました。
- msdia140.dll を更新しました。
1.4.4
ユーザーから報告されたバグに対処するためのポイントリリース。
バグの修正
[変更点]
- PDB スキャンのエラー メッセージの重大度をエラーから警告に下げました。
- msdia140.dll を更新しました。
- サイト拡張機能の設定でデバッガーが無効になっている場合、サービス接続が行われません。
1.4.3
ユーザーから報告されたバグに対処するためのポイントリリース。
バグの修正
- IMDS 依存関係を依存関係トラッカーから非表示にするを修正しました。
- ArgumentException: telemetryProcessorTypedoes は ITelemetryProcessor を実装しません。を修正しました。
相互運用機能が有効になっている場合、SDK 経由で使用される Snapshot Collector はサポートされません。 サポートされていないシナリオの詳細を参照してください。
1.4.2
ユーザーから報告されたバグに対処するためのポイント リリース。
バグの修正
ArgumentException: デリゲートは同じ型である必要があるという問題を修正しました。
1.4.1
1\.4.0 で導入された破壊的変更を元に戻すためのポイント リリース。
バグの修正
WebJobs でメソッドが見つからないという問題を修正しました。
1.4.0
複数の機能強化に対処し、Application Insights インジェスト用の Microsoft Entra 認証のサポートを追加しました。
変更点
- Snapshot Collector パッケージのサイズを 10.34 MB から 4.11 MB に 60% 縮小しました。
- Snapshot Collector では netstandard2.0 のみをターゲットにしました。
- Application Insights SDK の依存関係を 2.15.0 に上げました。
- ダンプを書き込むときの
MinidumpWithThreadInfo
を再度追加しました。 - 破壊的変更時の Snapshot Collector エージェントと Snapshot Uploader 間の同期を向上させるために、
CompatibilityVersion
を追加しました。 - App Service のファイル I/O が過剰にならないように、
SnapshotUploader
LogFile の名前付けアルゴリズムを変更しました。 - アップロードされる BLOB メタデータに
pid
、role name
、およびprocess start time
を追加しました。 - Snapshot Collector と Snapshot Uploader で
System.Diagnostics.Process
を使用しました。
新機能
Microsoft Entra 認証を SnapshotCollector
に追加しました。 Application Insights での Microsoft Entra 認証の詳細については、Application Insights に対する Microsoft Entra 認証に関するページを参照してください。
1.3.7.5
1\.4.0-pre から修正プログラムをバックポートするポイント リリース。
バグの修正
シャットダウン時の ObjectDisposedException を修正しました。
1.3.7.4
App Service のコードなしアタッチ シナリオのテストで検出された問題に対処するポイント リリース。
[変更点]
netcoreapp3.0
ターゲットが、Microsoft.ApplicationInsights.AspNetCore
>= 2.1.1 (以前は >= 2.1.2) に依存するようになりました。
1.3.7.3
影響の大きい 2 つの問題を解決するためのポイント リリース。
バグの修正
- wwroot/bin フォルダーでの PDB 検出が修正されました。これは、1.3.6 でシンボル検索アルゴリズムを変更したときに破損しました。
- テレメトリで頻繁に発生する
ExtractWasCalledMultipleTimesException
が修正されました。
1.3.7
[変更点]
SnapshotCollector
の netcoreapp2.0
ターゲットは、Microsoft.ApplicationInsights.AspNetCore
>= 2.1.1 に (再度) 依存します。 この変更により、1.3.5 以前の動作に戻ります。 1.3.6 でアップグレードしようとしましたが、一部の App Service シナリオが破損しました。
新機能
Snapshot Collector が、APPLICATIONINSIGHTS_CONNECTION_STRING 環境変数または TelemetryConfiguration
からConnectionString
を読み取り、解析するようになりました。 これは主に、スナップショット サービスに接続する際にエンドポイントを設定するために使用されます。 詳細については、接続文字列に関するドキュメントを参照してください。
バグの修正
互換性のない SecurityProtocol
(TLS 1.2 が必要) が原因で、一部の環境で WebRequest
が失敗していたため、net45
を除くすべてのターゲットに対して HttpClient
を使用するように切り替えました。
1.3.6
[変更点]
SnapshotCollector
が、すべてのターゲット フレームワークに対してMicrosoft.ApplicationInsights
>= 2.5.1 に依存するようになりました。 アプリケーションが以前のバージョンの Microsoft.ApplicationInsights SDK に依存している場合、この要件は破壊的変更になる可能性があります。- Snapshot Uploader で TLS 1.0 と 1.1 のサポートが除去されました。
- PDB スキャンの既定期間が、15 分ではなく 24 時間になりました。
SnapshotCollectorConfiguration
のPdbRescanInterval
を使用して構成できます。 - PDB スキャンで、再帰的ではなく、最上位レベルのフォルダーのみ検索されるようになりました。 シンボルがバイナリ フォルダーのサブフォルダーにある場合、この変更は破壊的変更になる可能性があります。
新機能
- logs フォルダーが古いファイルで一杯にならないようにするための
SnapshotUploader
でのログ ローテーション。 - .NET Core 3.0 アプリケーションの (アタッチでの ReJIT による) 非最適化のサポート。
- NuGet パッケージにシンボルを追加しました。
- ミニダンプをアップロードするときに、メタデータを追加で設定します。
SnapshotCollectorTelemetryProcessor
にInitialized
プロパティを追加しました。 これはCancellationToken
であり、Snapshot Collector が初期化され、サービスエンド ポイントに接続するとキャンセルされます。- 動的に生成されたメソッドでの例外に対してスナップショットをキャプチャできるようになりました。 例として、Entity Framework のクエリによって生成されるコンパイル済みの式ツリーなどがあります。
バグの修正
- Status Monitor を原因とする Snapshot Collector 読み込み時の
AmbiguousMatchException
。 GetSnapshotCollector
拡張メソッドで、すべてのTelemetrySinks
が検索されるようになりました。- サポートされていないプラットフォームで Snapshot Uploader を開始しない。
- 動的メソッドの非最適化時に
InvalidOperationException
を処理 (たとえば、Entity Framework)。
1.3.5
- ソブリン クラウドのサポートが追加されました (以前のバージョンはソブリン クラウドでは動作しません)。
AddSnapshotCollector()
を使用することで、Snapshot Collector を簡単に追加できるようになりました。 詳細については、「Azure App Service で .NET アプリでスナップショット デバッガーを有効にする」を参照してください。- BLOB ブロックの確認に FISMA MD5 設定を使用。 この設定により、既定の .NET MD5 暗号アルゴリズム (OS が FIPS 準拠モードに設定されている場合には使用できない) が回避されます。
- 関数呼び出しを非最適化するときに .NET Framework フレームを無視。
DeoptimizeIgnoredModules
の構成設定を使用して、この動作を制御します。 - 複数の関数呼び出しを非最適化できる
DeoptimizeMethodCount
構成設定を追加しました。
1.3.4
- 構造化されたインストルメンテーション キーを許可しました。
- Snapshot Uploader の堅牢性が向上しました。 古いアップローダー ログを移動できない場合でも、スタートアップが続行されます。
- SnapshotUploader.exe が即座に終了したときの追加のテレメトリの報告を再有効化しました (1.3.3 では無効化されていました)。
- 内部テレメトリを簡素化しました。
- 試験的な機能: スナップポイント コレクション プラン。
snapshotOnFirstOccurence
を追加します。 詳しくは、こちらの GitHub の記事をご覧ください。
1.3.3
SnapshotUploader.exe が応答を停止し、.NET Core アプリのスナップショットがアップロードされないという問題の原因になっていたバグを修正しました。
1.3.2
- 試験的な機能: スナップポイント コレクション プラン。 詳しくは、こちらの GitHub の記事をご覧ください。
SnapshotCollector
の読み込み元のAppDomain
がランタイムによってアンロードされると、処理が終了するのを待たずに、SnapshotUploader.exe が終了します。 このアクションにより、IIS でホストされている場合のコレクターの信頼性が向上します。- 同じインストルメンテーション キーを使用している複数の
SnapshotCollector
インスタンスが同じSnapshotUploader
プロセス:ShareUploaderProcess
を共有できるように構成を追加しました (既定でtrue
)。 - SnapshotUploader.exe が即座に終了したときに、追加のテレメトリを報告するようにしました。
- SnapshotUploader.exe がディスクへの書き込みを行うときに必要となるサポート ファイルの数を削減しました。
1.3.1
- RtlCloneUserProcess API を使用してスナップショットを収集するためのサポートを削除し、PssCaptureSnapshots API のみをサポートするようにしました。
- 10 分間でキャプチャできるスナップショットの既定の制限数を 1 から 3 に増加しました。
- SnapshotUploader.exe で TLS 1.1 および1.2 のネゴシエートが可能です。
SnapshotUploader
が警告またはエラーをログに記録したときに追加のテレメトリを報告するようにしました。- バックエンド サービスが 1 日あたりのクォータに達したことを報告したときに、スナップショットの作成を停止します (1 日あたり 50 のスナップショット)。
- 2 つのインスタンスが同時に実行されないようにするために、SnapshotUploader.exe にチェックを追加しました。
1.3.0
[変更点]
- .NET Framework をターゲットとするアプリケーションで、Snapshot Collector が Microsoft.ApplicationInsights バージョン 2.3.0 以降に依存するようになりました。 以前は 2.2.0 以降が使用されていました。 この変更は、ほとんどのアプリケーションでは問題にならないと考えられます。 この変更が最新の Snapshot Collector の使用の妨げになる場合は、お知らせください。
- 失敗したアップロードを再試行するときに、Snapshot Uploader で指数バックオフ遅延を使用。
- テレメトリでのレポート作成の信頼性を高めるために、
ServerTelemetryChannel
を使用します (使用可能な場合)。 - 依存関係の追跡で無視されるように、スナップショット デバッガー サービスへの初期接続時に
SdkInternalOperationsMonitor
を使用します。 - スナップショット デバッガーへの初期接続に関するテレメトリを改善しました。
- 次の詳細なテレメトリを報告します。
- App Service バージョン。
- Azure コンピューティング インスタンス。
- コンテナー。
- Azure Functions アプリ。
バグの修正
- 問題カウンターのリセット間隔が 24 日に設定されている場合に、24 時間と解釈される。
- スナップショットの破棄中に例外が発生した場合に、Snapshot Uploader が新しいスナップショットの処理を停止するというバグを修正。
1.2.3
Snapshot Uploader バイナリでの厳密な名前の署名を修正しました。
1.2.2
[変更点]
- SnapshotUploader(64).exe に必要なファイルが、メイン DLL にリソースとして埋め込まれるようになりました。 これにより、
SnapshotCollectorFiles
フォルダーが作成されなくなり、ビルドとデプロイが簡略化され、ソリューション エクスプローラーでの煩雑さが軽減されます。 アップグレード時には、.csproj
ファイルの変更を入念に確認してください。Microsoft.ApplicationInsights.SnapshotCollector.targets
ファイルは不要になりました。 ProvideAnonymousTelemetry
が false に設定されている場合でも、テレメトリが Application Insights リソースに記録されます。 この変更は、Azure portal に正常性チェック機能を実装できるようにするための措置です。ProvideAnonymousTelemetry
は、製品のサポートと改善のためにマイクロソフトに送信されるテレメトリにのみ影響します。TempFolder
またはShadowCopyFolder
が環境変数にリダイレクトされるとき、これらの環境変数が設定されるまでコレクターをアイドル状態のまま維持します。- プロキシ サーバー経由でインターネットに接続するアプリケーションで、Snapshot Collector はプロキシ設定を自動検出し、SnapshotUploader.exe に渡します。
SnapshotUploader
プロセスの優先順位を下げます (可能な場合)。 この優先順位はIsLowPrioirtySnapshotUploader
オプションを使用してオーバーライドできます。- プログラムを使用して Snapshot Collector を構成するシナリオのために、
GetSnapshotCollector
拡張メソッドをTelemetryConfiguration
に追加しました。 - 顧客向けのテレメトリで (アプリケーションのバージョンではなく) Application Insights SDK のバージョンを設定。
- 2 分後に最初のハートビート イベントを送信。
バグの修正
- 例外に null 値または不変のデータ ディクショナリが含まれている場合の
NullReferenceException
を修正しました。 - アップローダーで、共有違反が発生した場合に、PDB の照合を数回再試行。
- スタートアップ時に複数のスレッドがテレメトリ パイプラインに呼び出されたときの重複するテレメトリを修正。
1.2.1
[変更点]
- XML ドキュメント コメント ファイルが NuGet パッケージに含まれるようになりました。
- 頻繁に発生する例外があることがわかっていて、それに対してスナップショットが作成されないようにする場合のために、
ExcludeFromSnapshotting
拡張メソッドをSystem.Exception
に追加しました。 - 既定で true に設定される
IsEnabledWhenProfiling
構成プロパティを追加しました。 これは、Application Insights Profiler が詳細なコレクションを実行した場合に、スナップショットの作成が一時的に無効化された以前のバージョンからの変更点です。 以前の動作を復元するには、このプロパティをfalse
に設定します。
バグの修正
- SnapshotUploader64.exe に適切に署名します。
- テレメトリ プロセッサの二重の初期化を防止。
- 複数のパイプラインがあるアプリで、テレメトリの二重のログ記録を防止。
- 収集計画の期限切れ日時に関するバグ (24 時間後にスナップショットが妨げられる場合がある) を修正しました。
1.2.0
このバージョンでの最大の変更 (したがって、新しいマイナー バージョン番号に移行) は、スナップショットの作成および処理パイプラインの更新です。 以前のバージョンでは、この機能は、ネイティブ コード (ProductionBreakpoints.dll* および SnapshotHolder.exe*) で実装されていました。 新しい実装は、すべて P/Invoke を使用したマネージド コードです。
新しいパイプラインを使用したこの最初のバージョンでは、動作は元の動作から大幅には変わっていません。 新しい実装では、より適切なエラー報告ができるようになり、今後の改善のための用意ができました。
このバージョンのその他の変更
- MinidumpUploader.exe の名前が SnapshotUploader.exe (または SnapshotUploader64.exe) に変更されました。
- DeOptimize/ReOptimize 要求にタイミング テレメトリを追加。
- ミニダンプ アップロードのための gzip 圧縮を追加。
- PDB がロックされ、サイトのアップグレードが妨げられる問題を修正。
- シャドウ コピー時に元のフォルダー名 (SnapshotCollectorFiles) をログに記録します。
- OOM が原因のサイトの再起動を防止するために、64 ビット プロセスのメモリ制限を調整しました。
- 無効化後もスナップショットが収集される問題を修正しました。
- 顧客の AI リソースにハートビート イベントを記録。
- 問題 ID から "ソース" を削除することで、スナップショットの速度を向上しました。
1.1.2
[変更点]
- 使用状況テレメトリを拡張しました。
- .NET バージョンと OS を検出して報告します。
- より多くの Azure 環境 (Azure Cloud Services、Azure Service Fabric) を検出して報告します。
- ハートビート テレメトリでの例外メトリック (初回例外の数と
TrackException
呼び出しの数) を記録して報告します。
バグの修正
- 内部例外 (Win32Exception) がスローされない
SqlException
の処理を修正します。 - シンボル フォルダーの末尾スペースのトリミング。これが原因で、
MinidumpUploader
へのコマンドライン引数が正しく解析されませんでした。 - スナップショット デバッガー エージェントのエンドポイントへの接続失敗時に無限に再試行されるのを防止しました。
1.1.0
[変更点]
- ホスト メモリの保護を追加。 この機能により、ホスト コンピューターのメモリへの影響が軽減されます。
- Azure portal スナップショットの表示エクスペリエンスを改善しました。