Beroendespårning i Application Insights

Kommentar

Följande dokumentation förlitar sig på det klassiska API:et Application Insights. Den långsiktiga planen för Application Insights är att samla in data med OpenTelemetry. Mer information finns i Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.

Ett beroende är en komponent som anropas av ditt program. Det är vanligtvis en tjänst som anropas med hjälp av HTTP, en databas eller ett filsystem. Application Insights mäter varaktigheten för beroendeanrop och om det misslyckas eller inte, tillsammans med information som namnet på beroendet. Du kan undersöka specifika beroendeanrop och korrelera dem med begäranden och undantag.

Automatiskt spårade beroenden

Application Insights SDK:er för .NET och .NET Core levereras med DependencyTrackingTelemetryModule, vilket är en telemetrimodul som automatiskt samlar in beroenden. Den här beroendesamlingen aktiveras automatiskt för ASP.NET och ASP.NET Core-program när den konfigureras enligt de länkade officiella dokumenten. Modulen DependencyTrackingTelemetryModule levereras som NuGet-paketet Microsoft.ApplicationInsights.DependencyCollector . Det hämtas automatiskt när du använder NuGet-paketet Microsoft.ApplicationInsights.Web eller Microsoft.ApplicationInsights.AspNetCore NuGet-paketet.

DependencyTrackingTelemetryModule Spårar för närvarande följande beroenden automatiskt:

Beroenden Details
HTTP/HTTPS Lokala eller fjärranslutna HTTP/HTTPS-anrop.
WCF-anrop Spåras endast automatiskt om HTTP-baserade bindningar används.
SQL Samtal som görs med SqlClient. Se avsnittet Avancerad SQL-spårning för att hämta fullständig SQL-fråga för att samla in SQL-frågor.
Azure Blob Storage, Table Storage eller Queue Storage Anrop som görs med Azure Storage-klienten.
Azure Event Hubs-klient-SDK Använd det senaste paketet: https://nuget.org/packages/Azure.Messaging.EventHubs.
Azure Service Bus-klient-SDK Använd det senaste paketet: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Spåras automatiskt om HTTP/HTTPS används. Spårning för åtgärder i direktläge med TCP registreras också automatiskt med hjälp av förhandsversionspaketet >= 3.33.0-preview. Mer information finns i dokumentationen.

Om du saknar ett beroende eller använder ett annat SDK kontrollerar du att det finns med i listan över automatiskt insamlade beroenden. Om beroendet inte samlas in automatiskt kan du spåra det manuellt med ett spårningsberoendeanrop.

Konfigurera automatisk beroendespårning i konsolappar

Om du vill spåra beroenden automatiskt från .NET-konsolappar installerar du NuGet-paketet Microsoft.ApplicationInsights.DependencyCollector och initierar DependencyTrackingTelemetryModule:

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

För .NET Core-konsolappar TelemetryConfiguration.Active är det föråldrat. Se vägledningen i dokumentationen för Worker-tjänsten och dokumentationen om ASP.NET Core-övervakning.

Hur fungerar automatisk beroendeövervakning?

Beroenden samlas in automatiskt med någon av följande tekniker:

  • Använda bytekodinstrumentation runt utvalda metoder. Använd InstrumentationEngine antingen från StatusMonitor eller ett Azure App Service Web Apps-tillägg.
  • EventSource Callbacks.
  • DiagnosticSource återanrop i de senaste .NET- eller .NET Core SDK:erna.

Spåra beroenden manuellt

Följande exempel på beroenden, som inte samlas in automatiskt, kräver manuell spårning:

  • Azure Cosmos DB spåras endast automatiskt om HTTP/HTTPS används. TCP-läget registreras inte automatiskt av Application Insights för SDK-versioner som är äldre än 2.22.0-Beta1.
  • Redis

För de beroenden som inte samlas in automatiskt av SDK kan du spåra dem manuellt med hjälp av TrackDependency-API:et som används av standardmodulerna för automatisk insamling.

Exempel

Om du skapar din kod med en sammansättning som du inte skrev själv kan du göra alla anrop till den. Med det här scenariot kan du ta reda på vilket bidrag det ger till dina svarstider.

Om du vill att dessa data ska visas i beroendediagrammen i Application Insights skickar du dem med hjälp TrackDependencyav :


    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 Du kan också ange tilläggsmetoderna StartOperation och StopOperation, som kan användas för att manuellt spåra beroenden enligt vad som visas i Spårning av utgående beroenden.

Om du vill stänga av modulen för standardberoendespårning tar du bort referensen till DependencyTrackingTelemetryModule i ApplicationInsights.config för ASP.NET program. För ASP.NET Core-program följer du anvisningarna i Application Insights för ASP.NET Core-program.

Spåra AJAX-anrop från webbsidor

För webbsidor samlar Application Insights JavaScript SDK automatiskt in AJAX-anrop som beroenden.

Avancerad SQL-spårning för att hämta fullständig SQL-fråga

Kommentar

Azure Functions kräver separata inställningar för att aktivera SQL-textsamling. Mer information finns i Aktivera SQL-frågesamling.

För SQL-anrop samlas alltid namnet på servern och databasen in och lagras som namnet på den insamlade DependencyTelemetry. Ett annat fält, som kallas data, kan innehålla den fullständiga SQL-frågetexten.

För ASP.NET Core-program måste du nu välja SQL Text-samling med hjälp av:

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

För ASP.NET program samlas den fullständiga SQL-frågetexten in med hjälp av bytekodinstrumentation, vilket kräver användning av instrumentationsmotorn eller med hjälp av NuGet-paketet Microsoft.Data.SqlClient i stället för biblioteket System.Data.SqlClient. Plattformsspecifika steg för att aktivera fullständig SQL Query-samling beskrivs i följande tabell.

Plattform Steg som krävs för att hämta fullständig SQL-fråga
Web Apps i Azure App Service Öppna fönstret Application Insights i kontrollpanelen för webbappen och aktivera SQL-kommandon under .NET.
IIS Server (Azure Virtual Machines, lokalt och så vidare) Använd antingen Microsoft.Data.SqlClient NuGet-paketet eller använd Application Insights Agent PowerShell-modulen för att installera instrumentationsmotorn och starta om IIS.
Azure Cloud Services Lägg till en startuppgift för att installera StatusMonitor.
Appen bör registreras i ApplicationInsights SDK vid byggtiden genom att installera NuGet-paket för ASP.NET eller ASP.NET Core-program.
IIS Express Använd NuGet-paketet Microsoft.Data.SqlClient.
Webbjobb i Azure App Service Använd NuGet-paketet Microsoft.Data.SqlClient.

Förutom föregående plattformsspecifika steg måste du också uttryckligen välja att aktivera SQL-kommandosamling genom att applicationInsights.config ändra filen med följande kod:

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

I föregående fall är rätt sätt att verifiera att instrumentationsmotorn är korrekt installerad genom att verifiera att SDK-versionen av insamlad DependencyTelemetry är rddp. Användning av rdddsd eller rddf indikerar att beroenden samlas in via DiagnosticSource eller EventSource motringningar, så att den fullständiga SQL-frågan inte registreras.

Var du hittar beroendedata

  • Programkarta visualiserar beroenden mellan din app och närliggande komponenter.
  • Transaktionsdiagnostik visar enhetliga, korrelerade serverdata.
  • Fliken Webbläsare visar AJAX-anrop från användarnas webbläsare.
  • Välj från långsamma eller misslyckade begäranden för att kontrollera deras beroendeanrop.
  • Analys kan användas för att fråga beroendedata.

Diagnostisera långsamma begäranden

Varje begärandehändelse är associerad med beroendeanrop, undantag och andra händelser som spåras när begäran bearbetas. Så om vissa begäranden går dåligt kan du ta reda på om det beror på långsamma svar från ett beroende.

Spåra från begäranden till beroenden

Välj fliken Prestanda till vänster och välj fliken Beroenden längst upp.

Välj ett beroendenamn under Övergripande. När du har valt ett beroende visas ett diagram över beroendets fördelning av varaktigheter till höger.

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

Välj knappen Exempel längst ned till höger. Välj sedan ett exempel för att se transaktionsinformationen från slutpunkt till slutpunkt.

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

Profilera din livewebbplats

Application Insights profiler spårar HTTP-anrop till din livewebbplats och visar funktionerna i koden som tog längst tid.

Misslyckade förfrågningar

Misslyckade begäranden kan också associeras med misslyckade anrop till beroenden.

Välj fliken Fel till vänster och välj sedan fliken Beroenden överst .

Screenshot that shows selecting the failed requests chart.

Här visas antalet misslyckade beroenden. Om du vill få mer information om en misslyckad förekomst väljer du ett beroendenamn i den nedre tabellen. Välj knappen Beroenden längst ned till höger för att se transaktionsinformationen från slutpunkt till slutpunkt.

Loggar (analys)

Du kan spåra beroenden i Kusto-frågespråket. Här följer några exempel.

  • Hitta eventuella misslyckade beroendeanrop:

    
        dependencies | where success != "True" | take 10
    
  • Hitta AJAX-anrop:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Hitta beroendeanrop som är associerade med begäranden:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Hitta AJAX-anrop som är associerade med sidvisningar:

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

Vanliga frågor och svar

Det här avsnittet innehåller svar på vanliga frågor.

Hur gör rapporten för automatisk beroendeinsamlare misslyckade anrop till beroenden?

Misslyckade beroendeanrop har fältet inställt på success False. Modulen DependencyTrackingTelemetryModule rapporterar ExceptionTelemetryinte . Den fullständiga datamodellen för beroende beskrivs i Application Insights telemetridatamodell.

Hur gör jag för att beräkna svarstid för inmatning för min beroendetelemetri?

Använd den här koden:

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

Hur gör jag för att bestämma när beroendeanropet initierades?

I Log Analytics-frågevyn timestamp representerar det ögonblick då TrackDependency()-anropet initierades, som inträffar omedelbart efter att beroendeanropssvaret har tagits emot. Om du vill beräkna den tid då beroendeanropet började skulle du ta timestamp och subtrahera det registrerade duration beroendeanropet.

Omfattar beroendespårning i Application Insights svarsorgan för loggning?

Beroendespårning i Application Insights innehåller inte loggningssvarsorgan eftersom det skulle generera för mycket telemetri för de flesta program.

SDK med öppen källkod

Liksom alla Application Insights SDK är modulen för beroendeinsamling också öppen källkod. Läs och bidra till kod- eller rapportproblemen på den officiella GitHub-lagringsplatsen.

Automatisk insamling för beroenden

Nedan visas listan över beroendeanrop som för närvarande stöds och som automatiskt identifieras som beroenden utan att det krävs någon ytterligare ändring av programmets kod. Dessa beroenden visualiseras i application insights-programkartan och transaktionsdiagnostikvyerna. Om ditt beroende inte finns med i listan nedan kan du fortfarande spåra det manuellt med ett spårningsberoendeanrop.

.NET

Appramverk Versioner
ASP.NET webbformulär 4.5+
ASP.NET MVC 4+
ASP.NET WebAPI 4.5+
ASP.NET Core 1.1+
Kommunikationsbibliotek
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 – senaste stabila versionen. (Se Anmärkning nedan.)
Event Hubs Client SDK 1.1.0
ServiceBus-klient-SDK 7.0.0
Lagringsklienter
ADO.NET 4.5+

Kommentar

Det finns ett känt problem med äldre versioner av Microsoft.Data.SqlClient. Vi rekommenderar att du använder 1.1.0 eller senare för att åtgärda problemet. Entity Framework Core levereras inte nödvändigtvis med den senaste stabila versionen av Microsoft.Data.SqlClient, så vi rekommenderar att du bekräftar att du är på minst 1.1.0 för att undvika det här problemet.

Java

Se listan över Application Insights Javas automatiskt insamlade beroenden.

Node.js

Här finns en lista över de senaste moduler som stöds.

JavaScript

Kommunikationsbibliotek Versioner
XMLHttpRequest Alla

Nästa steg