Azure Application Insights での依存関係の追跡Dependency Tracking in Azure Application Insights

依存関係 は、アプリによって呼び出される外部コンポーネントです。A dependency is an external component that is called by your app. 一般的には、HTTP を使用して呼び出されるサービス、またはデータベース、あるいはファイル システムです。It's typically a service called using HTTP, or a database, or a file system. Application Insights では、依存関係呼び出しの時間、その失敗と成功、追加情報 (依存関係の名前など) が計測されます。Application Insights measures the duration of dependency calls, whether its failing or not, along with additional information like name of dependency and so on. 特定の依存関係呼び出しを調査し、要求や例外に関連付けることができます。You can investigate specific dependency calls, and correlate them to requests and exceptions.

自動追跡された依存関係Automatically tracked dependencies

.NET と .NET Core 向けの Application Insights SDK には DependencyTrackingTelemetryModule が付属しています。これは、依存関係を自動的に収集するテレメトリ モジュールです。Application Insights SDKs for .NET and .NET Core ships with DependencyTrackingTelemetryModule which is a Telemetry Module that automatically collects dependencies. リンクされている公式ドキュメントに従って構成されているとき、ASP.NET アプリケーションと ASP.NET Core アプリケーションでは、この依存関係収集が自動的に有効になります。DependencyTrackingTelemetryModuleこの NuGet パッケージとして出荷され、NuGet パッケージの Microsoft.ApplicationInsights.Web または Microsoft.ApplicationInsights.AspNetCore を使用するとき、自動的に取り込まれます。This dependency collection is enabled automatically for ASP.NET and ASP.NET Core applications, when configured as per the linked official docs. DependencyTrackingTelemetryModule is shipped as this NuGet package, and is brought automatically when using either of the NuGet packages Microsoft.ApplicationInsights.Web or Microsoft.ApplicationInsights.AspNetCore.

DependencyTrackingTelemetryModule では現在のところ、次の依存関係が自動的に追跡されます。DependencyTrackingTelemetryModule currently tracks the following dependencies automatically:

依存関係Dependencies 詳細Details
Http/HttpsHttp/Https ローカルまたはリモートの http/https 呼び出しLocal or Remote http/https calls
WCF 呼び出しWCF calls Http ベースのバインディングを使用する場合にのみ自動追跡されます。Only tracked automatically if Http-based bindings are used.
SQLSQL SqlClient で行われる呼び出し。Calls made with SqlClient. SQL クエリのキャプチャについてはこちらを参照してください。See this for capturing SQL query.
Azure Storage (BLOB、テーブル、キュー)Azure storage (Blob, Table, Queue ) Azure Storage Client で行われる呼び出し。Calls made with Azure Storage Client.
EventHub Client SDKEventHub Client SDK バージョン 1.1.0 以上。Version 1.1.0 and above.
ServiceBus Client SDKServiceBus Client SDK バージョン 3.0.0 以上。Version 3.0.0 and above.
Azure Cosmos DBAzure Cosmos DB HTTP/HTTPS が使用されている場合にのみ、自動的に追跡されます。Only tracked automatically if HTTP/HTTPS is used. TCP モードは、Application Insights ではキャプチャされません。TCP mode won't be captured by Application Insights.

依存関係が欠落している場合は、別の SDK を使用して、自動収集された依存関係の一覧にあることを確認します。If you're missing a dependency, or using a different SDK make sure it's in the list of auto-collected dependencies. 依存関係が自動収集されない場合でも、TrackDependency 呼び出しを使えば手動で追跡することができます。If the dependency isn't auto-collected, you can still track it manually with a track dependency call.

コンソール アプリで自動依存関係追跡を設定するSetup automatic dependency tracking in Console Apps

.NET/.NET Core コンソール アプリから依存関係を自動的に追跡するには、NuGet パッケージ Microsoft.ApplicationInsights.DependencyCollector をインストールし、次のように DependencyTrackingTelemetryModule を初期化します。To automatically track dependencies from .NET/.NET Core console apps, install the Nuget package Microsoft.ApplicationInsights.DependencyCollector, and initialize DependencyTrackingTelemetryModule as follows:

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

自動依存関係監視のしくみは?How automatic dependency monitoring works?

依存関係は、次のいずれかの方法で自動的に収集されます。Dependencies are automatically collected by using one of the following techniques:

  • 一部のメソッドにバイト コード インストルメンテーションを使用する。Using byte code instrumentation around select methods. (StatusMonitor または Azure Web アプリ拡張機能の InstrumentationEngine)(InstrumentationEngine either from StatusMonitor or Azure Web App Extension)
  • EventSource コールバックEventSource callbacks
  • DiagnosticSource コールバック (最新の .NET/.NET Core SDK で)DiagnosticSource callbacks (in the latest .NET/.NET Core SDKs)

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

次の例では、依存関係が自動的に収集されず、手動追跡が必要になります。The following are some examples of dependencies, which aren't automatically collected, and hence require manual tracking.

  • Azure Cosmos DB は、HTTP/HTTPS が使用されている場合にのみ、自動的に追跡されます。Azure Cosmos DB is tracked automatically only if HTTP/HTTPS is used. TCP モードは、Application Insights ではキャプチャされません。TCP mode won't be captured by Application Insights.
  • RedisRedis

SDK で自動追跡されない依存関係については、標準の自動収集モジュールで使用される TrackDependency API を利用し、手動で追跡できます。For those dependencies not automatically collected by SDK, you can track them manually using the TrackDependency API that is used by the standard auto collection modules.

たとえば、自分で記述していないアセンブリを使ってコードを作成する場合、それに対するすべての呼び出しを測定し、何が応答時間に貢献するかを知ることができます。For example, if you build your code with an assembly that you didn't write yourself, you could time all the calls to it, to find out what contribution it makes to your response times. このデータを Application Insights 内の依存関係グラフに表示するには、データを TrackDependencyを使用して送信します。To have this data displayed in the dependency charts in Application Insights, send it using 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 が提供されます。こちらで確認できるように、それを利用して依存関係を手動追跡できます。Alternatively, TelemetryClient provides extension methods StartOperation and StopOperation which can be used to manually track dependencies, as shown here

標準の依存関係追跡モジュールを無効にするには、ASP.NET アプリケーションの ApplicationInsights.config にある DependencyTrackingTelemetryModule への参照を削除します。If you want to switch off the standard dependency tracking module, remove the reference to DependencyTrackingTelemetryModule in ApplicationInsights.config for ASP.NET applications. ASP.NET Core アプリケーションの場合、こちらにある指示に従ってください。For ASP.NET Core applications, follow instructions here.

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

Web ページの場合、Application Insights JavaScript SDK によって AJAX 呼び出しが依存関係として自動収集されます。For web pages, Application Insights JavaScript SDK automatically collects AJAX calls as dependencies.

詳細な SQL 追跡で完全な SQL クエリを取得するAdvanced SQL tracking to get full SQL Query

SQL 呼び出しの場合、サーバーとデータベースの名前が常に収集され、収集された DependencyTelemetry の名前として保存されます。For SQL calls, the name of the server and database is always collected and stored as name of the collected DependencyTelemetry. "データ" という名称の追加フィールドがあります。これに完全な SQL クエリ テキストを含めることができます。There's an additional field called 'data', which can contain the full SQL query text.

ASP.NET Core アプリケーションの場合、完全な SQL クエリを取得するために必要な追加手順はありません。For ASP.NET Core applications, there's no additional step required to get the full SQL Query.

ASP.NET アプリケーションの場合、インストルメンテーション エンジンを必要とするバイト コード インストルメンテーションの支援により完全な SQL クエリが収集されます。For ASP.NET applications, full SQL query is collected with the help of byte code instrumentation, which requires instrumentation engine. 以下の説明のように、プラットフォーム固有の追加手順が必要になります。Additional platform-specific steps, as described below, are required.

プラットフォームPlatform 完全な SQL クエリを取得するために必要な手順Step(s) Needed to get full SQL Query
Azure Web アプリAzure Web App Web アプリのコントロール パネルで Application Insights ブレードを開き、SQL コマンドを .NETIn your web app control panel, open the Application Insights blade and enable SQL Commands under .NET
IIS Server (Azure VM やオンプレミスなど) の下で有効にします。IIS Server (Azure VM, on-prem, and so on.) Status Monitor PowerShell モジュールを使用してインストルメンテーション エンジンをインストールし、IIS を再起動します。Use the Status Monitor PowerShell Module to install the Instrumentation Engine and restart IIS.
Azure Cloud ServicesAzure Cloud Service StatusMonitor をインストールするスタートアップ タスクを追加しますAdd startup task to install StatusMonitor
ビルド時に ASP.NET または ASP.NET Core アプリケーション用の NuGet パッケージをインストールすることで、アプリを ApplicationInsights SDK にオンボードする必要があります。Your app should be onboarded to ApplicationInsights SDK at build time by installing NuGet packages for ASP.NET or ASP.NET Core applications
IIS ExpressIIS Express サポートされていませんNot supported

上記の例では、インストルメンテーション エンジンが正しくインストールされていることを検証する適切な方法は、収集された DependencyTelemetry の SDK バージョンが "rddp" であることを確認することです。In the above cases, the correct way of validating that instrumentation engine is correctly installed is by validating that the SDK version of collected DependencyTelemetry is 'rddp'. "rdddsd" または "rddf" は、DiagnosticSource または EventSource コールバックを介して依存関係が収集されること、そのため、完全な SQL クエリはキャプチャされないことを示します。'rdddsd' or 'rddf' indicates dependencies are collected via DiagnosticSource or EventSource callbacks, and hence full SQL query won't be captured.

依存関係データが見つかる場所Where to find dependency data

  • アプリケーション マップでは、アプリと隣接コンポーネント間の依存関係が視覚化されます。Application Map visualizes dependencies between your app and neighboring components.
  • トランザクションの診断には、統合され、関連付けられたサーバー データが表示されます。Transaction Diagnostics shows unified, correlated server data.
  • [ブラウザー] タブには、ユーザーのブラウザーからの AJAX 呼び出しが表示されます。Browsers tab shows AJAX calls from your users' browsers.
  • 低速または失敗した要求からクリックしていき、依存関係呼び出しを確認します。Click through from slow or failed requests to check their dependency calls.
  • 依存関係データのクエリを実行するには、Analytics を使用できます。Analytics can be used to query dependency data.

低速なリクエストの診断Diagnose slow requests

各要求イベントは、依存関係呼び出し、例外、およびアプリでの要求の処理中に追跡されるその他のイベントに関連しています。Each request event is associated with the dependency calls, exceptions, and other events that are tracked while your app is processing the request. そのため、いくつかのリクエストが正しく実行されない場合は、それが依存関係からの応答が遅いためかどうかを調べることができます。So if some requests are doing badly, you can find out whether it's because of slow responses from a dependency.

リクエストから依存関係までのトレースTracing from requests to dependencies

[パフォーマンス] タブを開き、上部の操作の横にある [依存関係] タブに移動します。Open the Performance tab and navigate to the Dependencies tab at the top next to operations.

全体の下の [依存関係名] をクリックします。Click on a Dependency Name under overall. 依存関係を選択すると、その依存関係の期間の分布グラフが右側に表示されます。After you select a dependency a graph of that dependency's distribution of durations will show up on the right.

[パフォーマンス] タブで、上部の [依存関係] タブ、グラフ内の [依存関係名] の順にクリックします。

右下の青色の [サンプル] ボタン、サンプルの順にクリックし、エンドツーエンドのトランザクションの詳細を表示します。Click on the blue Samples button on the bottom right and then on a sample to see the end-to-end transaction details.

サンプルをクリックして、エンドツーエンドのトランザクション詳細を表示します。

ライブ サイトのプロファイリングProfile your live site

時間がどこに使われているのか見当がつかないでしょうか。No idea where the time goes? Application Insights プロファイラーは、ライブ サイトへの HTTP 呼び出しをトレースし、コード内の関数のうち最も時間がかかったものを示します。The Application Insights profiler traces HTTP calls to your live site and shows you the functions in your code that took the longest time.

失敗した要求Failed requests

失敗した要求も、依存関係への失敗した呼び出しに関連している可能性があります。Failed requests might also be associated with failed calls to dependencies.

左側の [失敗] タブに移動し、上部の [依存関係] タブをクリックします。We can go to the Failures tab on the left and then click on the dependencies tab at the top.

失敗した要求のグラフをクリックします。

ここで、失敗した依存関係の数を確認できます。Here you will be able to see the failed dependency count. 失敗した回に関する詳細を確認するには、一番下の表の依存関係名をクリックします。To get more details about a failed occurrence trying clicking on a dependency name in the bottom table. 右下の青色の [依存関係] ボタンをクリックすると、エンドツーエンドのトランザクションの詳細を取得できます。You can click on the blue Dependencies button at the bottom right to get the end-to-end transaction details.

ログ (Analytics)Logs (Analytics)

依存関係は Kusto クエリ言語で追跡できます。You can track dependencies in the Kusto query language. 次に例をいくつか示します。Here are some examples.

  • これは、失敗した依存関係呼び出しを見つけます。Find any failed dependency calls:

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

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

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

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

よく寄せられる質問Frequently asked questions

依存関係の自動コレクターが呼び出しの失敗を依存関係に報告する方法は?How does automatic dependency collector report failed calls to dependencies?

  • 依存関係の呼び出しに失敗すると、"成功" フィールドが False に設定されます。Failed dependency calls will have 'success' field set to False. DependencyTrackingTelemetryModule から ExceptionTelemetry が報告されることはありません。DependencyTrackingTelemetryModule does not report ExceptionTelemetry. 依存関係の完全なデータ モデルはこちらで説明されています。The full data model for dependency is described here.

オープンソース SDKOpen-source SDK

あらゆる Application Insights SDK と同様に、依存関係収集モジュールもオープンソースです。Like every Application Insights SDK, dependency collection module is also open-source. コードの閲覧、投稿、問題報告は公式の GitHub リポジトリで行います。Read and contribute to the code, or report issues at the official GitHub repo.

次の手順Next steps