Afhankelijkheid bijhouden in Azure-toepassing Insights

Een afhankelijkheid is een onderdeel dat wordt aangeroepen door uw toepassing. Dit is meestal een service die wordt aangeroepen via HTTP, of een database of een bestandssysteem. Application Insights meten de duur van afhankelijkheidsoproepen, ongeacht of deze al dan niet mislukken, samen met aanvullende informatie zoals de naam van de afhankelijkheid, en meer. U kunt specifieke afhankelijkheidsaanvragen onderzoeken en deze correleren met aanvragen en uitzonderingen.

Automatisch bij te houden afhankelijkheden

Application Insights SDK's voor .NET en .NET Core worden geleverd met . Dit is een telemetriemodule die automatisch DependencyTrackingTelemetryModule afhankelijkheden verzamelt. Deze afhankelijkheidsverzameling wordt automatisch ingeschakeld voor ASP.NET en ASP.NET Core-toepassingen, indien geconfigureerd volgens de gekoppelde officiƫle documenten. wordt geleverd als dit NuGet-pakket en wordt automatisch geleverd wanneer u een DependencyTrackingTelemetryModule van de NuGet-pakketten of Microsoft.ApplicationInsights.Web Microsoft.ApplicationInsights.AspNetCore gebruikt.

DependencyTrackingTelemetryModule houdt momenteel de volgende afhankelijkheden automatisch bij:

Afhankelijkheden Details
Http/Https Lokale of externe http-/https-aanroepen
WCF-aanroepen Alleen automatisch bij te houden als http-gebaseerde bindingen worden gebruikt.
SQL Aanroepen gedaan met SqlClient . Zie dit voor het vastleggen van EEN SQL-query.
Azure Storage (Blob, Table, Queue ) Aanroepen gedaan met Azure Storage Client.
EventHub Client SDK Versie 1.1.0 en hoger.
ServiceBus Client SDK Versie 3.0.0 en hoger.
Azure Cosmos DB Alleen automatisch bij te houden als HTTP/HTTPS wordt gebruikt. TCP-modus wordt niet vastgelegd door Application Insights.

Als er een afhankelijkheid ontbreekt of als u een andere SDK gebruikt, moet u ervoor zorgen dat deze in de lijst met automatisch verzamelde afhankelijkheden staat. Als de afhankelijkheid niet automatisch wordt verzameld, kunt u deze nog steeds handmatig bijhouden met een aanroep voor het bijhouden van afhankelijkheden.

Automatisch bijhouden van afhankelijkheden instellen in Console-apps

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

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

Voor .NET Core-console-apps is TelemetryConfiguration.Active verouderd. Raadpleeg de richtlijnen in de documentatie van de werkservice en de documentatie ASP.NET Core Monitoring

Hoe werkt automatische afhankelijkheidsbewaking?

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

  • Het gebruik van bytecode-instrumentatie rond geselecteerde methoden. (InstrumentationEngine vanuit StatusMonitor of Azure Web App Extension)
  • EventSource-callbacks
  • DiagnosticSource-callbacks (in de meest recente .NET/.NET Core SDK's)

Afhankelijkheden handmatig bijhouden

Hier volgen enkele voorbeelden van afhankelijkheden die niet automatisch worden verzameld en daarom handmatig moeten worden bij te houden.

  • Azure Cosmos DB wordt alleen automatisch bij te houden als HTTP/HTTPS wordt gebruikt. TCP-modus wordt niet vastgelegd door Application Insights.
  • Redis

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

Als u bijvoorbeeld uw code bouwt met een assembly die u zelf niet hebt geschreven, kunt u alle aanroepen naar de code timen om erachter te komen welke bijdrage deze levert aan uw reactietijden. Als u deze gegevens wilt weergeven in de afhankelijkheidsgrafieken 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);
    }

Biedt ook extensiemethoden en die kunnen worden gebruikt om handmatig afhankelijkheden bij TelemetryClient StartOperation te StopOperation houden, zoals hier wordt weergegeven

Als u de standaardmodule voor het bijhouden van afhankelijkheden wilt uitschakelen, verwijdert u de verwijzing naar DependencyTrackingTelemetryModule in ApplicationInsights.config voor ASP.NET toepassingen. Voor ASP.NET Core-toepassingen volgt u hier de instructies.

AJAX-aanroepen van webpagina's bijhouden

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

Geavanceerde SQL-tracering voor volledige SQL-query

Notitie

Azure Functions vereist afzonderlijke instellingen om SQL-tekstverzameling in tehost.js in te stellen en "EnableDependencyTracking": true, in "DependencyTrackingOptions": { "enableSqlCommandTextInstrumentation": true } applicationInsights .

Voor SQL-aanroepen wordt de naam van de server en database altijd verzameld en opgeslagen als naam van de verzamelde DependencyTelemetry . Er is een extra veld met de naam 'gegevens', dat de volledige SQL-querytekst kan bevatten.

Voor ASP.NET Core-toepassingen is het nu vereist om u aan te kunnen bij een SQL Text-verzameling met behulp van

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

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

Platform Stap(en) nodig om de volledige SQL-query op te halen
Azure Web App Open in het configuratiescherm van uw web-app de Application Insights en schakel SQL-opdrachten in onder .NET
IIS Server (Azure VM, on-prem, e.d.) Gebruik het Microsoft.Data.SqlClient NuGet-pakket of gebruik de powershell-module Status Monitor om de Instrumentation Engine te installeren en IIS opnieuw op te starten.
Azure Cloud Service Opstarttaak toevoegen om StatusMonitor te installeren
Uw app moet tijdens het bouwen worden onboarding voor ApplicationInsights SDK door NuGet-pakketten te installeren voor ASP.NET of ASP.NET Core-toepassingen
IIS Express Gebruik het NuGet-pakket Microsoft.Data.SqlClient.
Azure-webtaken Gebruik het NuGet-pakket Microsoft.Data.SqlClient.

Naast de bovenstaande platformspecifieke stappen moet u zich ook expliciet inschakelen voor het inschakelen van sql-opdrachtverzameling door het applicationInsights.config te wijzigen met het volgende:

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

In de bovenstaande gevallen is de juiste manier om die instrumentatie-engine te valideren door te valideren dat de verzamelde SDK-versie DependencyTelemetry 'rddp' is. 'rdddsd' of 'rddf' geeft aan dat afhankelijkheden worden verzameld via DiagnosticSource- of EventSource-callbacks, waardoor de volledige SQL-query niet wordt vastgelegd.

Waar vind ik afhankelijkheidsgegevens?

  • Toepassingskaart visualiseert afhankelijkheden tussen uw app en aangrenzende onderdelen.
  • Transaction Diagnostics toont uniforme, gecorreleerde servergegevens.
  • Op het tabblad Browsers worden AJAX-aanroepen van de browsers van uw gebruikers weergegeven.
  • Klik door vanuit trage of mislukte aanvragen om hun afhankelijkheidsaanvragen te controleren.
  • Analyse kan worden gebruikt om afhankelijkheidsgegevens op te vragen.

Trage aanvragen diagnosticeren

Elke aanvraaggebeurtenis is gekoppeld aan de afhankelijkheidsoproepen, uitzonderingen en andere gebeurtenissen die worden bij te houden terwijl uw app de aanvraag verwerkt. Dus als sommige aanvragen het slecht doen, kunt u erachter komen of dit het gevolg is van trage reacties van een afhankelijkheid.

Tracering van aanvragen naar afhankelijkheden

Open het tabblad Prestaties en navigeer naar het tabblad Afhankelijkheden bovenaan naast bewerkingen.

Klik onder algemeen op de naam van een afhankelijkheid. Nadat u een afhankelijkheid hebt geselecteerd, wordt aan de rechterkant een grafiek weergegeven van de verdeling van de duur van die afhankelijkheid.

Klik op het tabblad Prestaties op het tabblad Afhankelijkheid bovenaan en vervolgens op de naam van een afhankelijkheid in de grafiek

Klik op de blauwe knop Voorbeelden rechtsonder en vervolgens op een voorbeeld om de details van de end-to-end-transactie te bekijken.

Klik op een voorbeeld om de details van de end-to-end-transactie te bekijken

Uw live site profileren

Geen idee waar de tijd gaat? De Application Insights traceer http-aanroepen naar uw live site en toont u de functies in uw code die het langst duurden.

Mislukte aanvragen

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

Ga naar het tabblad Fouten aan de linkerkant en klik vervolgens op het tabblad Afhankelijkheden bovenaan.

Klik op de grafiek met mislukte aanvragen

Hier ziet u het aantal mislukte afhankelijkheden. Als u meer informatie wilt over een mislukte gebeurtenis, klikt u op de naam van een afhankelijkheid in de onderste tabel. U kunt rechtsonder op de blauwe knop Afhankelijkheden klikken om de details van de end-to-end-transactie op te halen.

Logboeken (analyse)

U kunt afhankelijkheden bijhouden in de Kusto-querytaal. Hier volgen enkele voorbeelden.

  • Zoek eventuele mislukte afhankelijkheidsoproepen:

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

    dependencies | where client_Type == "Browser" | take 10
  • Afhankelijkheidsoproepen 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

Hoe rapporteert automatische afhankelijkheidsverzamelaar mislukte aanroepen naar afhankelijkheden?

  • Voor mislukte afhankelijkheidsoproepen is het veld Geslaagd ingesteld op Onwaar. DependencyTrackingTelemetryModule rapporteert ExceptionTelemetry niet. Het volledige gegevensmodel voor afhankelijkheid wordt hier beschreven.

Hoe kan ik de opnamelatentie voor mijn afhankelijkheids-telemetrie berekenen?

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

Hoe kan ik bepalen wanneer de afhankelijkheidsoproep is gestart?

In de Log Analytics-queryweergave wordt het moment vertegenwoordigd waarop de aanroep TrackDependency() is gestart. Deze vindt onmiddellijk plaats nadat het antwoord van de afhankelijkheidsoproep timestamp is ontvangen. Als u de tijd wilt berekenen waarop de afhankelijkheidsoproep is gestart, trekt u de vastgelegde afhankelijkheidsoproep af en trekt timestamp duration u deze af.

Opensource-SDK

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

Volgende stappen