Application Insights での依存関係の追跡

Note

以下のドキュメントは、Application Insights クラシック API に関するものです。 Application Insights の長期的な計画は、OpenTelemetry を使用してデータを収集することです。 詳しくは、「.NET、Node.js、Python、Java アプリケーション用の Azure Monitor OpenTelemetry を有効にする」をご覧ください。

"依存関係" は、アプリケーションによって呼び出される外部コンポーネントです。 一般的には、HTTP を使用して呼び出されるサービス、またはデータベース、あるいはファイル システムです。 Application Insights では、依存関係呼び出しの時間、その失敗と成功、情報 (依存関係の名前など) が計測されます。 特定の依存関係呼び出しを調査し、要求や例外に関連付けることができます。

自動追跡された依存関係

.NET と .NET Core 向けの Application Insights SDK には DependencyTrackingTelemetryModule が付属しています。これは、依存関係を自動的に収集するテレメトリ モジュールです。 この依存関係のコレクションは、リンクされた公式ドキュメントに従って構成されると、ASP.NET アプリケーションと ASP.NET Core アプリケーションに対して自動的に有効になります。モジュール DependencyTrackingTelemetryModule は、Microsoft.ApplicationInsights.DependencyCollector NuGet パッケージとして配布されます。 Microsoft.ApplicationInsights.Web NuGet パッケージか Microsoft.ApplicationInsights.AspNetCore NuGet パッケージのいずれかを使用すると、自動的に取り込まれます。

DependencyTrackingTelemetryModule では現在のところ、次の依存関係が自動的に追跡されます。

依存関係 詳細
HTTP/HTTPS ローカルまたはリモートの http/https 呼び出し。
WCF 呼び出し HTTP ベースのバインディングを使用する場合にのみ自動追跡されます。
SQL SqlClient で行われる呼び出し。 SQL クエリのキャプチャについては、「詳細な SQL 追跡で完全な SQL クエリを取得する」を参照してください。
Azure Blob Storage、Table Storage、または Queue Storage Azure Storage クライアントで行われた呼び出し。
Azure Event Hubs クライアント SDK 最新のパッケージを使用します: https://nuget.org/packages/Azure.Messaging.EventHubs
Azure Service Bus クライアント SDK 最新のパッケージを使用します: https://nuget.org/packages/Azure.Messaging.ServiceBus
Azure Cosmos DB HTTP/HTTPS が使用されている場合は、自動的に追跡されます。 また、TCP を使用した直接モードでの操作のトレースは、プレビュー パッケージ >= 3.33.0-preview を使用して自動的にキャプチャされます。 詳細については、ドキュメントを参照してください。

依存関係が欠落している場合は、別の SDK を使用して、自動収集された依存関係の一覧にあることを確認します。 依存関係が自動収集されない場合でも、TrackDependency 呼び出しを使えば手動で追跡することができます。

コンソール アプリで自動依存関係追跡を設定する

.NET コンソール アプリから依存関係を自動的に追跡するには、NuGet パッケージ Microsoft.ApplicationInsights.DependencyCollector をインストールし、DependencyTrackingTelemetryModule を初期化します:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

.NET Core コンソール アプリの場合、TelemetryConfiguration.Active は非推奨です。 Worker サービスに関するドキュメントおよび ASP.NET Core の監視に関するドキュメントに記載のガイダンスを参照してください。

自動依存関係監視のしくみは?

依存関係は、次のいずれかの方法で自動的に収集されます。

  • 一部のメソッドにバイト コード インストルメンテーションを使用する。 StatusMonitor または Azure App Service Web Apps 拡張機能から InstrumentationEngine を使用します。
  • EventSource コールバック。
  • 最新の .NET または .NET Core SDK の DiagnosticSource コールバック。

依存関係を手動で追跡する

次の例では、依存関係が自動的に収集されず、手動追跡が必要になります。

  • Azure Cosmos DB は、HTTP/HTTPS が使用されている場合にのみ、自動的に追跡されます。 2.22.0-Beta1 より古い SDK バージョンの Application Insights では、TCP モードは自動的にキャプチャされません。
  • Redis

SDK で自動追跡されない依存関係については、標準の自動収集モジュールで使用される TrackDependency API を利用し、手動で追跡できます。

自分で記述していないアセンブリを使ってコードを作成する場合、それに対するすべての呼び出しを測定できます。 このシナリオでは、それが応答時間にどのように貢献するかを知ることができます。

このデータを Application Insights 内の依存関係グラフに表示するには、データを TrackDependency を使用して送信します:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

あるいは、TelemetryClient から拡張メソッドの StartOperationStopOperation が提供されます。出力方向の依存関係の追跡で確認できるように、それを利用して依存関係を手動追跡できます。

標準の依存関係追跡モジュールを無効にするには、ASP.NET アプリケーションの ApplicationInsights.config にある DependencyTrackingTelemetryModule への参照を削除します。 ASP.NET Core アプリケーションの場合は、「Application Insights for ASP.NET Core アプリケーション」の指示に従ってください。

Web ページから AJAX 呼び出しを追跡する

Web ページの場合、Application Insights JavaScript SDK によって AJAX 呼び出しが依存関係として自動収集されます。

詳細な SQL 追跡で完全な SQL クエリを取得する

注意

Azure Functions には、SQL テキスト コレクションを有効にするための別の設定が必要です。 詳細については、「SQL クエリ コレクションを有効にする」を参照してください。

SQL 呼び出しの場合、サーバーとデータベースの名前が常に収集され、収集された DependencyTelemetry の名前として保存されます。 「データ」という名称の別のフィールドがあります。これに完全な SQL クエリ テキストを含めることができます。

ASP.NET Core アプリケーションの場合は、次を使用して SQL テキスト コレクションをオプトインすることが必要になりました。

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

ASP.NET アプリケーションの場合は、バイト コード インストルメンテーションの支援により、完全な SQL クエリ テキストが収集されます。これには、インストルメンテーション エンジン、または System.Data.SqlClient ライブラリではなく Microsoft.Data.SqlClient NuGet パッケージの使用が要求されます。 完全な SQL クエリの収集を有効にするためのプラットフォーム固有の手順を、次の表に示します。

プラットフォーム 完全な SQL クエリを取得するために必要な手順
Azure App Service の Web アプリ Web アプリのコントロール パネルで Application Insights ペインを開き、SQL コマンドを .NET の下で有効にします。
IIS Server (Azure VM やオンプレミスなど) Microsoft.Data.SqlClient NuGet パッケージを使用するか、Application Insights Agent PowerShell モジュールを使用して、インストルメンテーション エンジンをインストールして IIS を再起動します。
Azure クラウド サービス StatusMonitor をインストールするスタートアップ タスクを追加します。
ビルド時に ASP.NET または ASP.NET Core アプリケーション用の NuGet パッケージをインストールすることで、アプリを ApplicationInsights SDK にオンボードする必要があります。
IIS Express Microsoft.Data.SqlClient NuGet パッケージを使用します。
Azure App Service の Web ジョブ Microsoft.Data.SqlClient NuGet パッケージを使用します。

前述のプラットフォーム固有の手順に加えて、次のコードで applicationInsights.config ファイルを変更することで、"SQL コマンドの収集の有効化も明示的に選択する" 必要があります。

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

前述の例では、インストルメンテーション エンジンが正しくインストールされていることを検証する適切な方法は、収集された DependencyTelemetry の SDK バージョンが rddp であることを確認することです。 rdddsd または rddf を使用することは、DiagnosticSource または EventSource コールバックを介して依存関係が収集されること、そのため、完全な SQL クエリはキャプチャされないことを示します。

依存関係データが見つかる場所

  • アプリケーション マップでは、アプリと隣接コンポーネント間の依存関係が視覚化されます。
  • トランザクションの診断には、統合され、関連付けられたサーバー データが表示されます。
  • [ブラウザー] タブには、ユーザーのブラウザーからの AJAX 呼び出しが表示されます。
  • 低速または失敗した要求から選択していき、依存関係呼び出しを確認します。
  • 依存関係データのクエリを実行するには、Analytics を使用できます。

低速なリクエストの診断

各要求イベントは、依存関係呼び出し、例外、および要求の処理中に追跡されるその他のイベントに関連しています。 そのため、いくつかのリクエストが正しく実行されない場合は、それが依存関係からの応答が遅いためかどうかを調べることができます。

リクエストから依存関係までのトレース

左側の [パフォーマンス] タブを選択し、上部にある [依存関係] タブを選択します。

[全体] の下の [依存関係名] を選択します。 依存関係を選択すると、その依存関係の期間の分布グラフが右側に表示されます。

Screenshot that shows the Dependencies tab open to select a Dependency Name in the chart.

右下にある [サンプル] ボタンを選択します。 次に、サンプルを選択して、エンドツーエンドのトランザクション詳細を表示します。

Screenshot that shows selecting a sample to see the end-to-end transaction details.

ライブ サイトのプロファイリング

Application Insights プロファイラーは、ライブ サイトへの HTTP 呼び出しをトレースし、コード内の関数のうち最も時間がかかったものを示します。

失敗した要求

失敗した要求も、依存関係への失敗した呼び出しに関連している可能性があります。

左側の [失敗] タブを選択し、上部の [依存関係] タブを選択します。

Screenshot that shows selecting the failed requests chart.

ここで、失敗した依存関係の数を確認できます。 失敗した依存関係に関する詳細を取得するには、下の表で [依存関係名] を選択します。 右下の青色の [依存関係] ボタンを選択すると、エンドツーエンドのトランザクションの詳細を取得できます。

ログ (Analytics)

依存関係は Kusto クエリ言語で追跡できます。 次に例をいくつか示します。

  • これは、失敗した依存関係呼び出しを見つけます。

    
        dependencies | where success != "True" | take 10
    
  • これは、AJAX 呼び出しを見つけます。

    
        dependencies | where client_Type == "Browser" | take 10
    
  • これは、要求に関連する依存関係呼び出しを見つけます。

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • これは、ページ ビューに関連する AJAX 呼び出しを見つけます。

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

よく寄せられる質問

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

依存関係の自動コレクターが呼び出しの失敗を依存関係に報告する方法は?

依存関係の呼び出しに失敗すると、success フィールドが False に設定されます。 モジュール DependencyTrackingTelemetryModuleExceptionTelemetry を報告しません。 依存関係の完全なデータ モデルについては、「Application Insights テレメトリ データ モデル」を参照してください。

"依存関係テレメトリのインジェスト待機時間を計算する方法は? "

次のコードを使用します。

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

"依存関係の呼び出しが開始された時刻を判断する方法は? "

Log Analytics のクエリ ビューでは、timestamp は依存関係呼び出しの応答を受信した直後に発生する TrackDependency() 呼び出しが開始された瞬間が表されています。 依存関係の呼び出しが開始された時刻を計算するには、timestamp を取得して、依存関係の呼び出しの記録済み duration を減算します。

Application Insights での依存関係の追跡には、応答本文のログ記録が含まれていますか?

Application Insights での依存関係の追跡には、これによって生成されるテレメトリがほとんどのアプリケーションにとっては多すぎるため、ログ応答本文が含まれません。

オープンソース SDK

あらゆる Application Insights SDK と同様に、依存関係収集モジュールもオープンソースです。 コードの閲覧、投稿、問題のレポートは公式の GitHub リポジトリで行ってください。

依存関係の自動収集

以下に示したのは、アプリケーションのコードに別途変更を加えなくても、現時点で依存関係として自動的に検出することができる依存関係呼び出しの一覧です。 これらの依存関係は、Application Insights の [アプリケーション マップ] ビューと [トランザクション診断] ビューで視覚化されます。 必要な依存関係が以下の一覧にない場合でも、TrackDependency 呼び出しを使えば手動で追跡することができます。

.NET

アプリケーション フレームワーク バージョン
ASP.NET Webforms 4.5 以降
ASP.NET MVC 4 以降
ASP.NET WebAPI 4.5 以降
ASP.NET Core 1.1 以降
通信ライブラリ
HttpClient 4.5 以降、.NET Core 1.1 以降
SqlClient .NET Core 1.0 以降、NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - 最新の安定版リリース (下記の「注」を参照)。
Event Hubs クライアント SDK 1.1.0
ServiceBus Client SDK 7.0.0
ストレージ クライアント
ADO.NET 4.5 以降

Note

以前のバージョンの Microsoft.Data.SqlClient には、既知の問題があります。 この問題を軽減するには、1.1.0 以降を使用することをお勧めします。 Entity Framework Core には、Microsoft.Data.SqlClient の最新の安定版リリースが必ずしも付属しているとは限らないので、この問題を回避するには、1.1.0 以降を使用していることを確認することをお勧めします。

Java

Application Insights Java の自動収集される依存関係の一覧を参照してください。

Node.js

現在サポートされているモジュールの最新の一覧は、こちらで管理されています。

JavaScript

通信ライブラリ バージョン
XMLHttpRequest All

次のステップ