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 en onze OpenTelemetry Roadmap voor meer informatie. Migratierichtlijnen zijn beschikbaar voor .NET, Node.js en Python.
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 vanStatusMonitor
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.
Selecteer de knop Voorbeelden rechtsonder. Selecteer vervolgens een voorbeeld om de details van de end-to-end transactie te bekijken.
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.
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 ExceptionTelemetry
niet. 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
- Uitzonderingen
- Gebruikers- en paginagegevens
- Beschikbaarheid
- Aangepaste afhankelijkheidstracering instellen voor Java.
- Aangepaste afhankelijkheidstracking instellen voor OpenCensus Python.
- Aangepaste afhankelijkheidstelemetrie schrijven
- Zie het gegevensmodel voor Application Insights-typen en -gegevensmodellen.
- Bekijk platforms die worden ondersteund door Application Insights.