Application Insights を使用してエラー、パフォーマンス、およびトランザクションを調査する

Application Insights は、 アプリケーションからテレメトリを収集して、エラーの診断と低速なトランザクションの調査に役立ちます。 これには、次の 4 つの重要なツールが含まれています。

  • エラー ビュー - エラー、例外、およびエラーを追跡し、迅速な問題解決と安定性の向上のための明確な分析情報を提供します。

  • パフォーマンス ビュー - 応答時間と操作数を表示することで、アプリケーションのボトルネックをすばやく特定し、解決するのに役立ちます。

  • 検索ビュー - ユーザーは、ページ ビュー、例外、カスタム イベントなどの個々のテレメトリ項目を検索して調べることができます。

  • トランザクション診断 - エンドツーエンドのトランザクションの詳細に関する包括的な分析情報を通じて、コンポーネントの問題をすばやく特定するのに役立ちます。

これらのツールを組み合わせることで、Web アプリケーションの継続的な正常性と効率性が確保されます。 これらを使用して、ユーザーに最も影響を与える問題や拡張機能を特定できます。

Application Insights の [失敗] ビューにアクセスするには、[概要] ウィンドウの [失敗した要求] グラフ、またはリソース メニューの [調査] カテゴリの下にある [失敗] を選択します。

Application Insights の [失敗] ビューに到達する方法を示すスクリーンショット。

リソースを選択し、トリアージ セクションからエラーを調査することで、アプリケーション マップからエラー ビューにアクセスすることもできます。

他の 3 つのエクスペリエンスのいずれかを使用してTransaction diagnosticsにアクセスすることができます。 詳細については、「テレメトリの 調査」を参照してください。

概要

[ 失敗] ビューには、アプリケーションに対して収集されたすべての失敗した操作の一覧と、それぞれにドリルダウンするオプションが表示されます。 これにより、影響を受けるユーザーの頻度とユーザー数を表示して、影響が最も大きい問題に取り組む作業に集中できます。

Application Insights の [失敗] ビューを示すスクリーンショット。

Azure Monitor OpenTelemetry Distro または JavaScript SDK によって送信されるすぐに使用できるテレメトリに加えて、テレメトリ (カスタム イベントなど) を追加および変更できます。

詳細については、「.NET、Java、Node.js、Python アプリケーションAzure OpenTelemetry の追加と変更を参照してください。

テレメトリのフィルター処理

既定のフィルター

すべてのエクスペリエンスを使用すると、時間範囲でテレメトリをフィルター処理できます。 さらに、各エクスペリエンスには、独自の既定のフィルターが付属しています。

[ ロール ] フィルター メニューから表示するサービス (クラウド ロール名) またはマシン/コンテナー (クラウド ロール インスタンス) を選択できます。 このアクションを使用すると、アプリケーションの特定の部分内で問題やパフォーマンスの傾向を分離できます。

Cloud ロール名Cloud ロール インスタンスを設定する方法については、「Configure Azure Monitor OpenTelemetryを参照してください。

フィルターの追加

プロパティの値に基づいてイベントをフィルター選択できます。 使用可能なプロパティは、選択したイベントまたはテレメトリの種類によって異なります。 フィルターを追加するには:

  1. [フィルター] アイコン を選択してフィルターを追加します。

    フィルター ピル

  2. 左側のドロップダウン リストからプロパティを選択します。

  3. 中央のドロップダウン リストから、 =!=contains、または not containsのいずれかの演算子を選択します。

  4. 右側のドロップダウン リストから、フィルター処理するすべてのプロパティ値を選択します。

    フィルター値の右側の値は、現在のフィルター選択されたセットに含まれるイベントの発生回数を表します。

  5. 別のフィルターを追加するには、[ フィルター] アイコン をもう一度選択します。

検索テレメトリ

操作リストの上にある [検索] を使用して 、特定の操作を検索してアイテムをフィルター処理 できます。

[検索] フィールドを示すスクリーンショット。

分析データを使用する

Application Insights によって収集されたすべてのデータは、 Log Analytics に格納されます。 調査中の例外を生成した要求を分析するための豊富なクエリ言語が提供されます。

ヒント

Log Analytics のシンプル モードでは、ログ データを分析および視覚化するための直感的なポイント アンド クリック インターフェイスが提供されます。

  1. パフォーマンス、エラー、または検索ビューで、上部のナビゲーション バー の [ログで表示 ] を選択し、ドロップダウン メニューからクエリを選択します。

    [ログで表示] ボタンが強調表示されている上部のアクション バーのスクリーンショット。

  2. このアクションにより、[ ログ ] ビューが表示され、クエリをさらに変更したり、サイドバーから別のクエリを選択したりできます。

    [ログ] ビューを示すスクリーンショット。

テレメトリを調査する

エラーまたは例外の根本原因を調査するには、依存関係と例外の詳細を含む詳細なエンド ツー エンド トランザクションの詳細ビューについて、問題のある操作を詳しく調べます。

  1. 操作を選択すると、その操作の 上位 3 つの応答コード上位 3 つの例外の種類および上位 3 つの失敗した依存関係が表示されます

  2. [ ドリル イン] で、フィルター処理された結果の数を含むボタンを選択して、サンプル操作の一覧を表示します。

  3. サンプル操作を選択して、 エンドツーエンドのトランザクションの詳細ビューを 開きます。

    [ドリルイン] ボタンが強調表示された [失敗] ビューを示すスクリーンショット。

    推奨サンプルには、サンプリングが有効な場合でも、すべてのコンポーネントからの関連するテレメトリが含まれています。

    ヒント

    エラーの呼び出し履歴が必要な場合は、関連する例外を エンド ツー エンド トランザクションの詳細 または [ 例外 ] タブで開きます。スタック トレースは、その操作に対して例外テレメトリがキャプチャされた場合にのみ表示されます。

クライアント側のパフォーマンスとエラーを分析する

Application Insights を使用して Web ページをインストルメント化すると、ページ ビュー、ブラウザー操作、依存関係を可視化できます。 このブラウザー データを収集するには 、Web ページにスクリプトを追加する必要があります

  1. スクリプトを追加したら、Performance または Failures ビューで Browser トグルを選択して、ページ ビューとそれに関連するパフォーマンス メトリックをaccessできます。

    上部のアクション バーの下にある [サーバー/ブラウザー] トグルが強調表示されているスクリーンショット。

    このビューには、ブラウザーの観点から、アプリケーションのさまざまなテレメトリの視覚的な概要が表示されます。

    ヒント

    シングルページ アプリケーション (SPA) の場合は、ルート変更の enableAutoRouteTracking を有効にして、各論理ページが独自のページ ビューと操作を作成できるようにします。 それ以外の場合、複数のルート変更を 1 つの操作に関連付けることができ、一部のページ ビューの期間は 0として表示できます。

  2. ブラウザー操作の場合、 エンド ツー エンドのトランザクションの詳細 ビューには、ブラウザーの種類とその場所など、ページを要求しているクライアントのページ ビュー プロパティ が表示されます。 この情報は、特定の種類のクライアントに関連するパフォーマンスの問題があるかどうかを判断するのに役立ちます。

    [ページ ビューのプロパティ] セクションが強調表示されている [エンド ツー エンド トランザクションの詳細] ビューを示すスクリーンショット。

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

トランザクションの診断エクスペリエンス

トランザクション診断エクスペリエンス (エンド ツー エンド トランザクションの詳細ビューとも呼ばれます) には、トランザクションのガント チャートが表示されます。このグラフには、期間と応答コードを含むすべてのイベントが一覧表示されます。

この診断エクスペリエンスでは、Application Insights で監視されているすべてのコンポーネントのサーバー側テレメトリが 1 つのビューに自動的に関連付けられ、複数のリソースがサポートされます。 Application Insights によって基になる関係が検出されるため、トランザクションの速度低下または障害の原因となったアプリケーション コンポーネント、依存関係、または例外を簡単に診断することができます。

特定のイベントを選択すると、基になるコマンドや呼び出し履歴などの追加情報など、そのプロパティが表示されます。

このビューには 4 つの重要な部分があります。

結果一覧が強調表示されたトランザクション ビューを示すスクリーンショット。

この折りたたみ可能なウィンドウには、フィルター条件を満たすその他の結果が表示されます。 いずれかの結果を選ぶと、先ほど示した 3 つのセクションの対応する項目が更新されます。 サンプリングがいずれかのコンポーネントで有効になっている場合でも、すべてのコンポーネントで使用可能な詳細を含む可能性が最も高いサンプルを探そうとしています。 これらのサンプルは提案として表示されます。

トランザクション診断エクスペリエンスで単純なビューが提供されるようになりました。これにより、エージェントの手順が明確でストーリーに似た方法で表示されます。 詳細については、「 Application Insights を使用して AI エージェントを監視する」を参照してください。

リリース注釈

リリース注釈は、Application Insights グラフのデプロイやその他の重要なイベントをマークし、変更とパフォーマンス、障害、使用状況との相関関係を把握できるようにします。

Azure Pipelinesを使用した自動注釈

Azure Pipelines は、次のすべての条件に該当する場合に、デプロイ時にリリース注釈を作成します。

  • ターゲット リソースは、APPLICATIONINSIGHTS_CONNECTION_STRING アプリ設定を通じて Application Insights にリンクします。
  • Application Insights リソースは、ターゲット リソースと同じサブスクリプション内にあります。
  • デプロイでは、次のAzure Pipelinesタスクのいずれかを使用します。
タスク コード タスク名 Versions
AzureAppServiceSettings Azure App Service 設定 [任意]
AzureRmWebAppDeployment Azure App Service V3 以降
AzureFunctionApp Azure Functions [任意]
AzureFunctionAppContainer コンテナー向けAzure Functions [任意]
AzureWebAppContainer Azure Web App for Containers(コンテナ向けAzure Webアプリ) [任意]
AzureWebApp Azure Web アプリ [任意]

古い Application Insights 注釈デプロイ タスクをまだ使用している場合は、削除します。

インライン スクリプトを使用してパイプライン内の注釈を構成する

前のセクションのタスクを使用しない場合は、デプロイ ステージにインライン スクリプトを追加します。

  1. 既存のパイプラインを開くか、新しいパイプラインを作成し、[ステージ] でタスクを選択します。

  2. 新しい Azure CLI タスクを追加します。

  3. Azure サブスクリプションを選択します。 [スクリプトの種類][PowerShell] に設定し、[スクリプトの場所][インライン] に設定します。

  4. Azure CLI でリリース注釈を作成する の手順 2 の PowerShell スクリプトを Inline Script に追加します。

  5. スクリプト引数を追加します。 山かっこ内のプレースホルダーを置き換えます。

    -aiResourceId "<aiResourceId>" `
    -releaseName "<releaseName>" `
    -releaseProperties @{"ReleaseDescription"="<a description>";
        "TriggerBy"="<Your name>" }
    

    次の例は、build 変数と release 変数を使用して、オプションの releaseProperties 引数に設定できるメタデータを示しています。 保存 を選択します。

    -releaseProperties @{
    "BuildNumber"="$(Build.BuildNumber)";
    "BuildRepositoryName"="$(Build.Repository.Name)";
    "BuildRepositoryProvider"="$(Build.Repository.Provider)";
    "ReleaseDefinitionName"="$(Build.DefinitionName)";
    "ReleaseDescription"="Triggered by $(Build.DefinitionName) $(Build.BuildNumber)";
    "ReleaseEnvironmentName"="$(Release.EnvironmentName)";
    "ReleaseId"="$(Release.ReleaseId)";
    "ReleaseName"="$(Release.ReleaseName)";
    "ReleaseRequestedFor"="$(Release.RequestedFor)";
    "ReleaseWebUrl"="$(Release.ReleaseWebUrl)";
    "SourceBranch"="$(Build.SourceBranch)";
    "TeamFoundationCollectionUri"="$(System.TeamFoundationCollectionUri)" }
    

Azure CLIを使用してリリース注釈を作成する

DevOps をAzureせずに、任意のプロセスからリリース注釈を作成するには、次の PowerShell スクリプトを使用します。

  1. Azure CLIにサインインします。

  2. 次のスクリプトを CreateReleaseAnnotation.ps1 として保存します。

    param(
        [parameter(Mandatory = $true)][string]$aiResourceId,
        [parameter(Mandatory = $true)][string]$releaseName,
        [parameter(Mandatory = $false)]$releaseProperties = @()
    )
    
    # Function to ensure all Unicode characters in a JSON string are properly escaped
    function Convert-UnicodeToEscapeHex {
      param (
        [parameter(Mandatory = $true)][string]$JsonString
      )
      $JsonObject = ConvertFrom-Json -InputObject $JsonString
      foreach ($property in $JsonObject.PSObject.Properties) {
        $name = $property.Name
        $value = $property.Value
        if ($value -is [string]) {
          $value = [regex]::Unescape($value)
          $OutputString = ""
          foreach ($char in $value.ToCharArray()) {
            $dec = [int]$char
            if ($dec -gt 127) {
              $hex = [convert]::ToString($dec, 16)
              $hex = $hex.PadLeft(4, '0')
              $OutputString += "\u$hex"
            }
            else {
              $OutputString += $char
            }
          }
          $JsonObject.$name = $OutputString
        }
      }
      return ConvertTo-Json -InputObject $JsonObject -Compress
    }
    
    $annotation = @{
        Id = [GUID]::NewGuid();
        AnnotationName = $releaseName;
        EventTime = (Get-Date).ToUniversalTime().GetDateTimeFormats("s")[0];
        Category = "Deployment"; #Application Insights only displays annotations from the "Deployment" Category
        Properties = ConvertTo-Json $releaseProperties -Compress
    }
    
    $annotation = ConvertTo-Json $annotation -Compress
    $annotation = Convert-UnicodeToEscapeHex -JsonString $annotation
    
    $accessToken = (az account get-access-token | ConvertFrom-Json).accessToken
    $headers = @{
        "Authorization" = "Bearer $accessToken"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    $params = @{
        Headers = $headers
        Method  = "Put"
        Uri     = "https://management.azure.com$($aiResourceId)/Annotations?api-version=2015-05-01"
        Body    = $annotation
    }
    Invoke-RestMethod @params
    

CategoryDeploymentAzure portalに注釈が表示されません。

スクリプトを呼び出して、パラメーターの値を渡します。 -releaseProperties パラメーターは省略可能です。

.\CreateReleaseAnnotation.ps1 `
 -aiResourceId "<aiResourceId>" `
 -releaseName "<releaseName>" `
 -releaseProperties @{"ReleaseDescription"="<a description>";
     "TriggerBy"="<Your name>" }
Argument Definition
aiResourceId ターゲット Application Insights リソースのリソース ID。 例: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MyRGName/providers/microsoft.insights/components/MyResourceName
releaseName 新しいリリース注釈の名前。
releaseProperties 注釈にアタッチするカスタム メタデータ。 オプション

注釈を表示する

リリース注釈は、[メトリック] ペインでは使用できません。

Application Insights では、次のエクスペリエンスでリリース注釈が表示されます。

注釈は、グラフの上部にあるマーカーとして視覚化されます。

注釈を含む例外グラフのスクリーンショット。

ブックで注釈を有効にするには [詳細設定] を開いて、[注釈の表示] を選択します。 任意の注釈マーカーを選択すると、リクエスタ、ソース管理ブランチ、リリース パイプライン、環境などのリリースの詳細が表示されます。

よく寄せられる質問

このセクションでは、一般的な質問への回答を示します。

検索ビュー

コンポーネントとは

コンポーネントは、分散型またはマイクロサービス アプリケーションの個別にデプロイできる部分です。 開発者と運用チームは、これらのアプリケーション コンポーネントによって生成されたテレメトリに対するコードレベルの可視性またはアクセスを有しています。

  • コンポーネントは、チームや組織が (コードやテレメトリ) にaccessしていない可能性がある SQL やイベント ハブなどの"観察済み" 外部依存関係とは異なります。
  • コンポーネントは、任意の数のサーバー、ロール、またはcontainer instancesで実行されます。
  • サブスクリプションが異なる場合でも、コンポーネントは個別の Application Insights 接続文字列にすることができます。 コンポーネントは、1 つの Application Insights 接続文字列にレポートするさまざまなロールにすることもできます。 新しいエクスペリエンスでは、その設定方法に関係なく、すべてのコンポーネントの詳細が表示されます。

保持されるデータの量

制限の概要」を参照してください。


サーバー要求に POST データを表示するにはどうすればよいですか?

POST データは自動的には記録されません。 要求本文の詳細をキャプチャし、機密データの収集を回避する必要がある場合は、アプリケーション ログを慎重に使用します。


Azure関数の検索では結果が返されませんか?

Azure Functionsは URL クエリ文字列をログに記録しません。

トランザクション診断

グラフに 1 つのコンポーネントが表示され、他のコンポーネントは詳細なしで外部依存関係としてのみ表示されるのはなぜですか?

次の理由が考えられます。

  • その他のコンポーネントは Application Insights を使用してインストルメント化されましたか。
  • それらには Application Insights SDK の最新の安定バージョンが使用されていますか。
  • これらのコンポーネントが個別の Application Insights リソースである場合は、accessがあることを確認します。 accessがあり、コンポーネントが最新の Application Insights ソフトウェア開発キット (SDK) でインストルメント化されている場合は、右上隅のフィードバック チャネルからお知らせください。

依存関係の重複する行が表示されます。この動作は想定されていますか?

現時点では、送信依存関係呼び出しと受信要求は区別して表示されます。 通常、2 つの呼び出しは、ネットワーク ラウンド トリップのために継続時間の値が異なる以外は、まったく同一に見えます。 先頭のアイコンと継続時間バーの個別のスタイルは、これらを区別するのに役立ちます。 このデータの表示方法はわかりにくいですか。 フィードバックをお待ちしております。


異なるコンポーネントインスタンス間のクロックのズレについてはどうですか。

タイムラインは、トランザクションチャートにおけるクロックスキューを考慮して調整されます。 詳細ウィンドウか、または Log Analytics を使用することで、正確なタイムスタンプを確認できます。


新しいエクスペリエンスで、関連する項目のクエリのほとんどが不足しているのはなぜですか?

この動作は設計によるものです。 すべての関連項目は、コンポーネント全体に渡って、上部と下部のセクションの左側で既に使用できます。 新しいエクスペリエンスの左側で扱われない関連項目が 2 つあります。このイベントの 5 分前後からのすべてのテレメトリと、ユーザー タイムラインです。


Application Insights JavaScript SDK を使用すると、トランザクションあたりのイベント数が少なくなりますか?

トランザクション診断エクスペリエンスでは、同じ操作 ID を共有する単一操作のすべてのテレメトリが表示されます。 既定では、Application Insights SDK for JavaScript は、一意のページ ビューごとに新しい操作を作成します。 シングルページ アプリケーション (SPA) では、1 つのページ ビュー イベントのみが作成され、生成されたすべてのテレメトリに対して 1 つの操作 ID が使用されます。 その結果、多くのイベントが同じ操作に関連付けられる可能性があります。

このようなシナリオでは、自動ルート追跡を使用すると、SPA でのナビゲーションのために新しい操作が自動的に作成されます。 URL ルートが更新されるたびにシステムによってページ ビューが作成されるように、 enableAutoRouteTracking を有効にする必要があります (論理ページ ビューが発生します)。 操作 ID を手動で更新する場合は appInsights.properties.context.telemetryTrace.traceID = Microsoft.ApplicationInsights.Telemetry.Util.generateW3CId() を呼び出します。 手動で PageView イベントをトリガーすると、操作 ID もリセットされます。


トランザクションの詳細期間が上位要求期間に加算されないのはなぜですか?

ガント チャートで説明されていない時間は、追跡される依存関係の対象ではない時間です。 この問題は、外部呼び出しが自動または手動でインストルメント化されていない場合に発生する可能性があります。 また、外部呼び出しのためではなく、処理中にかかった時間が原因で発生することもあります。

すべての呼び出しがインストゥルメント化される場合、時間が費やされる根本原因はおそらくプロセスにあります。 プロセスを診断するための便利なツールは、.NET Profilerです。


Azure ポータルで Application Insights をナビゲート中に「データの取得中にエラーが発生しました」というメッセージが表示された場合はどうしますか?

このエラーは、ブラウザーから必要な API を呼び出すことができなかったか、API から失敗応答が返されたことを示します。 この動作のトラブルシューティングを行うには、ブラウザーの [InPrivate] ウィンドウを開き、実行中のブラウザー拡張機能を無効にしてから、ポータルの動作を引き続き再現できるかどうかを特定します。 ポータル エラーが引き続き発生する場合は、他のブラウザーや他のマシンでテストを試し、API 呼び出しが失敗しているクライアント コンピューターからドメイン ネーム システム (DNS) またはその他のネットワーク関連の問題を調査します。 ポータル エラーが引き続き発生する場合は、予期しない動作を再現しながら、ブラウザー のネットワーク トレースを収集します。 次に、Azure portalからサポート ケースを開きます。

次のステップ