Application Insights 中的相依性追蹤

注意

下列文件依賴Application Insights傳統 API。 Application Insights 的長期計劃是使用 OpenTelemetry 收集數據。 如需詳細資訊,請參閱 為 .NET、Node.js、Python 和 Java 應用程式啟用 Azure 監視器 OpenTelemetry。

依性 是應用程式所呼叫的元件。 它通常是使用 HTTP、資料庫或文件系統呼叫的服務。 Application Insights 會測量相依性呼叫的持續時間,以及其是否失敗,以及相依性名稱等資訊。 您可以調查特定的相依性呼叫,並將其與要求和例外狀況相互關聯。

自動追蹤的相依性

適用於 .NET 和 .NET Core 的 Application Insights SDK 隨附於 DependencyTrackingTelemetryModule,這是自動收集相依性的遙測模組。 根據連結的官方檔設定此相依性集合時,會自動為 ASP.NETASP.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 儲存體、數據表 儲存體 或佇列 儲存體 使用 Azure 儲存體 客戶端進行的呼叫。
Azure 事件中樞 用戶端 SDK 使用最新的套件: https://nuget.org/packages/Azure.Messaging.EventHubs
Azure 服務匯流排 用戶端 SDK 使用最新的套件: https://nuget.org/packages/Azure.Messaging.ServiceBus
Azure Cosmos DB 如果使用 HTTP/HTTPS,則會自動追蹤。 使用 TCP 直接模式的作業追蹤也會使用預覽套件 >= 3.33.0-preview 自動擷取。 如需詳細資訊, 請瀏覽檔

如果您遺失相依性或使用不同的 SDK,請確定它位於自動收集的相依性清單中。 如果未自動收集相依性,您可以使用追蹤相依性呼叫手動追蹤它。

在主控台應用程式中設定自動相依性追蹤

若要從 .NET 控制台應用程式自動追蹤相依性,請安裝 NuGet 套件 Microsoft.ApplicationInsights.DependencyCollector 並初始化 DependencyTrackingTelemetryModule

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

針對 .NET Core 控制台應用程式, TelemetryConfiguration.Active 已經過時。 請參閱背景工作服務檔和 ASP.NET 核心監視檔中指引。

自動相依性監視如何運作?

相依性是使用下列其中一種技術自動收集:

  • 在 select 方法周圍使用位元組程式代碼檢測。 StatusMonitor請使用 InstrumentationEngine 或 Azure App 服務 Web Apps 擴充功能。
  • EventSource 回調。
  • DiagnosticSource 最新 .NET 或 .NET Core SDK 中的回呼。

手動追蹤相依性

下列不會自動收集的相依性範例需要手動追蹤:

  • 只有在使用 HTTP/HTTPS,才會自動追蹤 Azure Cosmos DB。 適用於 SDK 2.22.0-Beta1版本的 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 應用程式,請遵循 ASP.NET Core 應用程式的 Application Insights 中的指示。

追蹤來自網頁的 AJAX 呼叫

針對網頁,Application Insights JavaScript SDK 會自動收集 AJAX 呼叫作為相依性。

取得完整 SQL 查詢的進階 SQL 追蹤

注意

Azure Functions 需要個別的設定,才能啟用 SQL 文字集合。 如需詳細資訊,請參閱 啟用 SQL 查詢集合

針對 SQL 呼叫,伺服器和資料庫的名稱一律會收集並儲存為所 DependencyTelemetry收集的名稱。 另一個名為 data 的字段可以包含完整的 SQL 查詢文字。

針對 ASP.NET Core 應用程式,現在必須使用下列專案來選擇加入 SQL Text 集合:

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

對於 ASP.NET 應用程式,會透過位元組程式代碼檢測的協助收集完整的 SQL 查詢文字,這需要使用檢測引擎或使用 Microsoft.Data.SqlClient NuGet 套件,而不是 System.Data.SqlClient 連結庫。 下表說明啟用完整SQL查詢集合的平臺特定步驟。

平台 取得完整 SQL 查詢所需的步驟
Azure App 服務 中的 Web Apps 在 Web 應用程式控制面板中, 開啟 [Application Insights] 窗格 ,並在 .NET 下啟用 SQL 命令。
IIS Server (Azure 虛擬機器、內部部署等) 請使用 Microsoft.Data.SqlClient NuGet 套件,或使用 Application Insights 代理程式 PowerShell 模組來 安裝檢測引擎 並重新啟動 IIS。
Azure 雲端服務 新增啟動工作以安裝 StatusMonitor
您的應用程式應該在建置階段上線至 ApplicationInsights SDK,方法是安裝適用於 ASP.NETASP.NET Core 應用程式的 NuGet 套件。
IIS Express 使用 Microsoft.Data.SqlClient NuGet 套件。
Azure App 服務 中的 WebJobs 使用 Microsoft.Data.SqlClient NuGet 套件。

除了上述平臺特定步驟之外,您還必須使用下列程式代碼修改檔案,明確選擇加入以啟用 SQL 命令集合applicationInsights.config

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

在上述案例中,驗證檢測引擎正確安裝的正確方式是驗證所 DependencyTelemetry 收集的 SDK 版本為 rddprdddsd使用 或表示透過 或 rddfEventSource 回呼收集相DiagnosticSource依性,因此不會擷取完整的 SQL 查詢。

哪裡可以找到相依性數據

  • 應用程式對應 會將應用程式與鄰近元件之間的相依性可視化。
  • 交易診斷 會顯示統一、相互關聯的伺服器數據。
  • [瀏覽器] 索引標籤 會顯示使用者瀏覽器的 AJAX 呼叫。
  • 從緩慢或失敗的要求中選取,以檢查其相依性呼叫。
  • 分析可用來查詢相依性數據。

診斷慢速要求

每個要求事件都會與處理要求時所追蹤的相依性呼叫、例外狀況和其他事件相關聯。 因此,如果某些要求執行錯誤,您可以找出它是否因為相依性回應緩慢。

從要求追蹤至相依性

選取左側的 [ 效能] 索引卷標,然後選取頂端的 [ 相依性] 索引卷標。

選取 [整體] 底下的 [相依性名稱]。 選取相依性之後,該相依性持續時間分佈的圖表會出現在右側。

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。 模組 DependencyTrackingTelemetryModule 不會報告 ExceptionTelemetry。 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 應用程式對應交易診斷 檢視中可視化。 如果您的相依性不在下列清單中,您仍然可以使用 追蹤相依性呼叫手動追蹤它。

.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 - 最新的穩定版本。 (請參閱下面的附註。
事件中樞用戶端 SDK 1.1.0
ServiceBus 用戶端 SDK 7.0.0
儲存體用戶端
ADO.NET 4.5+

注意

舊版 Microsoft.Data.SqlClient 有 已知問題 。 建議您使用 1.1.0 或更新版本來減輕此問題。 Entity Framework Core 不一定隨附最新穩定版本的 Microsoft.Data.SqlClient,因此建議您確認您至少在 1.1.0 版,以避免此問題。

Java

請參閱 Application Insights Java 自動 收集相依性的清單。

Node.js

這裡會維護最新支援的模組清單。

JavaScript

通訊連結庫 版本
XMLHttpRequest 全部

下一步