Afhankelijkheidstracering in Application Insights

Notitie

De volgende documentatie is afhankelijk van de klassieke Application Insights-API. Het langetermijnplan voor Application Insights is het verzamelen van gegevens met behulp van OpenTelemetry. Zie Azure Monitor OpenTelemetry inschakelen voor .NET-, Node.js-, Python- en Java-toepassingen voor meer informatie.

Een afhankelijkheid is een onderdeel dat wordt aangeroepen door uw toepassing. Dit is doorgaans een service die wordt aangeroepen met behulp van HTTP, een database of een bestandssysteem. Application Insights meet de duur van afhankelijkheidsaanroepen en of deze mislukt of niet, samen met informatie zoals de naam van de afhankelijkheid. U kunt specifieke afhankelijkheidsaanroepen onderzoeken en deze correleren met aanvragen en uitzonderingen.

Automatisch bijgehouden afhankelijkheden

Application Insights SDK's voor .NET en .NET Core worden geleverd met DependencyTrackingTelemetryModule, een telemetriemodule waarmee automatisch afhankelijkheden worden verzameld. Deze afhankelijkheidsverzameling wordt automatisch ingeschakeld voor ASP.NET- en ASP.NET Core-toepassingen wanneer deze is geconfigureerd volgens de gekoppelde officiële documenten. De module DependencyTrackingTelemetryModule wordt geleverd als het NuGet-pakket Microsoft.ApplicationInsights.DependencyCollector. Het wordt automatisch meegenomen wanneer u het Microsoft.ApplicationInsights.Web NuGet-pakket of het Microsoft.ApplicationInsights.AspNetCore NuGet-pakket gebruikt.

DependencyTrackingTelemetryModule Op dit moment worden de volgende afhankelijkheden automatisch bijgehouden:

Afhankelijkheden DETAILS
HTTP/HTTPS Lokale of externe HTTP/HTTPS-aanroepen.
WCF-aanroepen Alleen automatisch bijgehouden als HTTP-bindingen worden gebruikt.
SQL Oproepen gemaakt met SqlClient. Zie de sectie Geavanceerde SQL-tracering om een volledige SQL-query op te halen voor het vastleggen van SQL-query's.
Azure Blob Storage, Table Storage of Queue Storage Aanroepen met de Azure Storage-client.
Azure Event Hubs-client-SDK Gebruik het nieuwste pakket: https://nuget.org/packages/Azure.Messaging.EventHubs.
Azure Service Bus-client-SDK Gebruik het nieuwste pakket: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Automatisch bijgehouden als HTTP/HTTPS wordt gebruikt. Tracering voor bewerkingen in de directe modus met TCP wordt ook automatisch vastgelegd met behulp van het preview-pakket >= 3.33.0-preview. Raadpleeg de documentatie voor meer informatie.

Als u een afhankelijkheid mist of een andere SDK gebruikt, controleert u of deze zich in de lijst met automatisch opgehaalde afhankelijkheden voorkomt. Als de afhankelijkheid niet automatisch wordt opgehaald, kunt u deze handmatig bijhouden met een aanroep voor afhankelijkheid bijhouden.

Automatische afhankelijkheidstracering instellen in console-apps

Als u afhankelijkheden van .NET-console-apps automatisch wilt bijhouden, installeert u het NuGet-pakket Microsoft.ApplicationInsights.DependencyCollector en initialiseert u DependencyTrackingTelemetryModule:

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

Voor .NET Core-console-apps TelemetryConfiguration.Active is verouderd. Zie de richtlijnen in de documentatie van de Worker-service en de ASP.NET Core-bewakingsdocumentatie.

Hoe werkt automatische afhankelijkheidsbewaking?

Afhankelijkheden worden automatisch verzameld met behulp van een van de volgende technieken:

  • Bytecode-instrumentatie gebruiken om methoden te selecteren. Gebruik InstrumentationEngine de web-apps-extensie van StatusMonitor Azure-app Service.
  • EventSource Callbacks.
  • DiagnosticSource callbacks in de nieuwste .NET- of .NET Core SDK's.

Afhankelijkheden handmatig bijhouden

Voor de volgende voorbeelden van afhankelijkheden, die niet automatisch worden verzameld, is handmatig bijhouden vereist:

  • Azure Cosmos DB wordt alleen automatisch bijgehouden als HTTP/HTTPS wordt gebruikt. TCP-modus wordt niet automatisch vastgelegd door Application Insights voor SDK-versies die ouder zijn dan 2.22.0-Beta1.
  • Redis

Voor deze afhankelijkheden die niet automatisch door SDK worden verzameld, kunt u ze handmatig bijhouden met behulp van de TrackDependency-API die wordt gebruikt door de standaardmodules voor automatisch verzamelen.

Voorbeeld

Als u uw code bouwt met een assembly die u niet zelf hebt geschreven, kunt u alle aanroepen naar de code tijd geven. In dit scenario kunt u achterhalen welke bijdrage het levert aan uw reactietijden.

Als u wilt dat deze gegevens worden weergegeven in de afhankelijkheidsdiagrammen in Application Insights, verzendt u deze met behulp van 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);
    }

U kunt ook de uitbreidingsmethoden StartOperation gebruiken en StopOperation, die kunnen worden gebruikt om afhankelijkheden handmatig bij te houden, TelemetryClient zoals wordt weergegeven in het bijhouden van uitgaande afhankelijkheden.

Als u de standaardmodule voor het bijhouden van afhankelijkheden wilt uitschakelen, verwijdert u de verwijzing naar DependencyTrackingTelemetryModule applicationInsights.config voor ASP.NET toepassingen. Volg de instructies in Application Insights voor ASP.NET Core-toepassingen voor ASP.NET Core-toepassingen.

AJAX-aanroepen bijhouden vanaf webpagina's

Voor webpagina's verzamelt de JavaScript SDK van Application Insights automatisch AJAX-aanroepen als afhankelijkheden.

Geavanceerde SQL-tracering om een volledige SQL-query op te halen

Notitie

Voor Azure Functions zijn afzonderlijke instellingen vereist om sql-tekstverzameling in te schakelen. Zie Sql-queryverzameling inschakelen voor meer informatie.

Voor SQL-aanroepen wordt de naam van de server en database altijd verzameld en opgeslagen als de naam van de verzamelde DependencyTelemetry. Een ander veld, gegevens genoemd, kan de volledige SQL-querytekst bevatten.

Voor ASP.NET Core-toepassingen moet u zich nu aanmelden voor sql Text-verzameling met behulp van:

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

Voor ASP.NET toepassingen wordt de volledige SQL-querytekst verzameld met behulp van bytecode-instrumentatie. Hiervoor moet u de instrumentatie-engine gebruiken of het NuGet-pakket Microsoft.Data.SqlClient gebruiken in plaats van de System.Data.SqlClient-bibliotheek. Platformspecifieke stappen voor het inschakelen van een volledige SQL-queryverzameling worden beschreven in de volgende tabel.

Platform Stappen die nodig zijn om een volledige SQL-query op te halen
Web Apps in Azure-app Service Open in het configuratiescherm van uw web-app het deelvenster Application Insights en schakel SQL-opdrachten in onder .NET.
IIS-server (virtuele Azure-machines, on-premises, enzovoort) Gebruik het NuGet-pakket Microsoft.Data.SqlClient of gebruik de PowerShell-module van de Application Insights-agent om de instrumentatie-engine te installeren en IIS opnieuw op te starten.
Azure Cloud Services Voeg een opstarttaak toe om StatusMonitor te installeren.
Uw app moet tijdens de build worden toegevoegd aan de ApplicationInsights SDK door NuGet-pakketten te installeren voor ASP.NET of ASP.NET Core-toepassingen.
IIS Express Gebruik het NuGet-pakket Microsoft.Data.SqlClient .
WebJobs in Azure-app Service Gebruik het NuGet-pakket Microsoft.Data.SqlClient .

Naast de voorgaande platformspecifieke stappen moet u zich ook expliciet aanmelden om SQL-opdrachtverzameling in te schakelen door het applicationInsights.config bestand met de volgende code te wijzigen:

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

In de voorgaande gevallen is de juiste manier om te valideren dat de instrumentatie-engine correct is geïnstalleerd door te valideren dat de SDK-versie van de verzamelde DependencyTelemetry versie is rddp. Het gebruik van rdddsd of rddf geeft aan dat afhankelijkheden worden verzameld via DiagnosticSource of EventSource callbacks, zodat de volledige SQL-query niet wordt vastgelegd.

Waar kunt u afhankelijkheidsgegevens vinden

  • Toepassingsoverzicht visualiseert afhankelijkheden tussen uw app en aangrenzende onderdelen.
  • Transactiediagnose toont geïntegreerde, gecorreleerde servergegevens.
  • Het tabblad Browsers toont AJAX-aanroepen vanuit de browsers van uw gebruikers.
  • Selecteer een van trage of mislukte aanvragen om hun afhankelijkheidsaanroepen te controleren.
  • Analyse kan worden gebruikt om query's uit te voeren op afhankelijkheidsgegevens.

Trage aanvragen diagnosticeren

Elke aanvraaggebeurtenis is gekoppeld aan de afhankelijkheidsaanroepen, uitzonderingen en andere gebeurtenissen die worden bijgehouden tijdens het verwerken van de aanvraag. Dus als sommige aanvragen slecht worden uitgevoerd, kunt u erachter komen of dit komt door trage reacties van een afhankelijkheid.

Tracering van aanvragen naar afhankelijkheden

Selecteer het tabblad Prestaties aan de linkerkant en selecteer het tabblad Afhankelijkheden bovenaan.

Selecteer een afhankelijkheidsnaam onder Algemeen. Nadat u een afhankelijkheid hebt geselecteerd, wordt rechts een grafiek weergegeven van de verdeling van de duur van die afhankelijkheid.

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

Selecteer de knop Voorbeelden rechtsonder. Selecteer vervolgens een voorbeeld om de details van de end-to-end transactie te bekijken.

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

Uw livesite profilen

De Application Insights Profiler traceert HTTP-aanroepen naar uw livesite en toont u de functies in uw code die het langst duurde.

Mislukte aanvragen

Mislukte aanvragen kunnen ook worden gekoppeld aan mislukte aanroepen naar afhankelijkheden.

Selecteer het tabblad Fouten aan de linkerkant en selecteer vervolgens het tabblad Afhankelijkheden bovenaan.

Screenshot that shows selecting the failed requests chart.

Hier ziet u het aantal mislukte afhankelijkheiden. Als u meer informatie wilt over een mislukt exemplaar, selecteert u een afhankelijkheidsnaam in de onderste tabel. Selecteer de knop Afhankelijkheden rechtsonder om de details van de end-to-end transactie weer te geven.

Logboeken (analyse)

U kunt afhankelijkheden bijhouden in de Kusto-querytaal. Hieronder vindt u enkele voorbeelden.

  • Zoek eventuele mislukte afhankelijkheidsaanroepen:

    
        dependencies | where success != "True" | take 10
    
  • Ajax-aanroepen zoeken:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Afhankelijkheidsaanroepen zoeken die zijn gekoppeld aan aanvragen:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Ajax-aanroepen zoeken die zijn gekoppeld aan paginaweergaven:

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

Veelgestelde vragen

In deze sectie vindt u antwoorden op veelgestelde vragen.

Hoe kan het rapport automatische afhankelijkheidsverzamelaar geen aanroepen naar afhankelijkheden uitvoeren?

Mislukte afhankelijkheidsaanroepen hebben het success veld ingesteld op False. De module DependencyTrackingTelemetryModule rapporteert ExceptionTelemetryniet. Het volledige gegevensmodel voor afhankelijkheid wordt beschreven in het Application Insights-telemetriegegevensmodel.

Hoe kan ik de opnamelatentie voor mijn afhankelijkheidstelemetrie berekenen?

Gebruik deze code:

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

Hoe kan ik bepalen hoe lang de afhankelijkheidsaanroep is gestart?

In de Log Analytics-queryweergave timestamp vertegenwoordigt u het moment waarop de TrackDependency()-aanroep is gestart, die direct plaatsvindt nadat het antwoord van de afhankelijkheidsaanroep is ontvangen. Als u de tijd wilt berekenen waarop de afhankelijkheidsaanroep is gestart, neemt timestamp u de opgenomen duration afhankelijkheidsaanroep en trekt u deze af.

Bevat het bijhouden van afhankelijkheden in Application Insights logboekregistratie van antwoordteksten?

Het bijhouden van afhankelijkheden in Application Insights bevat geen antwoordteksten voor logboekregistratie, omdat er voor de meeste toepassingen te veel telemetrie zou worden gegenereerd.

Opensource-SDK

Net als elke Application Insights SDK is de module voor het verzamelen van afhankelijkheden ook open source. Lees en bijdragen aan de code of meld problemen in de officiële GitHub-opslagplaats.

Afhankelijkheden automatisch verzamelen

Hieronder ziet u de lijst met momenteel ondersteunde afhankelijkheidsaanroepen die automatisch worden gedetecteerd als afhankelijkheden, zonder dat er extra wijzigingen in de code van uw toepassing nodig zijn. Deze afhankelijkheden worden gevisualiseerd in de applicationoverzicht van Application Insights en diagnostische gegevens over transacties. Als uw afhankelijkheid niet in de onderstaande lijst staat, kunt u deze nog steeds handmatig bijhouden met een aanroep voor afhankelijkheid bijhouden.

.NET

App-frameworks Versies
ASP.NET webformulieren 4.5+
ASP.NET MVC 4+
ASP.NET WebAPI 4.5+
ASP.NET Core 1.1+
Communicatiebibliotheken
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - nieuwste stabiele release. (Zie opmerking hieronder.)
Event Hubs Client SDK 1.1.0
ServiceBus Client SDK 7.0.0
Opslagclients
ADO.NET 4.5+

Notitie

Er is een bekend probleem met oudere versies van Microsoft.Data.SqlClient. U wordt aangeraden 1.1.0 of hoger te gebruiken om dit probleem te verhelpen. Entity Framework Core wordt niet noodzakelijkerwijs geleverd met de nieuwste stabiele release van Microsoft.Data.SqlClient. Daarom raden we u aan te bevestigen dat u ten minste 1.1.0 gebruikt om dit probleem te voorkomen.

Java

Bekijk de lijst met automatisch opgehaalde afhankelijkheden van Application Insights Java.

Node.js

Hier wordt een lijst met de meest recente ondersteunde modules bijgehouden.

JavaScript

Communicatiebibliotheken Versies
XMLHttpRequest Alle

Volgende stappen