Application Insights を使用してパフォーマンスに関する問題を検出して診断する

Application Insights では、アプリケーションの運用とパフォーマンスを分析するために役立つテレメトリを収集します。 この情報を使用して、発生する可能性がある問題を特定したり、ユーザーに最も影響を与える可能性があるアプリケーションの機能強化を識別したりできます。 このチュートリアルでは、アプリケーションのサーバー コンポーネントのパフォーマンスとクライアントの観点から見たパフォーマンスの両方を分析するプロセスを示します。

学習内容は次のとおりです。

  • サーバー側の操作のパフォーマンスを識別します。
  • サーバーの操作を分析して、パフォーマンス低下の根本原因を特定します。
  • 最も低速なクライアント側の操作を特定します。
  • クエリ言語を使用してページ ビューの詳細を分析します。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • 次のワークロードを使って、Visual Studio 2019 をインストールします。
    • ASP.NET および Web の開発
    • Azure の開発
  • .NET アプリケーションを Azure にデプロイし、Application Insights SDK を有効にする
  • アプリケーションに対するApplication Insights プロファイラーの有効化を実行します。

Azure へのサインイン

Azure portal にサインインします。

低速のサーバー操作を識別する

Application Insights は、アプリケーションのさまざまな操作に対するパフォーマンスの詳細を収集します。 最も実行時間が長い操作を特定することで、潜在的な問題を診断したり、進行中の開発の対象を絞ったりして、アプリケーションの全体的なパフォーマンスを向上させることができます。

  1. [Application Insights] を選択してから、ご利用のサブスクリプションを選択します。

  2. [パフォーマンス] パネルを開くには、[調査] メニューの [パフォーマンス] を選択するか、[サーバー応答時間] グラフを選択します。

    パフォーマンス ビューを示すスクリーンショット。

  3. [パフォーマンス] スクリーンには、アプリケーションの各操作の数と平均実行時間が表示されます。 この情報を使用して、ユーザーに最も影響を与えている操作を特定できます。 この例では、GET Customers/DetailsGET Home/Index が相対的に実行時間が長く、呼び出し数が多いため、調査対象に適しています。 他にも実行時間が長い操作がありますが、めったに呼び出されないため、それらを改善しても効果はごくわずかである可能性があります。

    [パフォーマンス サーバー] パネルを示すスクリーンショット。

  4. この時点では、グラフには、一定期間中の選択された操作の平均実行時間が表示されています。 95 パーセンタイルに切り替えて、パフォーマンスの問題を見つけることができます。 関心のある操作をグラフにピン留めして追加します。 このグラフでは、調査する価値があるピークがいくつかあることが示されます。 これらをさらに分離するには、グラフの時間枠を短縮します。

    ピン留めの操作を示すスクリーンショット。

  5. 右側のパフォーマンス パネルには、選択した操作のさまざまな要求に対する実行時間の分布が表示されます。 95 パーセンタイル付近から始まるように時間枠を狭めます。 「上位 3 件の依存関係」の分析情報カードから、トランザクションが遅い原因は外部の依存関係である可能性が高いことが一目で分かります。 サンプル数のボタンを選択すると、サンプルの一覧が表示されます。 その後、任意のサンプルを選択して、トランザクションの詳細を表示します。

  6. トランザクションの合計実行時間のうち、Fabrikamaccount Azure Table の呼び出しが最も多くの時間を占めていることがわかります。 また、例外によって呼び出しが失敗したこともわかります。 一覧内の任意の項目を選択すると、右側に詳細が表示されます。

    [操作のエンドツーエンド トランザクションの詳細] を示すスクリーンショット。

  7. Profiler を使用すると、操作のために実行された実際のコードと各ステップに必要な時間が表示され、コード レベルの診断をさらに詳しく確認できます。 Profiler は定期的に実行されるため、一部の操作はトレースされていない場合があります。 時間の経過と共に、より多くの操作がトレースされます。 操作に対して Profiler を起動するには、[プロファイラーのトレース] を選択します。

  8. トレースでは各操作の個々のイベントが示されるため、操作全体の実行時間の長さに対する根本原因を診断できます。 最も時間が長くなる上位の例のうち 1 つを選択します。

  9. [ホット パス] を選択すると、操作の合計実行時間に最も影響を与えるイベントの特定のパスが強調表示されます。 この例では、最も遅い呼び出しが FabrikamFiberAzureStorage.GetStorageTableData メソッドから発生していることがわかります。 最も時間がかかる部分は CloudTable.CreateIfNotExist メソッドです。 関数が呼び出されるたびにこのコード行が実行される場合、不要なネットワークの呼び出しと CPU リソースが消費されます。 コードを修正する最善の方法は、1 回だけ実行する一部のスタートアップ メソッドにこの行を追加することです。

    Profiler の詳細を示すスクリーンショット。

  10. 画面の上部にある [パフォーマンスのヒント] は、過剰な実行時間が待機によるものであるという評価を裏付けています。 さまざまな種類のイベントの解釈に関するドキュメントを確認するには、[待機中] リンクを選択します。

    [パフォーマンスのヒント] を示すスクリーンショット。

  11. さらに分析するために、[トレースのダウンロード] を選択して、トレースをダウンロードします。 PerfView を使用してこのデータを表示できます。

サーバーのログ データを使用する

Logs には、Application Insights によって収集されたすべてのデータを分析するために使用できる強力なクエリ言語が用意されています。 この機能を使用して、要求とパフォーマンスのデータに対して、詳細な分析を実行できます。

  1. 操作の詳細パネルに戻り、Logs アイコン[ログに表示 (Analytics)] を選択します。

  2. Logs 画面が開き、パネルのそれぞれのビューのクエリが表示されます。 これらのクエリをそのまま実行するか、要件に合わせて変更できます。 最初のクエリは、この操作の一定期間の実行時間を示します。

    Logs のクエリを示すスクリーンショット。

低速のクライアント操作を識別する

Application Insights は、最適化するためのサーバー プロセスを識別するだけでなく、クライアント ブラウザーの観点から分析することもできます。 この情報は、クライアント コンポーネントの潜在的な改善点を特定したり、さまざまなブラウザーや場所での問題を特定したりするのに役立ちます。

  1. [調査][ブラウザー] を選択し、[ブラウザーのパフォーマンス] を選択します。 または、[調査][パフォーマンス] を選択し、右上隅の [サーバー/ブラウザー] トグル ボタンを選択して [ブラウザー] タブに切り替え、ブラウザーのパフォーマンス概要を開きます。 このビューにより、アプリケーションのさまざまなテレメトリをブラウザーの観点から見た概要が視覚的に表示されます。

    ブラウザーの概要を示すスクリーンショット。

  2. 操作名のいずれかを選択し、右下にある [サンプル] ボタンを選択して、操作を選択します。 エンドツーエンドのトランザクションの詳細が右側に開き、[ページ ビュー プロパティ] が表示されます。 ページを要求しているクライアントの詳細 (ブラウザーの種類、その場所など) を表示できます。 この情報は、特定の種類のクライアントに関連するパフォーマンスの問題があるかどうかを判断する際に役立ちます。

    [ページ ビュー プロパティ] を示すスクリーンショット。

クライアントのログ データを使用する

Application Insights では、サーバーのパフォーマンスのために収集されたデータと同様に、すべてのクライアント データを、Logs を使用した詳細な分析で使用できるようにします。

  1. ブラウザーの概要に戻り、Logs アイコン[ログに表示 (Analytics)] を選択します。

  2. Logs 画面が開き、パネルのそれぞれのビューのクエリが表示されます。 最初のクエリは、一定期間のさまざまなページ ビューの実行時間を示します。

    Logs 画面を示すスクリーンショット。