Abhängigkeitsnachverfolgung in Application Insights

Eine Abhängigkeit ist eine Komponente, die von Ihrer Anwendung aufgerufen wird. Es handelt sich in der Regel um einen Dienst, der über HTTP, eine Datenbank oder ein Dateisystem aufgerufen wird. Application Insights misst die Dauer von Abhängigkeitsaufrufen und ob sie fehlschlagen oder nicht, zusammen mit Informationen wie dem Namen der Abhängigkeit. Sie können bestimmte Abhängigkeitsaufrufe untersuchen und sie mit Anforderungen und Ausnahmen korrelieren.

Hinweis

Die folgende Dokumentation basiert auf der klassischen Application Insights-API. Der langfristige Plan für Application Insights besteht darin, Daten mithilfe von OpenTelemetry zu sammeln. Weitere Informationen finden Sie unter Aktivieren von Azure Monitor OpenTelemetry für .NET-, Node.js-, Python- und Java-Anwendungen.

Automatisch nachverfolgte Abhängigkeiten

Application Insights-SDKs für .NET und .NET Core werden mit DependencyTrackingTelemetryModule ausgeliefert, einem Telemetriemodul, das Abhängigkeiten automatisch erfasst. Diese Abhängigkeitssammlung wird automatisch für ASP.NET- und ASP.NET Core-Anwendungen aktiviert, wenn sie gemäß den verknüpften offiziellen Dokumenten konfiguriert ist. Das Modul DependencyTrackingTelemetryModule wird als NuGet-Paket Microsoft.ApplicationInsights.DependencyCollector ausgeliefert. Es wird automatisch angezeigt, wenn Sie entweder das Microsoft.ApplicationInsights.Web NuGet-Paket oder das Microsoft.ApplicationInsights.AspNetCore NuGet-Paket verwenden.

Derzeit verfolgt DependencyTrackingTelemetryModule automatisch die folgenden Abhängigkeiten:

Abhängigkeiten Details
HTTP/HTTPS Lokale oder Remote-HTTP/HTTPS-Aufrufe.
WCF-Aufrufe Wird nur automatisch verfolgt, wenn HTTP-basierte Bindungen verwendet werden.
SQL Aufrufe mit SqlClient. Informationen zum Erfassen von SQL-Abfragen finden Sie im Abschnitt Erweitertes SQL-Tracking, um eine vollständige SQL-Abfrage zu erhalten.
Azure Blob Storage, Table Storage, oder Queue Storage Aufrufe mit dem Azure Storage-Client.
Azure Event Hubs-Client-SDK Verwenden Sie das neueste Paket: https://nuget.org/packages/Azure.Messaging.EventHubs.
Azure Service Bus-Client-SDK Verwenden Sie das neueste Paket: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Wird automatisch nachverfolgt, wenn HTTP/HTTPS verwendet wird. Die Ablaufverfolgung für Vorgänge im direkten Modus mit TCP wird auch automatisch mithilfe des Vorschaupakets >= 3.33.0-Previewerfasst. Weitere Details finden Sie in der Dokumentation.

Wenn Sie eine Abhängigkeit vermissen oder ein anderes SDK verwenden, vergewissern Sie sich, dass es sich in der Liste der automatisch erfassten Abhängigkeiten befindet. Wenn die Abhängigkeit nicht automatisch erfasst wird, können Sie sie manuell mit einem Track-Abhängigkeitsaufruf nachverfolgen.

Richten Sie die automatische Abhängigkeitsverfolgung in Konsolen-Apps ein

Um Abhängigkeiten in .NET-Konsolen-Apps automatisch nachzuverfolgen, installieren Sie das NuGet-Paket Microsoft.ApplicationInsights.DependencyCollector, und initialisieren Sie DependencyTrackingTelemetryModule wie folgt:

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

Für .NET Core-Konsolenanwendungen ist TelemetryConfiguration.Active veraltet. Weitere Informationen finden Sie in der Dokumentation zum Worker-Dienst und in der Dokumentation zur ASP.NET Core-Überwachung.

Wie funktioniert die automatische Abhängigkeitsüberwachung?

Abhängigkeiten werden über eine der folgenden Methoden automatisch gesammelt:

  • Über die Bytecodeinstrumentierung um ausgewählte Methoden Verwenden Sie InstrumentationEngine entweder von StatusMonitor oder einer Azure App Service Web-Apps Erweiterung.
  • EventSourceRückrufe.
  • DiagnosticSource Rückrufe in den neuesten .NET- oder .NET Core-SDKs.

Manuelle Nachverfolgung von Abhängigkeiten

Die folgenden Beispiele für Abhängigkeiten, die nicht automatisch erfasst werden, erfordern eine manuelle Nachverfolgung:

  • Azure Cosmos DB wird nur dann automatisch nachverfolgt, wenn HTTP/HTTPS verwendet wird. Der TCP-Modus wird für SDK-Versionen, die älter als 2.22.0-Beta1 sind, nicht automatisch von Application Insights erfasst.
  • Redis

Abhängigkeiten, die nicht automatisch vom SDK erfasst werden, können Sie manuell nachverfolgen, indem Sie dieTrackDependency-API verwenden, die von den standardmäßigen automatischen Erfassungsmodulen verwendet wird.

Beispiel

Wenn Sie Ihren Code mit einer Assembly erstellen, die Sie nicht selbst geschrieben haben, können Sie alle Aufrufe zeitlich festlegen. In diesem Szenario könnten Sie herausfinden, welche Beiträge sie zu Ihren Reaktionszeiten leisten.

Damit diese Daten in den Abhängigkeitsdiagrammen in Application Insights angezeigt werden, senden Sie sie mit 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);
    }

Alternativ stellt TelemetryClient die Erweiterungsmethoden StartOperation and StopOperationbereit, die zum manuellen Verfolgen von Abhängigkeiten verwendet werden können, wie in Verfolgung ausgehender Abhängigkeiten gezeigt.

Wenn Sie das standardmäßige Dependency-Tracking-Modul ausschalten möchten, entfernen Sie den Verweis auf DependencyTrackingTelemetryModule in ApplicationInsights.config für ASP.NET-Anwendungen. Befolgen Sie für ASP.NET Core-Anwendungen die Anweisungen in Application Insights für ASP.NET Core-Anwendungen.

Verfolgen Sie AJAX-Anrufe von Webseiten

Für Webseiten erfasst das Application Insights JavaScript SDK automatisch AJAX-Aufrufe als Abhängigkeiten.

Erweitertes SQL-Tracking, um eine vollständige SQL-Abfrage zu erhalten

Hinweis

Azure Functions erfordert separate Einstellungen, um die SQL-Texterfassung zu aktivieren. Weitere Informationen finden Sie unter Aktivieren der SQL-Abfragesammlung.

Bei SQL-Aufrufen wird immer der Name des Servers und der Datenbank gesammelt und als Name des gesammelten DependencyTelemetry gespeichert. Ein weiteres Feld namens data kann den vollständigen SQL-Abfragetext enthalten.

Für ASP.NET Core-Anwendungen ist es jetzt erforderlich, sich für die SQL-Textsammlung anzumelden, indem Sie Folgendes verwenden:

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

Für ASP.NET-Anwendungen wird der vollständige SQL-Abfragetext mit Hilfe der Bytecode-Instrumentierung erfasst, was die Verwendung des Instrumentierungsmoduls oder die Verwendung des Microsoft.Data.SqlClient-NuGet-Pakets anstelle der System.Data.SqlClient-Bibliothek erfordert. Plattformspezifische Schritte zum Aktivieren der vollständigen SQL-Abfragesammlung werden in der folgenden Tabelle beschrieben.

Plattform Erforderliche Schritte, um eine vollständige SQL-Abfrage zu erhalten
Web-Apps in Azure App Service In der Systemsteuerung Ihrer Web-App öffnen Sie das Application Insights-Bereich, und aktivieren Sie SQL-Befehle unter .NET.
IIS-Server (Azure Virtual Machines, lokal und so weiter) Verwenden Sie entweder das NuGet-Paket Microsoft.Data.SqlClient oder das Application Insights Agent-PowerShell-Modul, um die Instrumentierungs-Engine zu installieren und IIS neu zu starten.
Azure Cloud Services Fügen Sie eine Startaufgabe zum Installieren von StatusMonitor hinzu.
Ihre App sollte zur Erstellungszeit in das ApplicationInsights SDK integriert werden, indem NuGet-Pakete für ASP.NET- oder ASP.NET Core-Anwendungen installiert werden.
IIS Express Verwenden Sie das NuGet-Paket Microsoft.Data.SqlClient.
WebJobs in Azure App Service Verwenden Sie das NuGet-Paket Microsoft.Data.SqlClient.

Zusätzlich zu den vorangegangenen plattformspezifischen Schritten müssen Sie sich auch ausdrücklich für die Aktivierung der SQL-Befehlssammlung anmelden, indem Sie die applicationInsights.config-Datei mit dem folgenden Code ändern:

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

In den vorstehenden Fällen besteht die ordnungsgemäße Methode zum Überprüfen, ob die Instrumentierungs-Engine korrekt installiert ist, darin, zu überprüfen, ob die SDK-Version des erfassten DependencyTelemetryrddp ist. Die Verwendung von rdddsd oder rddf zeigt an, dass Abhängigkeiten über DiagnosticSource oder EventSource-Callbacks gesammelt werden, sodass die vollständige SQL-Abfrage nicht erfasst wird.

Hier finden Sie Abhängigkeitsdaten

  • Anwendungszuordnung visualisiert Abhängigkeiten zwischen Ihrer App und angrenzenden Komponenten.
  • Die Transaktionsdiagnose zeigt einheitliche, korrelierte Serverdaten.
  • Die Registerkarte „Browser“ enthält AJAX-Aufrufe von Browsern Ihrer Benutzer.
  • Wählen Sie langsame oder fehlgeschlagene Aufrufe aus, um ihre Abhängigkeitsaufrufe zu überprüfen.
  • Analyse kann verwendet werden, um Abhängigkeitsdaten abzufragen.

Diagnostizieren langsamer Anforderungen

Jedes Anforderungsereignis bezieht sich auf Abhängigkeitsaufrufe, Ausnahmen und andere Ereignisse, die während der Verarbeitung der Anforderung nachverfolgt werden. Wenn also einige Anforderungen schlecht abschneiden, können Sie herausfinden, ob dies an langsamen Antworten einer Abhängigkeit liegt.

Ablaufverfolgung von Anforderungen bis Abhängigkeiten

Wählen Sie links die Registerkarte Leistung und oben die Registerkarte Abhängigkeiten.

Wählen Sie unter Gesamt einen Abhängigkeitsnamen aus. Nachdem Sie eine Abhängigkeit ausgewählt haben, wird auf der rechten Seite ein Diagramm mit der Verteilung der Dauer dieser Abhängigkeit angezeigt.

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

Wählen Sie unten rechts die Schaltfläche Beispiele. Wählen Sie dann ein Beispiel aus, um die End-to-End-Transaktionsdetails anzuzeigen.

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

Erstellen eines Profils Ihrer Livewebsite

Der Application Insights-Profiler verfolgt HTTP-Aufrufe zu Ihrer Livewebsite zurück und zeigt an, welche Funktionen im Code die meiste Zeit in Anspruch genommen haben.

Anforderungsfehler

Anforderungsfehler können auch fehlgeschlagenen Aufrufen von Abhängigkeiten zugeordnet werden.

Wählen Sie links die Registerkarte Fehler und dann oben die Registerkarte Abhängigkeiten aus.

Screenshot that shows selecting the failed requests chart.

Hier sehen Sie die Anzahl der fehlgeschlagenen Abhängigkeiten. Um weitere Informationen zu einem fehlgeschlagenen Vorkommen zu erhalten, wählen Sie in der unteren Tabelle einen Abhängigkeitsnamen aus. Wählen Sie unten rechts die Schaltfläche Abhängigkeiten aus, um die End-to-End-Transaktionsdetails anzuzeigen.

Protokolle (Analytics)

Sie können Abhängigkeiten in der Abfragesprache Kusto verfolgen. Hier einige Beispiele.

  • Suchen fehlgeschlagener Abhängigkeitsaufrufe:

    
        dependencies | where success != "True" | take 10
    
  • Suchen von AJAX-Aufrufen:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Suchen von mit Anforderungen verbundenen Abhängigkeitsaufrufen:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Suchen von mit Seitenaufrufen verbundenen AJAX-Aufrufen:

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

Häufig gestellte Fragen

Dieser Abschnitt enthält Antworten auf häufig gestellte Fragen.

Wie meldet der automatische Abhängigkeitskollektor fehlgeschlagene Aufrufe an Abhängigkeiten?

Bei fehlgeschlagenen Abhängigkeitsaufrufen wird das success-Feld auf False gesetzt. Das Modul DependencyTrackingTelemetryModule meldet ExceptionTelemetry nicht. Das vollständige Datenmodell für die Abhängigkeit wird unter Application Insights-Telemetriedatenmodell beschrieben.

Wie berechne ich die Erfassungslatenz für meine Abhängigkeitstelemetrie?

Verwenden Sie diesen Code:

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

Wie ermittle ich die Uhrzeit, zu der der Abhängigkeitsaufruf initiiert wurde?

In der Log Analytics-Abfrageansicht stellt timestamp den Moment dar, in dem der TrackDependency()-Aufruf initiiert wurde, was unmittelbar nach dem Empfang der Antwort auf den Abhängigkeitsaufruf erfolgt. Um die Uhrzeit des Beginns des Abhängigkeitsaufrufs zu berechnen, subtrahieren Sie den aufgezeichneten timestamp-Wert des Abhängigkeitsaufrufs von duration.

Umfasst die Abhängigkeitsnachverfolgung in Application Insights Protokollierungsantworttexte?

Die Abhängigkeitsnachverfolgung in Application Insights umfasst keine Protokollierungsantworttexte, da sie für die meisten Anwendungen zu viele Telemetriedaten generieren würde.

Open Source SDK

Wie jedes Application Insights SDK ist auch das Abhängigkeitserfassungsmodul Open Source. Lesen Sie den Code und tragen Sie dazu bei oder melden Sie Probleme im offiziellen GitHub-Repository.

Automatisches Sammeln von Abhängigkeiten

Unten ist die Liste mit den derzeit unterstützten Abhängigkeitsaufrufen angegeben, die automatisch als Abhängigkeiten erkannt werden, ohne dass am Code Ihrer Anwendung zusätzliche Änderungen erforderlich sind. Diese Abhängigkeiten werden in Application Insights in den Ansichten Anwendungsübersicht und Transaktionsdiagnose visualisiert. Falls Ihre Abhängigkeit in der Liste unten nicht angegeben ist, können Sie sie per TrackDependency-Aufruf trotzdem manuell nachverfolgen.

.NET

App-Frameworks Versionen
ASP.NET-Webformulare 4.5 und höher
ASP.NET MVC 4 und höher
ASP.NET WebAPI 4.5 und höher
ASP.NET Core 1.1 und höher
Kommunikationsbibliotheken
HttpClient 4.5 und höher, .NET Core 1.1 und höher
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 – neueste stabile Version. (Siehe Hinweis unten.)
Event Hubs Client SDK 1.1.0
ServiceBus-Client-SDK 7.0.0
Speicherclients
ADO.NET 4.5 und höher

Hinweis

Es gibt ein bekanntes Problem mit älteren Versionen von Microsoft.Data.SqlClient. Es wird empfohlen, Version 1.1.0 oder höher zu verwenden, um dieses Problem zu umgehen. Im Lieferumfang von Entity Framework Core ist nicht unbedingt die neueste stabile Version von Microsoft.Data.SqlClient enthalten. Sie sollten sich deshalb vergewissern, dass mindestens Version 1.1.0 vorhanden ist, damit dieses Problem vermieden wird.

Java

Weitere Informationen finden Sie in der Liste der automatisch gesammelten Abhängigkeiten von Application Insights Java.

Node.js

Eine Liste der neuesten aktuell unterstützten Module wird hier gepflegt.

JavaScript

Kommunikationsbibliotheken Versionen
XMLHttpRequest All

Nächste Schritte