Impostare Application Insights: tenere traccia delle dipendenze

Una dipendenza è un componente esterno chiamato dall'app. In genere è un servizio chiamato con il protocollo HTTP, oppure un database o un file system. Application Insights misura per quanto tempo l'applicazione attende le dipendenze e la frequenza con la quale una chiamata alle dipendenze non riesce. È possibile esaminare chiamate specifiche e correlarle a richieste ed eccezioni.

grafici di esempio

Il monitoraggio predefinito delle dipendenze attualmente segnala chiamate ai seguenti tipi di dipendenze:

  • Server
    • Database SQL
    • Servizi Web ASP.NET e WCF che usano i binding basati su HTTP
    • Chiamate HTTP locali o remote
    • Azure Cosmos DB, tabelle, archiviazione BLOB e coda
  • Pagina Web
    • Chiamate AJAX

Il monitoraggio funziona tramite l'uso di strumentazione con codice byte basata su determinati metodo. L'overhead delle prestazioni è minimo.

È anche possibile scrivere chiamate SDK per monitorare altre dipendenze, sia nel codice client che nel codice server, usando l'API TrackDependency.

Configurare il monitoraggio delle dipendenze

Informazioni sulle dipendenze parziali vengono raccolte automaticamente da Application Insights SDK. Per ottenere dati completi, installare l'agente appropriato per il server host.

Piattaforma Installa
Server IIS Installare Status Monitor nel server oppure aggiornare l'applicazione a .NET Framework 4.6 o versione successiva e installare Application Insights SDK nell'app.
App Web di Azure Aprire il pannello Application Insights nel pannello di controllo dell'app Web e scegliere Installa, se richiesto.
Servizio cloud di Azure Usare l'attività di avvio oppure installare .NET Framework 4.6+.

Dove trovare i dati sulle dipendenze

Mappa delle applicazioni

La mappa delle applicazioni funge da strumento visivo per individuare le dipendenze tra i componenti dell'applicazione. Viene generata automaticamente dai dati di telemetria provenienti dall'app. Questo esempio illustra le chiamate AJAX dagli script del browser e le chiamate REST dall'app server a due servizi esterni.

Mappa delle applicazioni

  • Passare dalle caselle alla dipendenza pertinente e ad altri grafici.
  • Aggiungere la mappa al dashboard, dove sarà completamente funzionale.

Altre informazioni

Pannelli Prestazioni ed Errori

Il pannello Prestazioni visualizza la durata delle chiamate alle dipendenze effettuate dall'app server. Sono presenti un grafico di riepilogo e una tabella segmentata per chiamata.

Grafici delle dipendenze nel pannello Prestazioni

Fare clic sui grafici di riepilogo o sugli elementi della tabella per cercare le occorrenze non elaborate di queste chiamate.

Istanze delle chiamate alle dipendenze

I numeri di errori sono visualizzati nel pannello Errori. Un errore è un codice restituito non compreso nell'intervallo 200-399 o sconosciuto.

Nota

Il 100% di errori indica probabilmente che si stanno ricevendo solo dati parziali sulle dipendenze. È necessario configurare il monitoraggio delle dipendenze appropriato per la piattaforma.

Chiamate AJAX

Il pannello Browser visualizza la durata e la frequenza di errori delle chiamate AJAX da JavaScript nelle pagine Web. Sono visualizzate come dipendenze.

Diagnosticare le richieste lente

Ogni evento di richiesta è associato alle chiamate alle dipendenze, alle eccezioni e ad altri eventi registrati mentre l'app elabora la richiesta. Se quindi alcune richieste non vengono eseguite correttamente, è possibile capire se il problema è causato dalle risposte lente da una dipendenza.

Di seguito è illustrato un esempio.

Traccia dalle richieste alle dipendenze

Aprire il pannello Prestazioni ed esaminare la griglia delle richieste:

Elenco di richieste con conteggi e medie

Quella superiore impiega molto tempo. È necessario indagare per scoprire in che modo viene impiegato il tempo.

Fare clic su tale riga per visualizzare gli eventi di richiesta singola:

Elenco di occorrenze di richiesta

Fare clic su un'istanza a esecuzione prolungata per esaminarla meglio e scorrere in basso fino alle chiamate alle dipendenze remote correlate a questa richiesta:

Trovare le chiamate alle dipendenze remote, identificare una durata insolita

Sembra che gran parte del tempo dedicato a questa richiesta sia stato impiegato in una chiamata a un servizio locale.

Selezionare la riga per ottenere altre informazioni:

Fare clic su tale dipendenza remota per identificare il motivo del problema

L'origine del problema è simile a questa. Dopo avere individuato il problema, rimane solo da capire perché la chiamata sta durando così tanto.

Sequenza temporale della richiesta

In un altro caso non ci sono chiamate a dipendenze particolarmente lunghe, ma, passando alla visualizzazione della sequenza temporale, è possibile vedere il punto in cui si è verificato il ritardo nell'elaborazione interna:

Trovare le chiamate alle dipendenze remote, identificare una durata insolita

Dopo la prima chiamata alla dipendenza si verifica una lunga pausa, quindi è opportuno esaminare il codice per capirne il motivo.

Profilatura del sito live

Se non si riesce a capire perché trascorre così tanto tempo, 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. Anche in questo caso è possibile fare clic per risalire al problema.

Fare clic sul grafico delle richieste non riuscite

Fare clic su un'occorrenza di una richiesta non riuscita ed esaminare gli eventi associati.

Fare clic su un tipo di richiesta, fare clic sull'istanza per ottenere una vista diversa della stessa istanza, fare clic su di essa per ottenere informazioni dettagliate sull'eccezione.

Analytics

È possibile tenere traccia delle dipendenze nel linguaggio di query di Log Analytics. 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

Rilevamento personalizzato delle dipendenze

Il modulo standard per il rilevamento delle dipendenze rileva automaticamente le dipendenze esterne, ad esempio database e API REST. È tuttavia possibile che si vogliano gestire allo stesso modo altri componenti.

È possibile scrivere il codice che invia informazioni sulle dipendenze, mediante la stessa API TrackDependency usata dai moduli standard.

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. 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
            {
                success = dependency.Call();
            }
            finally
            {
                timer.Stop();
                telemetry.TrackDependency("myDependency", "myCall", startTime, timer.Elapsed, success);
            }

Per disattivare il modulo standard per il rilevamento delle dipendenze, rimuovere il riferimento a DependencyTrackingTelemetryModule in ApplicationInsights.config.

Risoluzione dei problemi

Il flag di operazione riuscita della dipendenza visualizza sempre true o false.

Query SQL no visualizzate completamente.

  • Eseguire l'aggiornamento alla versione più recente dell'SDK. Se la versione di .NET è precedente alla 4.6:
    • Host IIS: installare l'agente di Application Insights nei server host.
    • App Web di Azure: aprire la scheda Application Insights nel pannello di controllo dell'app Web e installare Application Insights.

Video

Passaggi successivi