Application Insights Profiler for .NET のトラブルシューティング
この記事では、Application Insights Profiler for .NET を使用できるようにするトラブルシューティングの手順と情報を示します。
適切な .NET Profiler エンドポイントを使用していますか?
現在、エンドポイントの変更が必要なリージョンは Azure Government と 21Vianet によって運営される Microsoft Azure のみです。
アプリ設定 | 米国政府のクラウド | China Cloud |
---|---|---|
ApplicationInsightsProfilerEndpoint | https://profiler.monitor.azure.us |
https://profiler.monitor.azure.cn |
ApplicationInsightsEndpoint | https://dc.applicationinsights.us |
https://dc.applicationinsights.azure.cn |
アプリは適切なバージョンで実行されていますか?
Profiler は、4.6.2 より後の .NET Framework 上でサポートされています。
Web アプリが ASP.NET Core アプリケーションの場合、サポートされている最新の ASP.NET Core ランタイム上で実行する必要があります。
適切な Azure サービス プランを使用していますか?
現在、Profiler for .NET は Free または Shared App Service プランではサポートされていません。 Profiler を使い始める場合は、Basic プランのいずれかにアップグレードしてください。
注意
Azure Functions の従量課金プランはサポートされません。 「Application Insights を使用したライブ Azure Functions アプリのプロファイリング」を参照してください。
適切な概算時間内で .NET Profiler データを検索していますか?
表示しようとしているデータが 2 週間以上前のものである場合は、時間フィルターを絞り込んで、もう一度試します。 トレースは 7 日後に削除されます。
.NET Profiler のサンプリング レートとオーバーヘッドについて認識していますか?
Profiler が有効になっているアプリケーションをホストしている各仮想マシン上で、.NET Profiler が 1 時間に 2 分間ランダムに実行されます。
Note
Profiler がアクティブに実行されてトレースを収集しているとき、通常 5% から 15% の間の CPU とメモリのオーバーヘッドがサーバーに付加されます。
Profiler によってキャプチャされたデータを保存するための追加コストはありません。 データは 15 日後に自動的に削除されます。
ゲートウェイにアクセスできますか?
ファイアウォールまたはプロキシによってこの Web ページへのアクセスがブロックされていないことを確認します。
タイムアウトが表示されていますか?、あるいは、.NET Profiler が実行されているかを確認する必要がありますか?
プロファイリング データがアップロードされるのは、Profiler の実行中に発生した要求にアタッチできる場合のみです。 .NET Profiler によって毎時 2 分間のデータが収集されます。 また、プロファイリング セッションを開始して Profiler をトリガーすることもできます。
Profiler は、トレース メッセージとカスタム イベントを Application Insights リソースに書き込みます。 これらのイベントを使用すると、Profiler がどのように実行されているかを確認できます。
.NET Profiler から Application Insights リソースに送信されたトレース メッセージとカスタム イベントを検索します。
Application Insights リソースで、上部のメニューから [検索] を選びます。
次の検索文字列を使って関連するデータを検索します。
stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
前述の検索結果には、2 つの AI リソースから検索した 2 つの例が含まれています。
Profiler の実行中にアプリケーションが要求を受け取らない場合、アクティビティがないためアップロードが取り消されたことがメッセージで説明されます。
Profiler は開始され、その実行中に発生した要求を検出して、カスタム イベントを送信しています。
ServiceProfilerSample
カスタムイベントが表示されている場合は、プロファイルがキャプチャされており、[Application Insights パフォーマンス] ペインで使用できることを意味します。
レコードが表示されていない場合は、Profiler は実行されていないか、応答に時間がかかりすぎました。 Azure サービスで Profiler が有効になっていることを確認します。
.NET Profiler は有効になっていますが、トレースはキャプチャされません
プロファイラーが有効になっている場合でも、特に次のような状況では、トレースをキャプチャまたはアップロードできないことがあります。
アプリケーションへの受信要求がない:
アプリケーションを手動で起動するか、可用性テストまたはロード テストを作成します。Application Insights によって確認された受信テレメトリがない:
- アプリケーションに送信されるトラフィックがある場合は、Application Insights Live Metrics に表示される受信要求があることを確認します。
Incoming Requests
グラフが空の場合 (データがない場合、またはゼロが表示されている場合): Application Insights をトラブルシューティングします。- Azure App Service で .NET アプリケーションをホストしている場合: App Service .NET のトラブルシューティング手順を試します。
プロファイラーのサンプリング設定が無効になっている:
これでもプロファイラー トレースを使用できない場合は、[プロファイラー サンプリング] 設定を確認します。- [Application Insights>パフォーマンス] ブレードを開きます。
- [プロファイラー] をクリックします。
- [トリガー] ボタンをクリックします。
- [トリガーの設定] で、[サンプリング] トグルがオンになっていることを確認します。
これでもなおトレースがアップロードされない場合、
サポート リクエストを作成するか、Azure コミュニティ サポートで質問してください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。
並列スレッドの二重カウント
複数の並列スレッドが 1 つの要求に関連付けられている場合、スタック ビューアーの合計時間メトリックは要求の継続時間よりも長くなる場合があります。 この場合、スレッド時間全体は実際の経過時間よりも長くなります。
たとえば、あるスレッドが、他のスレッドが完了するのを待機している可能性があります。 ビューアーでは、このような状況の検出が試みられ、不要な待機は除外されます。 そうすることで、重大である可能性がある情報が省略されずに、多すぎる情報が表示されます。
トレースに並列スレッドがある場合は、要求のホット パスを特定できるように、どのスレッドが待機しているかを確認してください。 通常は、すぐに待機状態になるスレッドが他のスレッドを待つことになります。 他のスレッドの方に注目し、待機しているスレッドの時間は無視してください。
特定の Azure サービスでの .NET Profiler のトラブルシューティング
次のセクションでは、Azure App Service または Azure Cloud Services で Profiler を使用するためのトラブルシューティング手順について説明します。
Azure App Service
.NET Profiler が正常に機能するには、次のことを確認します。
Web アプリケーションで、適切な設定で Application Insights が有効になっている。
ApplicationInsightsProfiler3 WebJob が実行されている。 WebJob を確認するには:
Kudu に移動します。 Azure portal で次の操作を行います。
- App Service インスタンスで、左側ウィンドウの [高度なツール] を選択します。
- [Go] \(移動) を選択します。
上部メニューから [ツール]>[WebJobs ダッシュボード] を選択します。 [WebJobs](WebJobs) ウィンドウが開きます。
"ApplicationInsightsProfiler3" が表示されない場合は、App Service アプリケーションを再起動します。
ログなどの WebJob の詳細を表示するには、ApplicationInsightsProfiler3 リンクを選択します。 [Continuous WebJob Details](継続的な WebJob の詳細) ウィンドウが開きます。
.NET Profiler がまだ機能していない場合は、ログをダウンロードし、Azure サポート チケットを送信します。
診断サービスのサイト拡張機能の状態ページを確認する
ポータルの [Application Insights] ペインから有効にした .NET Profiler は、診断サービスのサイト拡張機能によって管理されています。 https://{site-name}.scm.azurewebsites.net/DiagnosticServices
に移動することで、この拡張機能の状態ページを確認することができます。
Note
状態ページ リンクのドメインは、クラウドによって異なります。 このドメインは App Service の Kudu 管理サイトと同じです。
この状態ページには、.NET Profiler とスナップショット デバッガー エージェントのインストール状態が表示されます。 予期しないエラーが発生した場合は、修正方法の手順と共に表示されます。
App Service の Kudu 管理サイトを使用すると、この状態ページのベース URL を取得することができます。
- Azure Portal で App Service アプリケーションを開きます。
- [高度なツール] を選択します。
- [Go] \(移動) を選択します。
- Kudu 管理サイトで、以下を実行します。
- URL に
/DiagnosticServices
を付加します。 - Enter キーを押します。
- URL に
https://<kudu-url>/DiagnosticServices
のように終了します。
状態ページは次の例のように表示されます。
Note
Application Insights Profiler for .NET のコードなしインストールは、.NET Core サポート ポリシーに準拠します。 サポートされているランタイムの詳細については、.Net Core サポート ポリシーに関するページを参照してください。
手動のインストール
.NET Profiler を構成すると、Web アプリの設定が更新されます。 必要に応じて、更新を手動で適用できます。
アクティブなプロファイリング セッションが多すぎる
Azure App Service には、一度に 1 つのプロファイリング セッションという制限があります。 この制限は、App Service プランで実行されているすべてのアプリケーションとデプロイ スロットに対して、VM レベルで適用されます。 この制限は、問題の診断と解決、Kudu、および Application Insights Profiler for .NET を介して開始されたプロファイリング セッションにも同様に適用されます。
.NET Profiler がセッションを開始しようとしたときに、別のセッションが既に実行されていると、アプリケーション ログのほか、ApplicationInsightsProfiler3
の継続的な WebJob ログにもエラーが記録されます。
ログには次のいずれかのメッセージが表示されることがあります。
Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E
エラー コード 0xE111005E
は、別のセッションが既に実行されているため、プロファイリング セッションを開始できなかったことを示します。
このエラーを回避するには、一部の Web アプリを別の App Service プランに移動するか、一部のアプリケーションで Profiler を無効にします。 デプロイ スロットを使用する場合は、必ず未使用のスロットを停止してください。
デプロイ エラー: ディレクトリが空ではありません 'D:\home\site\wwwroot\App_Data\jobs'
.NET Profiler が有効になっている Web Apps リソースに Web アプリを再デプロイしている場合は、次のようなメッセージが表示されることがあります。
"ディレクトリが空ではありません 'D:\home\site\wwwroot\App_Data\jobs'"
このエラーは、スクリプトまたは Azure Pipelines から Web 配置を実行した場合に発生します。 解決するには、次のデプロイ パラメーターを Web 配置タスクに追加します。
-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'
こうしたパラメーターにより、Application Insights Profiler for .NET で使用されたフォルダーが削除され、再デプロイ プロセスのブロックが解除されます。 これらは、現在実行されている Profiler インスタンスに影響を与えません。
Application Insights Profiler for .NET は実行されていますか?
Profiler は、Web アプリ内の継続的な WebJob として実行されます。 Web アプリのリソースは、Azure Portal で開くことができます。 [WebJobs] ウィンドウで、ApplicationInsightsProfiler の状態を確認してください。 実行されていない場合は、 [ログ] を開いて詳細情報を入手します。
VM および Azure Cloud Services
Azure Diagnostics によって .NET Profiler が正しく構成されているかどうかを確認するには:
デプロイされた Azure Diagnostics 構成の内容が予期したとおりであることを確認します。
Azure Diagnostics によって Profiler のコマンド ラインで適切な iKey が渡されていることを確認します。
.NET Profiler は実行されたがエラーが返されたのかどうかを、Profiler のログ ファイルで確認します。
Azure Diagnostics の構成に使用された設定を確認するには:
仮想マシン (VM) にサインインします。
この場所にあるログ ファイルを開きます。 マシン上のプラグインの方がより新しいバージョンである場合があります。
VM の場合:
c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
Azure Cloud Services の場合:
c:\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
そのファイル内にある
WadCfg
という文字列を検索し、Azure Diagnostics を構成するために VM に渡された設定を確認します。.NET Profiler シンクによって使用された iKey が正しいかどうかを確認します。
Profiler を起動したコマンド ラインを確認します。 コマンド ライン引数は、次のファイル内にあります (ドライブは
c:
またはd:
であり、ディレクトリは非表示の可能性があります)。VM の場合:
C:\ProgramData\ApplicationInsightsProfiler\config.json
Azure Cloud Services の場合:
D:\ProgramData\ApplicationInsightsProfiler\config.json
Profiler のコマンド ラインの iKey が正しいことを確認します。
前述の config.json ファイルにあるパスを使用して、
BootstrapN.log
という名前の Profiler のログ ファイルを確認します。 次の情報が表示されます。- Profiler で使用されている設定を示すデバッグ情報。
- Profiler からの状態とエラーのメッセージ。
次のファイルを見つけることができます。
VM の場合:
C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
Azure Cloud Services の場合:
C:\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
アプリケーションが要求を受信している間に .NET Profiler が実行された場合は、"iKey からアクティビティが検出されました" というメッセージが表示されます。
トレースがアップロードされているときは、"Start to upload trace (トレースのアップロードを開始します)" というメッセージが表示されます。
ネットワーク プロキシまたはファイアウォール規則を編集する
アプリケーションがプロキシまたはファイアウォール経由でインターネットに接続される場合は、.NET Profile と通信するようにルールを更新する必要がある場合があります。
Application Insights Profiler for .NET によって使用される IP は、Azure Monitor サービス タグに含まれています。 詳細については、サービス タグに関するドキュメントを参照してください。
サポート
サポートが必要な場合は、Azure portal でサポート チケットを送信してください。 エラー メッセージの関連付け ID を含めます。