Beroendespårning i Application Insights
Varning
Vi rekommenderar Azure Monitor OpenTelemetry Distro för nya program eller kunder för att driva Azure Monitor Application Insights. Azure Monitor OpenTelemetry Distro ger en liknande funktion och upplevelse som Application Insights SDK. Det går att migrera från Application Insights SDK med hjälp av migreringsguiderna för .NET, Node.js och Python, men vi arbetar fortfarande med att lägga till ytterligare några funktioner för bakåtkompatibilitet.
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 de konfigureras enligt de länkade officiella dokumenten. Modulen DependencyTrackingTelemetryModule
levereras som NuGet-paketet Microsoft.ApplicationInsights.DependencyCollector och 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 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ånStatusMonitor
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 TrackDependency
av :
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.
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.
Profilera din livewebbplats
.NET 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.
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 ExceptionTelemetry
inte . 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.
Autokollection 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 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 följande anmärkning.) |
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
- Undantag
- Användar- och siddata
- Tillgänglighet
- Konfigurera anpassad beroendespårning för Java.
- Konfigurera anpassad beroendespårning för OpenCensus Python.
- Skriva anpassad beroendetelemetri
- Se datamodell för Application Insights-typer och datamodeller.
- Kolla in plattformar som stöds av Application Insights.