Rilevamento delle dipendenze in Application Insights

Una dipendenza è un componente chiamato dall'applicazione. In genere si tratta di un servizio chiamato tramite HTTP, un database o un file system. Application Insights misura la durata delle chiamate di dipendenza e se ha esito negativo o meno, insieme a informazioni come il nome della dipendenza. È possibile analizzare chiamate di dipendenza specifiche e correlarle a richieste ed eccezioni.

Nota

La documentazione seguente si basa sull'API classica di Application Insights. Il piano a lungo termine per Application Insights consiste nel raccogliere dati usando OpenTelemetry. Per altre informazioni, vedere Abilitare OpenTelemetry di Monitoraggio di Azure per le applicazioni .NET, Node.js, Python e Java.

Dipendenze rilevate automaticamente

Gli SDK di Application Insights per .NET e .NET Core vengono forniti con DependencyTrackingTelemetryModule, ovvero un modulo di telemetria che raccoglie automaticamente le dipendenze. Questa raccolta di dipendenze viene abilitata automaticamente per le applicazioni ASP.NET e ASP.NET Core quando viene configurata in base alla documentazione ufficiale collegata. Il modulo DependencyTrackingTelemetryModule viene fornito come pacchetto NuGet Microsoft.ApplicationInsights.DependencyCollector . Viene portato automaticamente quando si usa il Microsoft.ApplicationInsights.Web pacchetto NuGet o il Microsoft.ApplicationInsights.AspNetCore pacchetto NuGet.

Attualmente, DependencyTrackingTelemetryModule tiene traccia delle dipendenze seguenti automaticamente:

Dipendenze Dettagli
HTTP/HTTPS Chiamate HTTP/HTTPS locali o remote.
Chiamate WCF Rilevata automaticamente solo se vengono usate associazioni basate su HTTP.
SQL Chiamate effettuate con SqlClient. Vedere la sezione Rilevamento SQL avanzato per ottenere query SQL complete per l'acquisizione di query SQL.
Archiviazione BLOB di Azure, Archiviazione tabella o Archiviazione coda Chiamate effettuate con il client Archiviazione di Azure.
HUB EVENTI DI AZURE SDK client Usare il pacchetto più recente: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK client bus di servizio di Azure Usare il pacchetto più recente: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Rilevato automaticamente se viene usato HTTP/HTTPS. TCP verrà acquisito automaticamente anche usando il pacchetto >di anteprima = 3.33.0-preview.

Se manca una dipendenza o si usa un SDK diverso, assicurarsi che si trovi nell'elenco delle dipendenze con raccolta automatica. Se la dipendenza non viene selezionata automaticamente, è possibile monitorarla manualmente con una chiamata di dipendenza di rilevamento.

Configurare il rilevamento automatico delle dipendenze nelle app console

Per tenere traccia automaticamente delle dipendenze dalle app console .NET, installare il pacchetto Microsoft.ApplicationInsights.DependencyCollector NuGet e inizializzare DependencyTrackingTelemetryModule:

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

Per le app console .NET Core, TelemetryConfiguration.Active è obsoleto. Vedere le linee guida nella documentazione del servizio di lavoro e nella documentazione relativa al monitoraggio di base di ASP.NET.

Come funziona il monitoraggio automatico delle dipendenze?

Le dipendenze vengono raccolte automaticamente usando una delle tecniche seguenti:

  • Uso della strumentazione del codice byte per i metodi selezionati. Usare InstrumentationEngine o un'estensione StatusMonitor App Web del servizio app Azure.
  • EventSource Callback.
  • DiagnosticSource callback negli SDK .NET o .NET Core più recenti.

Rilevamento manuale delle dipendenze

Gli esempi seguenti di dipendenze, che non vengono raccolti automaticamente, richiedono il rilevamento manuale:

  • viene tenuta automaticamente traccia di Azure Cosmos DB solo se è usato HTTP/HTTPS. La modalità TCP non verrà acquisita automaticamente da Application Insights per le versioni dell'SDK precedenti a 2.22.0-Beta1.
  • Redis

Per tali dipendenze non raccolte automaticamente dall'SDK, è possibile tenerle traccia manualmente usando l'API TrackDependency usata dai moduli di raccolta automatica standard.

Esempio

Se si compila il codice con un assembly che non è stato scritto manualmente, è possibile eseguire tutte le chiamate. Questo scenario consente di scoprire quale contributo apporta ai tempi di risposta.

Per visualizzare questi dati nei grafici delle dipendenze in Application Insights, inviarli usando 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 i metodi StartOperation di estensione e StopOperation, che possono essere usati per tenere traccia manualmente delle dipendenze, come illustrato in Rilevamento delle dipendenze in uscita.

Per disattivare il modulo di rilevamento delle dipendenze standard, rimuovere il riferimento a DependencyTrackingTelemetryModule in ApplicationInsights.config per le applicazioni ASP.NET. Per le applicazioni ASP.NET Core, seguire le istruzioni in Application Insights per applicazioni ASP.NET Core.

Tenere traccia delle chiamate AJAX dalle pagine Web

Per le pagine Web, Application Insights JavaScript SDK raccoglie automaticamente le chiamate AJAX come dipendenze.

Rilevamento sql avanzato per ottenere la query SQL completa

Nota

Funzioni di Azure richiede impostazioni separate per abilitare la raccolta di testo SQL. Per altre informazioni, vedere Abilitare la raccolta di query SQL.

Per le chiamate SQL, il nome del server e del database viene sempre raccolto e archiviato come nome dell'oggetto raccolto DependencyTelemetry. Un altro campo, denominato dati, può contenere il testo completo della query SQL.

Per le applicazioni core di ASP.NET, è ora necessario acconsentire esplicitamente alla raccolta di testo SQL usando:

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

Per ASP.NET applicazioni, il testo completo della query SQL viene raccolto con l'aiuto della strumentazione del codice byte, che richiede l'uso del motore di strumentazione o tramite il pacchetto NuGet Microsoft.Data.SqlClient anziché la libreria System.Data.SqlClient. I passaggi specifici della piattaforma per abilitare la raccolta completa di query SQL sono descritti nella tabella seguente.

Piattaforma Passaggi necessari per ottenere la query SQL completa
App Web nel servizio app Azure Nel pannello di controllo dell'app Web aprire il riquadro Application Insights e abilitare i comandi SQL in .NET.
Server IIS (Azure Macchine virtuali, locale e così via) Usare il pacchetto NuGet Microsoft.Data.SqlClient oppure usare il modulo PowerShell dell'agente di Application Insights per installare il motore di strumentazione e riavviare IIS.
Servizi cloud di Azure Aggiungere un'attività di avvio per installare StatusMonitor.
L'app deve essere caricati in ApplicationInsights SDK in fase di compilazione installando pacchetti NuGet per le applicazioni ASP.NET o ASP.NET Core.
IIS Express Usare il pacchetto NuGet Microsoft.Data.SqlClient .
Processi Web nel servizio app di Azure Usare il pacchetto NuGet Microsoft.Data.SqlClient .

Oltre ai passaggi precedenti specifici della piattaforma, è anche necessario acconsentire esplicitamente all'abilitazione della raccolta di comandi SQL modificando il applicationInsights.config file con il codice seguente:

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

Nei casi precedenti, il modo corretto per convalidare che il motore di strumentazione sia installato correttamente è convalidando che la versione SDK di raccolta DependencyTelemetry è rddp. L'uso di rdddsd o rddf indica che le dipendenze vengono raccolte tramite DiagnosticSource o EventSource callback, quindi la query SQL completa non verrà acquisita.

Dove trovare i dati sulle dipendenze

  • La mappa delle applicazioni visualizza le dipendenze tra l'app e i componenti adiacenti.
  • La diagnostica delle transazioni mostra i dati del server correlati unificati.
  • La scheda Browser mostra le chiamate AJAX dai browser degli utenti.
  • Selezionare le richieste lente o non riuscite per controllare le chiamate alle dipendenze.
  • L'analisi può essere usata per effettuare una query dei dati sulle dipendenze.

Diagnosticare le richieste lente

Ogni evento di richiesta è associato alle chiamate di dipendenza, alle eccezioni e ad altri eventi rilevati durante l'elaborazione della richiesta. Pertanto, se alcune richieste stanno facendo male, è possibile scoprire se è a causa di risposte lente da una dipendenza.

Traccia dalle richieste alle dipendenze

Selezionare la scheda Prestazioni a sinistra e selezionare la scheda Dipendenze nella parte superiore.

Selezionare un nome di dipendenza in Generale. Dopo aver selezionato una dipendenza, a destra viene visualizzato un grafico della distribuzione delle durate della dipendenza.

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

Selezionare il pulsante Esempi in basso a destra. Selezionare quindi un esempio per visualizzare i dettagli delle transazioni end-to-end.

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

Profilatura del sito live

Il profiler di Application Insights traccia le chiamate HTTP al sito live e mostra le funzioni nel codice che hanno richiesto più tempo.

Richieste non riuscite

Le richieste non riuscite possono anche essere associate a chiamate non riuscite a dipendenze.

Selezionare la scheda Errori a sinistra e quindi selezionare la scheda Dipendenze nella parte superiore.

Screenshot that shows selecting the failed requests chart.

Qui verrà visualizzato il conteggio delle dipendenze non riuscito. Per ottenere altre informazioni su un'occorrenza non riuscita, selezionare un nome di dipendenza nella tabella inferiore. Selezionare il pulsante Dipendenze in basso a destra per visualizzare i dettagli delle transazioni end-to-end.

Log (Analisi)

È possibile tenere traccia delle dipendenze nel linguaggio di query Kusto. Di seguito sono riportati alcuni esempi.

  • Trovare eventuali chiamate alle dipendenze non riuscite:

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

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Trovare le chiamate alle dipendenze associate alle richieste:

    
        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:

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

Domande frequenti

Questa sezione fornisce le risposte alle domande comuni.

In che modo l'agente di raccolta dipendenze automatico segnala le chiamate alle dipendenze non riuscite?

Le chiamate di dipendenza non riuscite avranno il success campo impostato su False. Il modulo DependencyTrackingTelemetryModule non segnala ExceptionTelemetry. Il modello di dati completo per la dipendenza è descritto nel modello di dati di telemetria di Application Insights.

Ricerca per categorie calcolare la latenza di inserimento per i dati di telemetria delle dipendenze?

Usare questo codice:

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

Ricerca per categorie determinare l'ora di avvio della chiamata di dipendenza?

Nella visualizzazione timestamp query di Log Analytics rappresenta il momento in cui è stata avviata la chiamata TrackDependency(), che si verifica immediatamente dopo la ricezione della risposta alla chiamata di dipendenza. Per calcolare l'ora di inizio della chiamata di dipendenza, è necessario prendere timestamp e sottrarre il record duration della chiamata di dipendenza.

Il rilevamento delle dipendenze in Application Insights include corpi di risposta di registrazione?

Il rilevamento delle dipendenze in Application Insights non include i corpi di risposta di registrazione perché genera troppi dati di telemetria per la maggior parte delle applicazioni.

SDK open source

Analogamente a ogni SDK di Application Insights, il modulo di raccolta delle dipendenze è anche open source. Leggere e contribuire al codice o segnalare i problemi nel repository GitHub ufficiale.

Raccolta automatica delle dipendenze

Di seguito è riportato l'elenco delle chiamate di dipendenza attualmente supportate che vengono rilevate automaticamente come dipendenze senza richiedere alcun'altra modifica al codice dell'applicazione. Queste dipendenze sono visualizzate nelle viste Mappa delle applicazioni e Diagnostica delle transazioni di Application Insights. Se la dipendenza non è presente nell'elenco seguente, è possibile comunque tenerne traccia manualmente con una chiamata di dipendenza per il tracciamento.

.NET

Framework per app Versioni
Web Form ASP.NET 4.5+
ASP.NET MVC 4+
WebAPI ASP.NET 4.5+
ASP.NET Core 1.1+
Librerie di comunicazione
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - Versione stabile più recente. Vedere la nota seguente.
SDK client di Hub eventi 1.1.0
SDK Client di ServiceBus 7.0.0
Client di archiviazione
ADO.NET 4.5+

Nota

Si è verificato un problema noto con le versioni precedenti di Microsoft.Data.SqlClient. Per attenuare questo problema, è consigliabile usare la versione 1.1.0 o successiva. Entity Framework Core non è necessariamente disponibile con la versione stabile più recente di Microsoft.Data.SqlClient, pertanto è consigliabile confermare che si è in 1.1.0 almeno per evitare questo problema.

Java

Vedere l'elenco delle dipendenze autocolletate di Java di Application Insights.

Node.js

Di seguito è riportato un elenco dei moduli attualmente supportati più recenti.

JavaScript

Librerie di comunicazione Versioni
XMLHttpRequest Tutte le date

Passaggi successivi