スマート検出 - パフォーマンスの異常Smart Detection - Performance Anomalies

Application Insights は、Web アプリケーションのパフォーマンスを自動的に分析し、潜在的な問題について警告できます。Application Insights automatically analyzes the performance of your web application, and can warn you about potential problems. この記事は、スマート検出による通知を受信されたユーザーを主に想定しています。You might be reading this because you received one of our smart detection notifications.

この機能を使用する場合、サポートされている言語のための Application Insights 用のアプリの構成を除き、特別な設定は不要です。This feature requires no special setup, other than configuring your app for Application Insights for your supported language. この機能は、アプリが十分なテレメトリを生成する際にアクティブになります。It is active when your app generates enough telemetry.

スマート検出による通知はいつ送信されますかWhen would I get a smart detection notification?

Application Insights は、アプリケーションのパフォーマンスの低下を以下のいずれかの方法で検出します。Application Insights has detected that the performance of your application has degraded in one of these ways:

  • 応答時間の低下 - アプリが要求に対する応答を開始する速度が以前よりも遅くなった場合です。Response time degradation - Your app has started responding to requests more slowly than it used to. この変化は急激に現れる可能性があります。たとえば、最新のデプロイメントにおけるリグレッションが発生する場合などです。The change might have been rapid, for example because there was a regression in your latest deployment. または、メモリ リークなどが原因で徐々に変化が生じる可能性もあります。Or it might have been gradual, maybe caused by a memory leak.
  • 依存関係の期間の低下 - アプリが REST API、データベース、またはその他の依存関係の呼び出しを行う場合です。Dependency duration degradation - Your app makes calls to a REST API, database, or other dependency. 依存関係の応答が以前よりも遅くなります。The dependency is responding more slowly than it used to.
  • 低パフォーマンスのパターン - 一部の要求にのみ影響を及ぼすパフォーマンスの問題がアプリで発生します。Slow performance pattern - Your app appears to have a performance issue that is affecting only some requests. たとえば、あるブラウザーでお使いのページの読み込みが他のブラウザーと比較して遅い場合や、特定のサーバーからの要求の処理が遅い場合などです。For example, pages are loading more slowly on one type of browser than others; or requests are being served more slowly from one particular server. 現時点では、このアルゴリズムはページの読み込み時間、要求の応答時間、および依存関係の応答時間を監視します。Currently, our algorithms look at page load times, request response times, and dependency response times.

スマート検出では、通常のパフォーマンスのベースラインを確立するために、少なくとも 8 日間のテレメトリが必要です。Smart Detection requires at least 8 days of telemetry at a workable volume in order to establish a baseline of normal performance. したがって、その期間にアプリケーションを実行した後で、重要な問題が通知されます。So, after your application has been running for that period, any significant issue will result in a notification.

アプリに問題があるのは確かですかDoes my app definitely have a problem?

いいえ。通知は、アプリに確実に問題があることを示すものではありません。No, a notification doesn't mean that your app definitely has a problem. これは単に、より詳しく確認することを推奨するものです。It's simply a suggestion about something you might want to look at more closely.

どのように修正すればよいですかHow do I fix it?

通知には診断情報が含まれます。The notifications include diagnostic information. 次に例を示します。Here's an example:

サーバー応答時間の低下の検出例

  1. トリアージ:Triage. 通知は、影響を受けるユーザーまたは操作の数を示します。The notification shows you how many users or how many operations are affected. この情報を基に、問題に優先順位を割り当てることができます。This can help you assign a priority to the problem.

  2. スコープ:Scope. 問題が影響する範囲はすべてのトラフィックですか。または一部のページのみですか。Is the problem affecting all traffic, or just some pages? 特定のブラウザーまたは場所に限定されますか。Is it restricted to particular browsers or locations? この情報を通知から取得できます。This information can be obtained from the notification.

  3. 診断:Diagnose. 多くの場合、通知内の診断情報は問題の性質を示します。Often, the diagnostic information in the notification will suggest the nature of the problem. たとえば、要求率が高い場合に応答時間が遅くなると、サーバーまたは依存関係が過負荷状態であることを示します。For example, if response time slows down when request rate is high, that suggests your server or dependencies are overloaded.

    それ以外の場合は、Application Insights の [パフォーマンス] ブレードを開きます。Otherwise, open the Performance blade in Application Insights. このブレードにはプロファイラー データが表示されます。There, you will find Profiler data. 例外がスローされた場合は、スナップショット デバッガーを試すこともできます。If exceptions are thrown, you can also try the snapshot debugger.

電子メール通知を構成するConfigure Email Notifications

スマート検出による通知は既定で有効になっており、Application Insights リソースが存在するサブスクリプションへの監視閲覧者および監視共同作業者のアクセス権を持つ人に送信されます。Smart Detection notifications are enabled by default and sent to those who have Monitoring Reader and Monitoring Contributor access to the subscription in which the Application Insights resource resides. これを変更するには、電子メール通知の [構成] をクリックするか、または Application Insights で [スマート検出の設定] を開きます。To change this, either click Configure in the email notification, or open Smart Detection settings in Application Insights.

スマート検出の設定

  • スマート検出電子メール内の [サブスクライブ解除] リンクを使用して電子メール通知の受け取りを停止できます。You can use the unsubscribe link in the Smart Detection email to stop receiving the email notifications.

スマート検出のパフォーマンスの異常に関する電子メールは、Application Insights リソースごとに 1 日 1 通に制限されます。Emails about Smart Detections performance anomalies are limited to one email per day per Application Insights resource. この電子メールは、その日に検出された新しい問題が 1 つ以上ある場合にのみ送信されます。The email will be sent only if there is at least one new issue that was detected on that day. どのメッセージも繰り返し送信されることはありません。You won't get repeats of any message.

よく寄せられる質問FAQ

  • 私のデータは Microsoft のスタッフに見られますか。So, Microsoft staff look at my data?

    • いいえ。No. サービスは完全に自動化されています。The service is entirely automatic. 通知を受け取るだけです。Only you get the notifications. ユーザーのデータは プライベートです。Your data is private.
  • Application Insights によって収集されたすべてのデータが分析されるのですか。Do you analyze all the data collected by Application Insights?

    • 現時点ではすべてではありません。Not at present. 現在は、要求の応答時間、依存関係の応答時間、およびページの読み込み時間が分析されます。Currently, we analyze request response time, dependency response time and page load time. その他のメトリックの分析も行われる予定です。Analysis of additional metrics is on our backlog looking forward.
  • どのような種類のアプリケーションに有効ですか。What types of application does this work for?

    • このようなパフォーマンスの低下は、適切なテレメトリを生成するどのアプリケーションでも検出されます。These degradations are detected in any application that generates the appropriate telemetry. Web アプリに Application Insights がインストールされていれば、要求と依存関係が自動的に追跡されます。If you installed Application Insights in your web app, then requests and dependencies are automatically tracked. ただし、バックエンド サービスやその他のアプリケーションで TrackRequest() または TrackDependency の呼び出しを挿入した場合は、スマート検出が同じ方法で動作します。But in backend services or other apps, if you inserted calls to TrackRequest() or TrackDependency, then Smart Detection will work in the same way.
  • 独自の異常検出ルールを作成できますか。または既存のルールをカスタマイズできますか。Can I create my own anomaly detection rules or customize existing rules?

  • どのくらいの頻度で分析は実行されますか。How often is the analysis performed?

    • 前日 (UTC タイム ゾーンにおける終日) のテレメトリの分析が毎日実行されます。We run the analysis daily on the telemetry from the previous day (full day in UTC timezone).
  • これにより、メトリック アラートが置き換えられるのですか。So does this replace metric alerts?

    • いいえ。No. 異常と見なされる可能性のあるすべての動作を検出することを確約しているわけではありません。We don't commit to detecting every behavior that you might consider abnormal.
  • 通知に応答して何も行わない場合は、リマインダーが受信されますかIf I don't do anything in response to a notification, will I get a reminder?

    • いいえ。各問題についてのメッセージが送信されるのは 1 回のみです。No, you get a message about each issue only once. 問題が引き続き発生する場合、その問題は [スマート検出] フィード ブレードで更新されます。If the issue persists it will be updated in the Smart Detection feed blade.
  • メールが消えました。どうしたらポータルで通知を見つけられますか。I lost the email. Where can I find the notifications in the portal?

    • アプリの Application Insights の概要で、 [スマート検出] タイルをクリックします。In the Application Insights overview of your app, click the Smart Detection tile. これで、最大 90 日前までのすべての通知を検索できるようになります。There you'll be able to find all notifications up to 90 days back.

パフォーマンスを向上させるにはどうすればよいですか。How can I improve performance?

Web サイト ユーザーにとって最大の不満の 1 つは、自らの経験でわかるように、時間のかかる応答や応答障害です。Slow and failed responses are one of the biggest frustrations for web site users, as you know from your own experience. したがって、この問題に対処することが重要です。So, it's important to address the issues.

トリアージTriage

まず、それは重要なことですか。First, does it matter? ページの読み込みには常に時間がかかるが、そのページの閲覧を必要としているユーザーが 1 % にすぎない場合は、多分、他にもっと考えるべき重要なことがあります。If a page is always slow to load, but only 1% of your site's users ever have to look at it, maybe you have more important things to think about. 一方、ユーザーの 1% しかそのページを開いていないが、毎回例外がスローされる場合、調べてみる価値はあるでしょう。On the other hand, if only 1% of users open it, but it throws exceptions every time, that might be worth investigating.

一般的なガイドラインとして、IMPACT ステートメント (影響を受けたユーザー数またはトラフィックの割合 (%)) を使用します。ただし、それがすべてではありません。Use the impact statement (affected users or % of traffic) as a general guide, but be aware that it isn't the whole story. 確認すべきその他の証拠を収集します。Gather other evidence to confirm.

問題のパラメーターを検討します。Consider the parameters of the issue. 地理的な場所によって状況が異なる場合は、該当するリージョンを対象とする可用性テストをセットアップします。単にそのエリアのネットワークの問題かもしれません。If it's geography-dependent, set up availability tests including that region: there might simply be network issues in that area.

遅いページ読み込みの診断Diagnose slow page loads

どこに問題がありますか。Where is the problem? サーバーは応答するのに時間がかかりますか。ページはかなり長いですか。ページを表示するのにブラウザーは多くの処理を必要としますか。Is the server slow to respond, is the page very long, or does the browser have to do a lot of work to display it?

ブラウザーのメトリック ブレードを開きます。Open the Browsers metric blade. ブラウザーのページ読み込み時間のセグメント表示で、どこで時間がかかっているかがわかります。The segmented display of browser page load time shows where the time is going.

  • [要求送信時間] の値が大きい場合は、サーバーの応答に時間がかかっているか、または要求が大量のデータを伴う POST 要求です。If Send Request Time is high, either the server is responding slowly, or the request is a post with a lot of data. 応答時間を調べるには、 パフォーマンス メトリック を確認します。Look at the performance metrics to investigate response times.
  • 依存関係の追跡 をセットアップして、パフォーマンス低下の原因が外部のサービスによるものか、内部のデータベースによるものかを確認します。Set up dependency tracking to see whether the slowness is due to external services or your database.
  • [受信応答時間] が大部分を占めている場合は、ページと、JavaScript、CSS、イメージなどのページの依存部分 (ただし、非同期で読み込まれるデータではない) が長くなっています。If Receiving Response is predominant, your page and its dependent parts - JavaScript, CSS, images and so on (but not asynchronously loaded data) are long. 可用性テストをセットアップし、依存部分を読み込むオプションを必ず設定します。Set up an availability test, and be sure to set the option to load dependent parts. いくつかの結果を取得したら、結果の詳細を開き展開して、各種ファイルの読み込み時間を表示します。When you get some results, open the detail of a result and expand it to see the load times of different files.
  • [クライアントの処理時間] の値が大きい場合は、スクリプトの実行に時間がかかっています。High Client Processing time suggests scripts are running slowly. 理由が明らかでない場合は、何らかのタイミング コードを追加することを検討し、trackMetric 呼び出しで時間を送信してください。If the reason isn't obvious, consider adding some timing code and send the times in trackMetric calls.

表示が遅いページの改善Improve slow pages

サーバーの応答およびページ読み込み時間を短縮するためのアドバイスは Web に多数掲載されていますが、ここではその一部を取り上げます。There's a web full of advice on improving your server responses and page load times, so we won't try to repeat it all here. 把握済みかもしれませんがいくつかのヒントを参考までに以下に示します。Here are a few tips that you probably already know about, just to get you thinking:

  • ファイルのサイズが大きいため読み込みに時間がかかる:スクリプトとその他の部分を非同期に読み込みます。Slow loading because of big files: Load the scripts and other parts asynchronously. スクリプトのバンドルを使用します。Use script bundling. メイン ページをウィジェットに分割し、データを別々に読み込みます。Break the main page into widgets that load their data separately. 長いテーブルに対して古いプレーンな HTML が送信されない: スクリプトを使用してデータを JSON またはその他のコンパクトな形式で要求し、所定のテーブルに入力します。Don't send plain old HTML for long tables: use a script to request the data as JSON or other compact format, then fill the table in place. このようなすべてにおいて有効な優れたフレームワークがありますThere are great frameworks to help with all this. (これらはまた、当然ながら、大きなスクリプトを伴います)。(They also entail big scripts, of course.)
  • サーバーの依存関係が低速:コンポーネントの地理的な場所について検討してください。Slow server dependencies: Consider the geographical locations of your components. たとえば、Azure を使用している場合、Web サーバーとデータベースが同じリージョンにあることを確認します。For example, if you're using Azure, make sure the web server and the database are in the same region. クエリで必要以上の情報が取得されませんか。Do queries retrieve more information than they need? キャッシュまたはバッチは役に立ちますか。Would caching or batching help?
  • 容量の問題:応答時間と要求数のサーバー メトリックを確認してください。Capacity issues: Look at the server metrics of response times and request counts. 応答時間のピークと要求数のピークが合わない場合は、サーバーが拡大されている可能性があります。If response times peak disproportionately with peaks in request counts, it's likely that your servers are stretched.

サーバーの応答時間の低下Server Response Time Degradation

応答時間の低下の通知では次のことが示されます。The response time degradation notification tells you:

  • 対象の操作の通常の応答時間と比較した場合の応答時間The response time compared to normal response time for this operation.
  • 影響を受けるユーザーの数How many users are affected.
  • 検出日とその 7 日前における対象の操作の平均応答時間および 90 パーセンタイルの応答時間Average response time and 90th percentile response time for this operation on the day of the detection and 7 days before.
  • 検出日とその 7 日前における対象の操作の要求の数Count of this operation requests on the day of the detection and 7 days before.
  • 対象の操作における低下と関連する依存関係における低下の相関関係Correlation between degradation in this operation and degradations in related dependencies.
  • 問題の診断に役立つリンクLinks to help you diagnose the problem.
    • 操作の時間を要した場所を表示するためのプロファイラー トレース (このリンクは、プロファイラー トレースの例が検出期間中に対象の操作で収集された場合に使用できます)Profiler traces to help you view where operation time is spent (the link is available if Profiler trace examples were collected for this operation during the detection period).
    • メトリック エクスプローラーのパフォーマンス レポート。このレポートでは、対象の操作の時間の範囲/フィルターを詳細に分析できます。Performance reports in Metric Explorer, where you can slice and dice time range/filters for this operation.
    • この呼び出しを検索して、特定の呼び出しプロパティを表示します。Search for this call to view specific call properties.
    • エラー レポート - カウントが 1 より大きい場合は、パフォーマンス低下の一因となるエラーが対象の操作で発生したことを示します。Failure reports - If count > 1 this means that there were failures in this operation that might have contributed to performance degradation.

依存関係の期間の低下Dependency Duration Degradation

最新のアプリケーションでは、マイクロ サービスによるデザイン アプローチの採用がますます増えています。これにより、多くの場合、外部サービスに大きく依存することになります。Modern applications more and more adopt a micro services design approach, which in many cases leads to heavy reliability on external services. たとえば、アプリケーションが一部のデータ プラットフォームを利用する場合や、独自のボット サービスを構築する場合でも、Cognitive Services プロバイダーを活用して、人と同じようにやり取りできるボットを作成したり、ボットが回答を引き出すためのデータ ストア サービスを活用したりします。For example, if your application relies on some data platform or even if you build your own bot service you will probably relay on some cognitive services provider to enable your bots to interact in more human ways and some data store service for bot to pull the answers from.

依存関係の低下の通知例を次に示します。Example dependency degradation notification:

依存関係の期間の低下の検出例

次の指標が提示されます。Notice that it tells you:

  • 対象の操作の通常の期間と比較した場合の期間The duration compared to normal response time for this operation
  • 影響を受けるユーザーの数How many users are affected
  • 検出日とその 7 日前における対象の依存関係の平均期間および 90 パーセンタイルの期間Average duration and 90th percentile duration for this dependency on the day of the detection and 7 days before
  • 検出日とその 7 日前における依存関係の呼び出し数Number of dependency calls on the day of the detection and 7 days before
  • 問題の診断に役立つリンクLinks to help you diagnose the problem
    • 対象の依存関係に関するメトリック エクスプローラーのパフォーマンス レポートPerformance reports in Metric Explorer for this dependency
    • 対象の依存関係の呼び出しの検索による呼び出しのプロパティの表示Search for this dependency calls to view calls properties
    • エラー レポート - カウントが 1 より大きい場合は、検出期間中に、期間の低下の原因になった可能性のある失敗した依存関係呼び出しが存在したことを示します。Failure reports - If count > 1 this means that there were failed dependency calls during the detection period that might have contributed to duration degradation.
    • 対象の依存関係の期間と数を計算するクエリと Analytics を開きます。Open Analytics with queries that calculate this dependency duration and count

低パフォーマンスのパターンのスマート検出Smart Detection of slow performing patterns

Application Insights は、一部のユーザーにのみ影響する、または一部のケースでのみユーザーに影響するパフォーマンス上の問題を検出します。Application Insights finds performance issues that might only affect some portion of your users, or only affect users in some cases. たとえば、あるブラウザーでのページの読み込みが他のブラウザーと比較して遅い場合や、特定のサーバーからの要求の処理が遅い場合などに関する通知です。For example, notification about pages load is slower on one type of browser than on other types of browsers, or if requests are served more slowly from a particular server. また、ある地域における特定のオペレーティング システムを使用するクライアントでのページ読み込みの遅延など、プロパティの組み合わせに関連する問題も検出します。It can also discover problems associated with combinations of properties, such as slow page loads in one geographical area for clients using particular operating system.

上記のような異常はデータを調べるだけでは検出は困難ですが、想像以上によく発生します。Anomalies like these are very hard to detect just by inspecting the data, but are more common than you might think. 多くの場合、お客様からのクレームによってのみ表面化します。Often they only surface when your customers complain. その時点では遅すぎます。影響を受けたユーザーはすぐに競合他社のソリューションに切り替えてしまうからです。By that time, it's too late: the affected users are already switching to your competitors!

現時点では、このアルゴリズムはページの読み込み時間、サーバーにおける要求の応答時間、および依存関係の応答時間を監視します。Currently, our algorithms look at page load times, request response times at the server, and dependency response times.

しきい値規則や構成規則を設定する必要はありません。You don't have to set any thresholds or configure rules. 異常パターンの検出には、機械学習およびデータ マイニングのアルゴリズムが使用されます。Machine learning and data mining algorithms are used to detect abnormal patterns.

メール アラートから、リンクをクリックして Azure で診断レポートを開く

  • [日時] は、問題が検出された日時を示します。When shows the time the issue was detected.

  • [内容] には、以下が示されます。What describes:

    • 検出された問題。The problem that was detected;
    • 問題の動作が見られたイベント セットの特性。The characteristics of the set of events that we found displayed the problem behavior.
  • パフォーマンスの低いセットと他のすべてのイベントの平均的な動作の比較表。The table compares the poorly-performing set with the average behavior of all other events.

リンクをクリックしてメトリックス エクスプローラーを開き、パフォーマンスの低いセットの時間とプロパティでフィルターされた関連するレポートで検索を実行します。Click the links to open Metric Explorer and Search on relevant reports, filtered on the time and properties of the slow performing set.

時間の範囲とフィルターを変更して、テレメトリを調べます。Modify the time range and filters to explore the telemetry.

次のステップNext steps

これらの診断ツールを使用すると、アプリからテレメトリを調査できます。These diagnostic tools help you inspect the telemetry from your app:

スマート検出は、すべて自動化されています。Smart detections are completely automatic. ただし、アラートを追加で設定する機能が用意されています。But maybe you'd like to set up some more alerts?