Condividi tramite


Rilevamento della dipendenza in Application Insights

Nota

La documentazione seguente si basa sull'API classica di Application Insights. Il piano a lungo termine per Application Insights prevede la raccolta di dati con OpenTelemetry. Per altre informazioni, vedere Abilitare OpenTelemetry di Monitoraggio di Azure per le applicazioni .NET, Node.js, Python e Java oltre che la Roadmap OpenTelemetry. Le indicazioni sulla migrazione sono disponibili per .NET, Node.js e Python.

Una dipendenza è un componente chiamato dall'applicazione. In genere è un servizio chiamato tramite il protocollo HTTP oppure 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.

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 pacchetto NuGet Microsoft.ApplicationInsights.Web o il pacchetto NuGet Microsoft.ApplicationInsights.AspNetCore.

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 tabelle o Archiviazione code Chiamate effettuate con il client di Archiviazione di Azure.
SDK del client Hub eventi di Azure Usare il pacchetto più recente: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK client del 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. Anche la traccia per le operazioni in modalità diretta con TCP verrà acquisita automaticamente usando il pacchetto di anteprima >= 3.33.0-preview. Per altri dettagli, vedere la documentazione.

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 NuGet Microsoft.ApplicationInsights.DependencyCollector 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 da StatusMonitor o da un'estensione app Web del servizio app di 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 tenerne 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 i dati nei grafici relativi alle dipendenze in Application Insights, inviarli mediante 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 di estensione StartOperation e StopOperation, che possono essere usati per tenere traccia manualmente delle dipendenze, come illustrato in Rilevamento delle dipendenze in uscita.

Per disattivare il modulo standard per il rilevamento delle dipendenze, rimuovere il riferimento a DependencyTrackingTelemetryModule in ApplicationInsights.config per 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, JavaScript SDK per Application Insights 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 applicazioni ASP.NET, 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 di Azure Nel pannello di controllo dell'app Web aprire il riquadro Application Insights e abilitare i comandi SQL in .NET.
Server IIS (Macchine virtuali di Azure, 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 caricata nell’SDK di ApplicationInsights 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 file applicationInsights.config 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 callback DiagnosticSource o EventSource, 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 visualizza le chiamate AJAX dai browser degli utenti.
  • Selezionare dalle 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 alle dipendenze, alle eccezioni e ad altri eventi registrati durante l’elaborazione della richiesta. Se quindi alcune richieste non vengono eseguite correttamente, è possibile capire se il problema è causato dalle 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 che mostra la scheda Dipendenze aperta per selezionare un nome di dipendenza nel grafico.

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

Screenshot che mostra la selezione di un esempio per visualizzare i dettagli delle transazioni end-to-end.

Profilatura del sito live

Il profiler di Application Insights traccia le chiamate HTTP al sito live e mostra le funzioni del codice che richiedono 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 che mostra la selezione del grafico delle richieste non riuscite.

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 campo success 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.

Come si calcola la latenza di inserimento per i dati di telemetria delle dipendenze?

Usare questo codice:

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

Come si determina l'ora di avvio della chiamata di dipendenza?

Nella visualizzazione query di Log Analytics timestamp 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 che segue.)
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

È possibile trovare un elenco dei moduli attualmente supportati più recenti qui.

JavaScript

Librerie di comunicazione Versioni
XMLHttpRequest Tutte le date

Passaggi successivi