Rilevamento della dipendenza in Application Insights
Attenzione
È consigliabile distribuire OpenTelemetry di Monitoraggio di Azure per le nuove applicazioni o i clienti per attivare Application Insights per Monitoraggio di Azure. La distribuzione OpenTelemetry di Monitoraggio di Azure offre funzionalità ed esperienza simili come Application Insights SDK. È possibile eseguire la migrazione da Application Insights SDK usando le guide alla migrazione per .NET, Node.js e Python, ma stiamo ancora lavorando per aggiungere altre funzionalità per la compatibilità con le versioni precedenti.
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 configurate in base alla documentazione ufficiale collegata. Il modulo DependencyTrackingTelemetryModule
viene fornito come pacchetto NuGet Microsoft.ApplicationInsights.DependencyCollector e 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 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. La traccia per le operazioni in modalità diretta con TCP viene 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
daStatusMonitor
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, viene visualizzato un grafico della distribuzione delle durate della dipendenza.
Selezionare il pulsante Esempi in basso a destra. Selezionare quindi un esempio per visualizzare i dettagli delle transazioni end-to-end.
Profilatura del sito live
. NET Profiler 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.
Qui viene 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 hanno 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.
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 una quantità eccessiva di 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, è comunque possibile monitorarla manualmente con una chiamata di dipendenza di traccia.
.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
È possibile trovare un elenco dei moduli attualmente supportati più recenti qui.
JavaScript
Librerie di comunicazione | Versioni |
---|---|
XMLHttpRequest | Tutte le date |
Passaggi successivi
- Eccezioni
- Dati utente e pagina
- Disponibilità
- Impostare il rilevamento personalizzato delle dipendenze per Java.
- Impostare il rilevamento personalizzato delle dipendenze per OpenCensus Python.
- Scrivere dati di telemetria delle dipendenze personalizzate
- Per informazioni sul modello di dati e sui tipi di Application Insights, vedere il modello di dati.
- Verificare quali piattaforme supportano Application Insights.