Application Insights とは何か?
Application Insights によって Web アプリケーションのパフォーマンスが分析され、潜在的な問題が警告されます。
この機能を使用する場合、(ASP.NET、Java、Node.js、および Web ページ コードにおける) Application Insights 用のアプリの構成を除き、特別な設定は不要です。 アプリによって十分なテレメトリが生成されると、アクティブになります。
スマート検出による通知はいつ送信されるか
Application Insights では、次のいずれかの理由によってアプリケーションのパフォーマンスが低下したことが検出されると、通知が送信されます。
- 応答時間の悪化: 要求に対するアプリの応答が以前より遅くなり始めた場合です。 変化が突然発生する場合 (たとえば、最新のデプロイで回帰が発生した場合など) もあれば、たとえばメモリ リークなどのために徐々に悪化する場合もあります。
- 依存関係の期間の低下: アプリが REST API、データベース、またはその他の依存関係の呼び出しを行う場合です。 依存関係の応答が以前よりも遅くなります。
- 低パフォーマンスのパターン: 一部の要求のみに影響するパフォーマンス上の問題がアプリにある場合です。 たとえば、ある種類のブラウザーでのページ読み込みが他のブラウザーよりも遅い場合や、特定のサーバーからの要求の処理が遅い場合などです。 Application Insights のアルゴリズムにより、ページの読み込み時間、要求の応答時間、および依存関係の応答時間が監視されます。
スマート検出は、Web アプリケーションで発生する可能性のあるパフォーマンス上の問題とエラーの異常を警告する Application Insights の機能です。 ベースラインを確立するには、少なくとも 8 日間分の、十分なボリュームのテレメトリが必要です。 その期間が過ぎた後は、重要な問題が発生すると通知が生成されます。
アラートは常に問題を示しているか
アラートは、必ずしもアプリに問題があることを意味するわけではありません。 どちらかというと、さらに詳しく調査すべきことについての提案です。
問題を解決する方法
各アラート通知には、診断情報が含まれています。 この情報を使用する方法の例を次に示します。
- トリアージのため: 通知は、影響を受けるユーザーまたは操作の数を示します。 この情報を基に、問題に優先順位を割り当てることができます。
- 範囲を判断するため: 問題が影響する範囲はすべてのトラフィックですか。または一部のページのみですか。 特定のブラウザーまたは場所に限定されますか。
- 診断のため: 多くの場合、通知内の診断情報によって問題の性質が示されます。 たとえば、要求率が高いときに応答時間が遅くなる場合は、サーバーまたは依存関係が過負荷になっていることが示されます。 詳細情報が必要な場合は、Application Insights の [パフォーマンス] セクションを開きます。 そこにはプロファイラー データが表示されます。 例外がスローされていた場合は、スナップショット デバッガーを試すこともできます。
電子メール通知の構成
スマート検出による通知は既定で有効になっており、Application Insights リソースに対する "所有者"、"共同作成者"、および "閲覧者" アクセス権を持つユーザーに送信されます。 これを変更するには、電子メール通知の [構成] を選択するか、または Application Insights で [スマート検出の設定] を開きます。
スマート検出メール内のサブスクライブ解除リンクを使って、メール通知の受け取りを停止できます。
スマート検出のパフォーマンスの異常に関する電子メールは、Application Insights リソースごとに 1 日 1 通に制限されます。 メールは、その日に検出された新しい問題が少なくとも 1 つある場合にのみ送信されます。
パフォーマンスを向上させるにはどうすればよいですか。
遅い応答や失敗した応答は、Web サイトのユーザーをイライラさせます。 問題に迅速に対処することが重要です。 パフォーマンスを向上させるには、次のステップを実行します。
- トリアージ
- 診断
- 改善
ページの読み込み時間の観点から、これらのステップをより詳しく見てみましょう。
トリアージ
問題を確認するとき、まず最初に考えるべきことは、それが重要であるかどうかです。 あるページの読み込み時間が常に遅くても、サイトのユーザーの 1% しかそのページを見ないとしたら、その問題の優先度は低くなります。 一方、ユーザーの 1% しかページを開かないとしても、毎回例外がスローされる場合は、優先度は高くなります。 一般的なガイドラインとして、影響評価 (影響を受けたユーザー数またはトラフィックの割合) を使用しますが、その影響だけでは不十分であることに注意してください。 他の証拠を収集し、問題のパラメーターを考慮してください。 問題が地理に依存している場合は、リージョンを含む可用性テストを設定します。
遅いページ読み込みの診断
問題を診断する際は、次のように自問してみてください。
- どこに問題がありますか。
- サーバーの応答は低速か?
- ページは長いか?
- このページを表示するためにブラウザーで多くの処理を行う必要があるか?
ブラウザーの応答時間を調査している場合は、[ブラウザー] メトリックを開きます。 ブラウザーのページ読み込み時間のセグメント表示で、どこで時間がかかっているかがわかります。
- [要求送信時間] の値が大きい場合は、サーバーの応答に時間がかかっているか、または要求が大量のデータを伴う POST 要求です。 応答時間を調べるには、 パフォーマンス メトリック を確認します。
- 依存関係の追跡を設定して、遅延の原因が外部のサービスによるものか、内部のデータベースによるものかを確認します。
- 受信側の応答時間が大部分を占めている場合は、ページと、JavaScript、CSS、イメージなどのページの依存部分 (ただし、非同期で読み込まれるデータではない) が長くなっています。 可用性テストをセットアップし、依存部分を読み込むオプションを必ず設定します。 いくつかの結果を取得したら、結果の詳細を開き展開して、各種ファイルの読み込み時間を表示します。
- [クライアントの処理時間] の値が大きい場合は、スクリプトの実行に時間がかかっています。 理由が明らかでない場合は、何らかのタイミング コードを追加することを検討し、
trackMetric
呼び出しで時間を送信してください。
表示が遅いページの改善
遅いページの改善方法を考える場合の出発点を、次にいくつか示します。
- ファイルが大きいために読み込みが遅い: スクリプトとその他の部分を非同期に読み込みます。 スクリプトのバンドルを使用します。 メイン ページをウィジェットに分割し、データを別々に読み込みます。 長いテーブルに対して古いプレーンな HTML を送信しないでください。スクリプトを使用してデータを JSON またはその他のコンパクトな形式で要求し、所定のテーブルに入力します。
- サーバーの依存関係が低速: コンポーネントの地理的な場所について検討してください。 たとえば、Azure を使用している場合、Web サーバーとデータベースが同じリージョンにあることを確認します。 クエリで必要以上の情報が取得されませんか。 キャッシュまたはバッチは役に立ちますか。
- 容量の問題: 応答時間と要求数のサーバー メトリックを調べます。 応答時間のピークと要求数のピークが合わない場合は、サーバーの負荷が高すぎる可能性があります。 スケールアップまたはスケールアウトを検討してください。
サーバーの応答時間の低下
応答時間の低下の通知では、次のことがわかります。
- 対象の操作の通常の応答時間と比較した場合の応答時間。
- 影響を受けるユーザーの数
- 検出日とその 7 日前における対象の操作の平均応答時間および 90 パーセンタイルの応答時間。
- 検出日とその 7 日前における対象の操作の要求の数。
- 対象の操作における低下と関連する依存関係における低下の相関関係
- 問題の診断に役立つリソース:
- Profiler トレースは、どこで操作時間がかかっているかを確認するのに役立ちます (このリンクは、検出期間中にこの操作に対して Profiler トレースの例が収集されていた場合に使用できます)。
- メトリック エクスプローラーのパフォーマンス レポート。このレポートでは、対象の操作の時間の範囲とフィルターを調べることができます。
- 検索してこの呼び出しを探し、特定の呼び出しプロパティを表示します。
- エラー レポート。 カウントが 1 より大きい場合は、パフォーマンス低下の一因となるエラーが対象の操作で発生したことを示します。
依存関係の期間の低下
アプリケーションが外部サービスに大きく依存している場合は、依存関係の低下を監視することをお勧めします。
依存関係の低下の通知例を次に示します。
これにより、以下のことがわかります。
- 対象の操作の通常の応答時間と比較した場合の期間。
- 影響を受けるユーザーの数
- 検出日とその 7 日前におけるこの依存関係の平均期間と 90 パーセンタイルの期間。
- 検出日とその 7 日前における依存関係呼び出しの回数。
- 問題の診断に役立つリソース:
- 対象の依存関係に関するメトリック エクスプローラーのパフォーマンス レポート。
- 対象の依存関係の呼び出しを検索して呼び出しのプロパティを表示します。
- エラー レポート。 1 つ以上のエラーが存在する場合は、検出期間中に、期間の低下の原因になっている可能性がある失敗した依存関係呼び出しがあったことを示しています。
- 対象の依存関係の期間と数を計算するクエリで Analytics を開きます。
低パフォーマンスのパターンのスマート検出
Application Insights は、一部のユーザーにのみ影響する、または一部のケースでのみユーザーに影響するパフォーマンス上の問題を検出します。 たとえば、1 種類のブラウザー、または特定の地域でのみ低速なページ読み込みの発生が確認される場合があります。
このような異常はデータを調べるだけでは検出が困難ですが、想像以上によく発生します。 顧客からのクレームによって初めて表面化することがよくあります。
Application Insights のアルゴリズムにより、ページの読み込み時間、サーバーにおける要求の応答時間、および依存関係の応答時間が監視されます。 しきい値規則や構成規則を設定する必要はありません。 異常パターンの検出には、機械学習およびデータ マイニングのアルゴリズムが使用されます。 通知の例を次に示します。
[日時] フィールドには、問題が検出された日時が表示されます。
[問題] フィールドでは次が説明されます。
- 検出された問題。
- 問題の動作を引き起こしたイベント。
表では、パフォーマンスの低いセットと他のすべてのイベントの平均的な動作が比較されます。
メトリック エクスプローラーを開くリンクを選び、[検索] を選んで、パフォーマンスの低いセットの時間とプロパティでフィルター処理された関連するレポートを探します。その後、時間の範囲とフィルターを変更して、テレメトリを調べます。