Rilevamento delle dipendenze in applicazione Azure InsightsDependency Tracking in Azure Application Insights

Una dipendenza è un componente esterno chiamato dall'app.A dependency is an external component that is called by your app. In genere è un servizio chiamato con il protocollo HTTP, oppure un database o un file system.It's typically a service called using HTTP, or a database, or a file system. Application Insights misura la durata delle chiamate alle dipendenze, indipendentemente dal fatto che si verifichino o meno, insieme a informazioni aggiuntive come il nome della dipendenza e così via.Application Insights measures the duration of dependency calls, whether its failing or not, along with additional information like name of dependency and so on. È possibile analizzare chiamate di dipendenza specifiche e metterle in correlazione a richieste ed eccezioni.You can investigate specific dependency calls, and correlate them to requests and exceptions.

Dipendenze rilevate automaticamenteAutomatically tracked dependencies

Application Insights SDK per .NET e .NET Core viene fornito con DependencyTrackingTelemetryModule che è un modulo di telemetria che raccoglie automaticamente le dipendenze.Application Insights SDKs for .NET and .NET Core ships with DependencyTrackingTelemetryModule which is a Telemetry Module that automatically collects dependencies. Questa raccolta delle dipendenze viene abilitata automaticamente per le applicazioni ASP.NET e ASP.NET Core , se configurata in base alla documentazione ufficiale collegata. DependencyTrackingTelemetryModule viene fornito come questo pacchetto NuGet e viene portato automaticamente quando si usa uno dei pacchetti NuGet Microsoft.ApplicationInsights.Web o Microsoft.ApplicationInsights.AspNetCore.This dependency collection is enabled automatically for ASP.NET and ASP.NET Core applications, when configured as per the linked official docs. DependencyTrackingTelemetryModule is shipped as this NuGet package, and is brought automatically when using either of the NuGet packages Microsoft.ApplicationInsights.Web or Microsoft.ApplicationInsights.AspNetCore.

DependencyTrackingTelemetryModule tiene attualmente traccia automaticamente le dipendenze seguenti:DependencyTrackingTelemetryModule currently tracks the following dependencies automatically:

DipendenzeDependencies DettagliDetails
Http/httpsHttp/Https Chiamate http/https locali o remoteLocal or Remote http/https calls
Chiamate WCFWCF calls Viene rilevata automaticamente solo se vengono utilizzate associazioni basate su http.Only tracked automatically if Http-based bindings are used.
SQLSQL Chiamate effettuate con SqlClient.Calls made with SqlClient. Vedere questo per l' acquisizione della query SQL.See this for capturing SQL query.
Archiviazione di Azure (BLOB, tabelle, code)Azure storage (Blob, Table, Queue ) Chiamate effettuate con il client di archiviazione di Azure.Calls made with Azure Storage Client.
SDK client EventHubEventHub Client SDK Versione 1.1.0 e successive.Version 1.1.0 and above.
SDK Client di ServiceBusServiceBus Client SDK Versione 3.0.0 e successive.Version 3.0.0 and above.
Azure Cosmos DBAzure Cosmos DB Viene rilevata automaticamente solo se si usa HTTP/HTTPS.Only tracked automatically if HTTP/HTTPS is used. La modalità TCP non verrà acquisita da Application Insights.TCP mode won't be captured by Application Insights.

Se manca una dipendenza o se si usa un SDK diverso, assicurarsi che sia presente nell'elenco di dipendenze raccolte automaticamente.If you're missing a dependency, or using a different SDK make sure it's in the list of auto-collected dependencies. Se la dipendenza non viene raccolta automaticamente, è comunque possibile monitorarla manualmente con una chiamata di rilevamento delle dipendenze.If the dependency isn't auto-collected, you can still track it manually with a track dependency call.

Configurare il rilevamento automatico delle dipendenze nelle app consoleSetup automatic dependency tracking in Console Apps

Per tenere traccia automaticamente delle dipendenze dalle app console .NET/.NET Core, installare il pacchetto NuGet Microsoft.ApplicationInsights.DependencyCollector e inizializzare DependencyTrackingTelemetryModule come indicato di seguito:To automatically track dependencies from .NET/.NET Core console apps, install the Nuget package Microsoft.ApplicationInsights.DependencyCollector, and initialize DependencyTrackingTelemetryModule as follows:

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

Funzionamento del monitoraggio delle dipendenze automaticoHow automatic dependency monitoring works?

Le dipendenze vengono raccolte automaticamente utilizzando una delle tecniche seguenti:Dependencies are automatically collected by using one of the following techniques:

  • Uso della strumentazione del codice byte intorno ai metodi Select.Using byte code instrumentation around select methods. (InstrumentationEngine da StatusMonitor o dall'estensione app Web di Azure)(InstrumentationEngine either from StatusMonitor or Azure Web App Extension)
  • Callback EventSourceEventSource callbacks
  • Callback DiagnosticSource (negli SDK più recenti di .NET/.NET Core)DiagnosticSource callbacks (in the latest .NET/.NET Core SDKs)

Rilevamento manuale delle dipendenzeManually tracking dependencies

Di seguito sono riportati alcuni esempi di dipendenze, che non vengono raccolte automaticamente e richiedono quindi il rilevamento manuale.The following are some examples of dependencies, which aren't automatically collected, and hence require manual tracking.

  • viene tenuta automaticamente traccia di Azure Cosmos DB solo se è usato HTTP/HTTPS.Azure Cosmos DB is tracked automatically only if HTTP/HTTPS is used. La modalità TCP non verrà acquisita da Application Insights.TCP mode won't be captured by Application Insights.
  • RedisRedis

Per le dipendenze non raccolte automaticamente da SDK, è possibile tenerne traccia manualmente usando l' API TrackDependency usata dai moduli di raccolta automatica standard.For those dependencies not automatically collected by SDK, you can track them manually using the TrackDependency API that is used by the standard auto collection modules.

Ad esempio, se si compila il codice con un assembly non scritto personalmente, sarà possibile misurare il tempo necessario per tutte le chiamate all'assembly, per individuare il contributo dell'assembly ai tempi di risposta.For example, if you build your code with an assembly that you didn't write yourself, you could time all the calls to it, to find out what contribution it makes to your response times. Per visualizzare i dati nei grafici relativi alle dipendenze in Application Insights, inviarli mediante TrackDependency.To have this data displayed in the dependency charts in Application Insights, send it using 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);
    }

In alternativa, TelemetryClient fornisce metodi di estensione StartOperation e StopOperation che possono essere utilizzati per tenere traccia manualmente delle dipendenze, come illustrato di seguito .Alternatively, TelemetryClient provides extension methods StartOperation and StopOperation which can be used to manually track dependencies, as shown here

Se si vuole disattivare il modulo standard di rilevamento delle dipendenze, rimuovere il riferimento a DependencyTrackingTelemetryModule in ApplicationInsights. config per le applicazioni ASP.NET.If you want to switch off the standard dependency tracking module, remove the reference to DependencyTrackingTelemetryModule in ApplicationInsights.config for ASP.NET applications. Per ASP.NET Core applicazioni, seguire le istruzioni riportate qui.For ASP.NET Core applications, follow instructions here.

Verifica delle chiamate AJAX da pagine WebTracking AJAX calls from Web Pages

Per le pagine Web, Application Insights JavaScript SDK raccoglie automaticamente le chiamate AJAX come dipendenze.For web pages, Application Insights JavaScript SDK automatically collects AJAX calls as dependencies.

Rilevamento SQL avanzato per ottenere una query SQL completaAdvanced SQL tracking to get full SQL Query

Per le chiamate SQL, il nome del server e del database viene sempre raccolto e archiviato come nome della DependencyTelemetry raccolta.For SQL calls, the name of the server and database is always collected and stored as name of the collected DependencyTelemetry. È presente un campo aggiuntivo denominato "data", che può contenere il testo completo della query SQL.There's an additional field called 'data', which can contain the full SQL query text.

Per ASP.NET Core applicazioni, non sono necessari passaggi aggiuntivi per ottenere la query SQL completa.For ASP.NET Core applications, there's no additional step required to get the full SQL Query.

Per le applicazioni ASP.NET, la query SQL completa viene raccolta con l'ausilio della strumentazione del codice byte, che richiede il motore di strumentazione.For ASP.NET applications, full SQL query is collected with the help of byte code instrumentation, which requires instrumentation engine. Sono necessari passaggi aggiuntivi specifici della piattaforma, come descritto di seguito.Additional platform-specific steps, as described below, are required.

PiattaformaPlatform Passaggi necessari per ottenere la query SQL completaStep(s) Needed to get full SQL Query
App Web di AzureAzure Web App Nel pannello di controllo dell'app Web aprire il pannello Application Insights e abilitare i comandi SQL in .NETIn your web app control panel, open the Application Insights blade and enable SQL Commands under .NET
Server IIS (VM di Azure, locale e così via)IIS Server (Azure VM, on-prem, and so on.) Usare il modulo Status Monitor PowerShell per installare il motore di strumentazione e riavviare IIS.Use the Status Monitor PowerShell Module to install the Instrumentation Engine and restart IIS.
Servizio cloud di AzureAzure Cloud Service Aggiungere un' attività di avvio per installare StatusMonitorAdd startup task to install StatusMonitor
L'app deve essere caricata in ApplicationInsights SDK in fase di compilazione installando pacchetti NuGet per applicazioni ASP.NET o ASP.NET CoreYour app should be onboarded to ApplicationInsights SDK at build time by installing NuGet packages for ASP.NET or ASP.NET Core applications
IIS ExpressIIS Express Supporto non disponibileNot supported

Nei casi precedenti, il modo corretto per convalidare il motore di strumentazione è installato correttamente consiste nel convalidare che la versione dell'SDK raccolta DependencyTelemetry è' rddp '.In the above cases, the correct way of validating that instrumentation engine is correctly installed is by validating that the SDK version of collected DependencyTelemetry is 'rddp'. ' rdddsd ' o ' rddf ' indica che le dipendenze vengono raccolte tramite callback DiagnosticSource o EventSource e pertanto la query SQL completa non verrà acquisita.'rdddsd' or 'rddf' indicates dependencies are collected via DiagnosticSource or EventSource callbacks, and hence full SQL query won't be captured.

Dove trovare i dati sulle dipendenzeWhere to find dependency data

  • La mappa delle applicazioni visualizza le dipendenze tra l'app e i componenti adiacenti.Application Map visualizes dependencies between your app and neighboring components.
  • La diagnostica delle transazioni Mostra dati server unificati e correlati.Transaction Diagnostics shows unified, correlated server data.
  • Scheda browser Mostra le chiamate AJAX dai browser degli utenti.Browsers tab shows AJAX calls from your users' browsers.
  • Fare clic sulle richieste lente o non riuscite per controllare le chiamate alle dipendenze.Click through from slow or failed requests to check their dependency calls.
  • L'analisi può essere usata per effettuare una query dei dati sulle dipendenze.Analytics can be used to query dependency data.

Diagnosticare le richieste lenteDiagnose slow requests

Ogni evento di richiesta è associato alle chiamate di dipendenza, alle eccezioni e ad altri eventi che vengono rilevati durante l'elaborazione della richiesta da parte dell'app.Each request event is associated with the dependency calls, exceptions, and other events that are tracked while your app is processing the request. Quindi, se alcune richieste vengono eseguite in modo errato, è possibile verificare se sono dovute a risposte lente da una dipendenza.So if some requests are doing badly, you can find out whether it's because of slow responses from a dependency.

Traccia dalle richieste alle dipendenzeTracing from requests to dependencies

Aprire la scheda prestazioni e passare alla scheda dipendenze nella parte superiore accanto a Operations.Open the Performance tab and navigate to the Dependencies tab at the top next to operations.

Fare clic su un nome di dipendenza in generale.Click on a Dependency Name under overall. Dopo aver selezionato una dipendenza, a destra viene visualizzato un grafico della distribuzione di durata della dipendenza.After you select a dependency a graph of that dependency's distribution of durations will show up on the right.

Nella scheda prestazioni fare clic sulla scheda dipendenza nella parte superiore e quindi su un nome di dipendenza nel grafico

Fare clic sul pulsante esempi blu in basso a destra e quindi su un esempio per visualizzare i dettagli della transazione end-to-end.Click on the blue Samples button on the bottom right and then on a sample to see the end-to-end transaction details.

Fare clic su un esempio per visualizzare i dettagli della transazione end-to-end

Profilatura del sito liveProfile your live site

Se non si riesce a capire perché trascorre così tanto tempo,No idea where the time goes? Il Profiler di Application Insights traccia le chiamate http al sito Live e Mostra le funzioni nel codice che hanno richiesto più tempo.The Application Insights profiler traces HTTP calls to your live site and shows you the functions in your code that took the longest time.

Richieste non riusciteFailed requests

Le richieste non riuscite possono anche essere associate a chiamate non riuscite a dipendenze.Failed requests might also be associated with failed calls to dependencies.

È possibile passare alla scheda errori a sinistra e quindi fare clic sulla scheda dipendenze nella parte superiore.We can go to the Failures tab on the left and then click on the dependencies tab at the top.

Fare clic sul grafico delle richieste non riuscite

Qui sarà possibile visualizzare il numero di dipendenze non riuscite.Here you will be able to see the failed dependency count. Per ottenere ulteriori informazioni su un'occorrenza non riuscita, provare a fare clic su un nome di dipendenza nella tabella inferiore.To get more details about a failed occurrence trying clicking on a dependency name in the bottom table. È possibile fare clic sul pulsante dipendenze blu nella parte inferiore destra per ottenere i dettagli della transazione end-to-end.You can click on the blue Dependencies button at the bottom right to get the end-to-end transaction details.

Log (Analisi)Logs (Analytics)

È possibile tenere traccia delle dipendenze nel linguaggio di query Kusto.You can track dependencies in the Kusto query language. Di seguito sono riportati alcuni esempi.Here are some examples.

  • Trovare eventuali chiamate alle dipendenze non riuscite:Find any failed dependency calls:

    dependencies | where success != "True" | take 10
  • Trovare le chiamate AJAX:Find AJAX calls:

    dependencies | where client_Type == "Browser" | take 10
  • Trovare le chiamate alle dipendenze associate alle richieste:Find dependency calls associated with requests:

    dependencies
    | where timestamp > ago(1d) and  client_Type != "Browser"
    | join (requests | where timestamp > ago(1d))
      on operation_Id  
  • Trovare le chiamate AJAX associate alle visualizzazioni di pagina:Find AJAX calls associated with page views:

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

Domande frequentiFrequently asked questions

In che modo l'agente di raccolta dipendenze automatico segnala le chiamate alle dipendenze?How does automatic dependency collector report failed calls to dependencies?

  • Le chiamate alle dipendenze non riuscite avranno il campo ' success ' impostato su false.Failed dependency calls will have 'success' field set to False. DependencyTrackingTelemetryModule non segnala ExceptionTelemetry.DependencyTrackingTelemetryModule does not report ExceptionTelemetry. Il modello di dati completo per la dipendenza è descritto qui.The full data model for dependency is described here.

SDK open sourceOpen-source SDK

Come ogni Application Insights SDK, anche il modulo di raccolta delle dipendenze è open source.Like every Application Insights SDK, dependency collection module is also open-source. Leggere e contribuire al codice o segnalare problemi nel repository GitHub ufficiale.Read and contribute to the code, or report issues at the official GitHub repo.

Passaggi successiviNext steps