Application Insights Snapshot Debugger の有効化やスナップショットの表示に関する問題のトラブルシューティング
アプリケーションで Application Insights スナップショット デバッガーを有効にしても、例外のスナップショットが表示されない場合は、こちらの手順を使用してトラブルシューティングを行うことができます。
スナップショットが生成されない理由としては、さまざまなことが考えられます。 まずスナップショットの正常性チェックを実行することにより、考えられるいくつかの一般的な原因を特定できます。
サポートされていないシナリオ
Snapshot Collector がサポートされていないシナリオを示します。
シナリオ | 副作用 | 推奨 |
---|---|---|
アプリケーションで Snapshot Collector SDK を直接使用する場合 (.csproj) に、事前オプション Interop を有効にしている。 | ローカル環境の Application Insights SDK (Snapshot Collector テレメトリを含む) が失われるため、利用できるスナップショットがなくなります。 起動時にアプリケーションが System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor でクラッシュするおそれがあります。Application Insights 機能 Interop の詳細については、ドキュメントを参照してください。 |
詳細オプション Interop を使用している場合は、Azure portal から有効にしたコードレス Snapshot Collector インジェクションを使用します。 |
適切なスナップショット デバッガー エンドポイントを使用していることを確認する
現在、エンドポイントの変更が必要なリージョンは Azure Government と 21Vianet によって運営される Microsoft Azure のみです。
Application Insights SDK を使用する App Service とアプリケーションでは、サポートされているスナップショット デバッガーのオーバーライドを使用して接続文字列を更新する必要があります。
接続文字列プロパティ | 米国政府のクラウド | China Cloud |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
その他の接続のオーバーライドの詳細については、Application Insights のドキュメントを参照してください。
Function App の場合は、サポートされているオーバーライドを使用して host.json
を更新する必要があります。
プロパティ | 米国政府のクラウド | China Cloud |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
米国政府のクラウド エージェント エンドポイントで更新された host.json
の例を示します。
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
スナップショットの正常性チェックを使用する
いくつかの一般的な問題により、[デバッグ スナップショットを開く] が表示されません。 古い Snapshot Collector を使用します (たとえば、1 日のアップロード上限に達した場合)。そうしないと、スナップショットのアップロードに時間がかかることがあります。 一般的な問題のトラブルシューティングには、Snapshot Health Check を使用します。
エンドツーエンドのトレース ビューの例外ウィンドウには、Snapshot Health Check に接続できるリンクが表示されます。
インタラクティブでチャットのようなインターフェイスでは、一般的な問題が検索され、問題の解決が案内されます。
それでも問題が解決しない場合は、以下の手動トラブルシューティング手順を参照してください。
インストルメンテーション キーの確認
公開したアプリケーションで、正しいインストルメンテーション キーを使用していることを確認します。 通常、インストルメンテーション キーは、ApplicationInsights.config ファイルから読み取られます。 値が、ポータルに表示される Application Insights リソースのインストルメンテーション キーと同じであることを確認します。
注意
インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。
TLS/SSL クライアント設定の確認 (ASP.NET)
ASP.NET アプリケーションが、Azure App Service または仮想マシンの IIS でホストされている場合、SSL セキュリティ プロトコルがないため、お使いのアプリケーションがスナップショット デバッガー サービスに接続できない可能性があります。
スナップショット デバッガー エンドポイントには、TLS バージョン 1.2 が必要です。 SSL セキュリティ プロトコルのセットは、web.config
の system.web
セクションの httpRuntime targetFramework
値によって有効にされる特性の 1 つです。
httpRuntime targetFramework
が 4.5.2 以下の場合、TLS 1.2 は既定では含まれていません。
注意
httpRuntime targetFramework
値は、アプリケーションのビルド時に使用されるターゲット フレームワークに依存しません。
設定を確認するには、web.config ファイルを開き、system.web セクションを見つけます。 httpRuntime
の targetFramework
が 4.6 以上に設定されていることを確認します。
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
Note
httpRuntime targetFramework
の値を変更すると、アプリケーションに適用されるランタイムの特性が変更され、その他の微妙な動作の変更が発生する可能性があります。 この変更を行った後は、アプリケーションを十分にテストするようにしてください。 互換性の変更点のすべての一覧については、「変更の再ターゲット」を参照してください。
Note
targetFramework
が 4.7 以上の場合、使用可能なプロトコルは Windows によって決定されます。 Azure App Service では、TLS 1.2 を使用できます。 ただし、独自の仮想マシンを使用している場合は、OS で TLS 1.2 を有効にすることが必要になる場合があります。
スナップショット デバッガーのオーバーヘッドのシナリオ
スナップショット デバッガーは、運用環境で使用するように設計されています。 既定の設定には、アプリケーションへの影響を最小限に抑えるためのレート制限が含まれています。
ただし、次のシナリオのように、スナップショット デバッガーに伴う、CPU、メモリ および I/O のオーバーヘッドがわずかに発生することがあります。
アプリケーションで例外がスローされたとき:
問題の種類のシグネチャを作成し、スナップショットを作成するかどうかを決定することで、CPU とメモリのわずかなオーバーヘッドが追加されます。
最適化解除が有効になっている場合、例外をスローしたメソッドの再 JIT を行うオーバーヘッドが発生します。 これは、そのメソッドが次回実行されるときに発生します。 メソッドのサイズにもよりますが、これは CPU 時間 1 ミリ秒から 100 ミリ秒の間になることがあります。
例外ハンドラーがスナップショットの作成を決定した場合:
プロセス スナップショットの作成には約 0.5 秒 (P50 = 0.3 秒、P90 = 1.2 秒、P95 = 1.9 秒) かかります。その間、例外をスローしたスレッドは一時停止されます。 他のスレッドはブロックされません。
プロセス スナップショットをミニダンプに変換し、Application Insights にアップロードすると、数分かかります。
- 変換: P50 = 63 秒、P90 = 187 秒、P95 = 275 秒。
- アップロード: P50 = 31 秒、P90 = 75 秒、P95 = 98 秒。
これは、別のプロセスで実行されるスナップショット アップローダーで行われます。 スナップショット アップローダー プロセスは、通常の CPU 優先度の下で実行され、低優先度の I/O を使用します。
ミニダンプは最初にディスクに書き込まれますが、空きディスクの容量は元のプロセスのワーキング セットとほぼ同じです。 ミニダンプを書き込むと、メモリの読み取り時にページ フォールトが発生する可能性があります。
ミニダンプはアップロード中に圧縮され、スナップショット アップローダー プロセスで CPU とメモリの両方が消費されます。 CPU、メモリ、ディスクのオーバーヘッドは、プロセス スナップショットのサイズに比例します。 スナップショット アップローダーはスナップショットを順次処理します。
TrackException
が呼び出されたとき:
スナップショット デバッガーで、例外が新しいかどうか、それに対してスナップショットが作成されているかどうかが確認されます。 これにより、わずかな CPU オーバーヘッドが追加されます。
.NET Core のプレビュー バージョン
.NET Core のプレビュー バージョンを使用している場合、またはアプリケーションによって、依存アセンブリを介して直接または間接的に Application Insights SDK が参照されている場合は、その他の環境用にスナップショット デバッガーを有効にする方法に関する記事の手順に従ってください。
診断サービスのサイト拡張機能の状態ページを確認する
スナップショット デバッガーがポータルの[Application Insights] ペインから有効にされた場合は、診断サービスのサイト拡張機能によって有効にされています。
Note
Application Insights スナップショット デバッガーのコード不要のインストールは、.NET Core サポート ポリシーに従います。 サポートされているランタイムの詳細については、.Net Core サポート ポリシーに関するページを参照してください。
この拡張機能の状態ページを確認するには、次の URL に移動します: https://{site-name}.scm.azurewebsites.net/DiagnosticServices
Note
状態ページ リンクのドメインは、クラウドによって異なります。
このドメインは App Service の Kudu 管理サイトと同じです。 状態ページには、.NET Profiler と Snapshot Collector エージェントのインストール状態が表示されます。 予期しないエラーが発生した場合は、修正方法が表示されます。
App Service の Kudu 管理サイトを使用して、この状態ページのベース URL を取得できます。
- Azure Portal で App Service アプリケーションを開きます。
- [高度なツール] を選択するか、「Kudu」を検索します。
- [Go] \(移動) を選択します。
- Kudu 管理サイトが表示されたら、URL に
/DiagnosticServices
を追加して、Enter キーを押します。https://<kudu-url>/DiagnosticServices
のように終了します
最新バージョンの NuGet にアップグレードする
スナップショット デバッガーが有効化された方法に基づいて、次のオプションを参照してください。
ポータルの [Application Insights] ウィンドウを通じて Snapshot Debugger を有効にした場合、アプリケーションでは既に最新の NuGet パッケージが実行されています。
Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージを含めることで Snapshot Debugger を有効にした場合は、Visual Studio の NuGet パッケージ マネージャーを使用して、
Microsoft.ApplicationInsights.SnapshotCollector
の最新バージョンが使用されているかどうかを確認してください。
最新の更新プログラムとバグ修正については、リリース ノートを参照してください。
アップローダー ログの確認
スナップショットの作成後、ミニダンプ ファイル (.dmp) がディスク上に作成されます。 個別アップローダー プロセスでは、そのミニダンプ ファイルを作成し、これを関連する PDB と共に Application Insights のスナップショット デバッガーのストレージにアップロードします。 ミニダンプは、正常にアップロードされた後、ディスクから削除されます。 アップローダー プロセスのログ ファイルは、ディスク上に保持されます。 App Service 環境では、これらのログは D:\Home\LogFiles
にあります。 App Service の Kudu 管理サイトを使用すると、これらのログ ファイルを検索できます。
- Azure Portal で App Service アプリケーションを開きます。
- [高度なツール] を選択するか、「Kudu」を検索します。
- [Go] \(移動) を選択します。
- [デバッグ コンソール] ドロップダウン リストで、[CMD] を選択します。
- [LogFiles] を選択します。
Uploader_
または SnapshotUploader_
で始まる名前で拡張子が .log
であるファイルが 1 つ以上表示されます。 適切なアイコンを選択してログ ファイルをダウンロードするかブラウザーで開きます。
ファイル名には、App Service インスタンスを識別する一意のサフィックスが含まれます。 App Service のインスタンスが 1 つ以上のコンピューターでホストされている場合は、コンピューターごとに個別のログ ファイルがあります。 アップローダーは、新しいミニダンプ ファイルを検出すると、ログ ファイルに記録します。 スナップショットとアップロードの成功の例を次に示します。
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
Note
先述の例は、Microsoft.ApplicationInsights.SnapshotCollector
NuGet パッケージのバージョン 1.2.0 からのものです。 以前のバージョンのアップローダー プロセスは MinidumpUploader.exe
で、ログはこれほど詳しくありません。
インストルメンテーション キーは、前の例では、c12a605e73c44346a984e00000000000
です。 この値は、アプリケーションのインストルメンテーション キーと一致する必要があります。
ミニダンプは ID 139e411a23934dc0b9ea08a626db16c5
を持つスナップショットに関連付けられています。 この ID は、後で Application Insights Analytics で関連する例外レコードを検索するために使用できます。
アップローダーは、約 15 分ごとに 1 回新しい PDB をスキャンします。 次に例を示します。
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
App Service にホストされて "いない" アプリケーションでは、アップローダー ログは、ミニダンプと同じフォルダー %TEMP%\Dumps\<ikey>
にあります (<ikey>
はインストルメンテーション キー)。
クラウド サービスのトラブルシューティング
クラウド サービスでは、既定の一時フォルダーがミニダンプ ファイルを保持するには小さすぎて、スナップショットが失われる可能性があります。
必要な領域は、アプリケーションの合計ワーキング セットと同時実行スナップショット数によって異なります。
32 ビット ASP.NET web ロールのワーキング セットは、通常は 200 MB から 500 MB です。 少なくとも 2 つの同時実行スナップショットを許可します。
たとえば、アプリケーションで 1 GB の合計ワーキング セットが使用されている場合は、スナップショットを格納するために少なくとも 2 GB のディスク領域が存在するようにする必要があります。
次の手順に従って、スナップショット専用のローカル リソースを持つクラウド サービス ロールを構成します。
クラウド サービス定義 (.csdef) ファイルを編集して、新しいローカル リソースをクラウド サービスに追加します。 次の例では、サイズが 5 GB の
SnapshotStore
というリソースを定義します。<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
ロールの起動コードを変更して、
SnapshotStore
ローカル リソースを指す環境変数を追加します。 worker ロールの場合は、コードをロールのOnStart
メソッドに追加する必要があります。public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
Web ロール (ASP.NET) の場合は、コードを Web アプリケーションの
Application_Start
メソッドに追加する必要があります。using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
ロールの ApplicationInsights.config ファイルを更新して、
SnapshotCollector
によって使用される一時フォルダーの場所をオーバーライドします。<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
シャドウ コピー フォルダーのオーバーライド
Snapshot Collector を起動すると、Snapshot Uploader プロセスを実行するのに適したディスク上のフォルダーが検索されます。 選択されたフォルダーは、シャドウ コピー フォルダーと呼ばれます。
Snapshot Collector は、いくつかのよく知られている場所を確認し、Snapshot Uploader のバイナリをコピーするアクセス許可があることを確認します。 次の環境変数が使用されます。
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
適切なフォルダーが見つからない場合は、Snapshot Collector によって " "Could not find a suitable shadow copy folder (適切なシャドウ コピー フォルダーが見つかりません)" " というエラーが報告されます。
コピーに失敗した場合、Snapshot Collector は ShadowCopyFailed
エラーを報告します。
アップローダーを起動できない場合、Snapshot Collector は UploaderCannotStartFromShadowCopy
エラーを報告します。 メッセージの本文に System.UnauthorizedAccessException
が含まれることがよくあります。 このエラーは、通常、アクセス許可が制限されたアカウントの下でアプリケーションが実行されているために発生します。 このアカウントには、シャドウ コピー フォルダーに書き込むためのアクセス許可が与えられていますが、コードを実行するためのアクセス許可が与えられていません。
これらのエラーは、通常、起動時に発生するため、"Uploader failed to start (アップローダーを起動できませんでした)" という ExceptionDuringConnect
エラーが表示されます。
これらのエラーを回避するには、ShadowCopyFolder
構成オプションを使用して、シャドウ コピー フォルダーを手動で指定します。 たとえば、ApplicationInsights.config を使用する場合は、次のように指定します。
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
または、.NET Core アプリケーションで appsettings.json を使用する場合は、次のように指定します。
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
Application Insights 検索を使用してスナップショット付きの例外を検索する
スナップショットが作成されている場合、例外がスローされるとスナップショット ID がタグ付けされます。 Application Insights に例外が報告されると、そのスナップショット ID はカスタム プロパティとして含まれます。 Application Insights の [検索] を使用すると、ai.snapshot.id
カスタム プロパティを持つすべてのレコードを見つけることができます。
- Azure Portal の Application Insights のリソースを参照します。
- [Search] を選択します。
- [検索] テキスト ボックスに
ai.snapshot.id
と入力し、Enter キーを押します。
この検索で結果が返されない場合は、選択された時間の範囲内に Application Insights に報告されたスナップショットがなかったことを示しています。
アップローダー ログから特定のスナップショット ID を検索するには、[検索] ボックスにその ID を入力します。 アップロードされたことがわかっているスナップショットのレコードを検出できない場合は、こちらの手順に従ってください。
インストルメンテーション キーを確認することにより、正しい Application Insights のリソースを探していることを再確認します。
アップローダー ログからのタイムスタンプを使用して、その時間範囲をカバーするように検索の時間範囲フィルターを調整します。
それでもそのスナップショット ID の例外が表示されない場合、例外レコードは Application Insights に報告されていません。 この状況は、スナップショットの作成後、例外レコードを報告する前に、アプリケーションがクラッシュした場合に発生する可能性があります。 この場合、Diagnose and solve problems
で App Service を確認し、予期しない再起動またはハンドルされない例外があったかどうかを確認します。
ネットワーク プロキシまたはファイアウォール規則を編集する
アプリケーションがプロキシまたはファイアウォール経由でインターネットに接続される場合は、スナップショット デバッガー サービスと通信するように規則を更新する必要がある場合があります。
Application Insights スナップショット デバッガーで使用される IP は、Azure Monitor サービス タグに含まれています。 詳細については、サービス タグに関するドキュメントを参照してください。
スナップショットを使用する場合、課金コストはありますか?
スナップショット デバッガー固有のサブスクリプションに対する料金は発生しません。 収集されたスナップショット ファイルは、Application Insights SDK によって収集されたテレメトリとは別に保存され、スナップショットのインジェストまたはストレージに対する料金は発生しません。