Impostare Application Insights: tenere traccia delle dipendenzeSet up Application Insights: Dependency tracking

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 per quanto tempo l'applicazione attende le dipendenze e la frequenza con la quale una chiamata alle dipendenze non riesce.Application Insights measures how long your application waits for dependencies and how often a dependency call fails. È possibile esaminare chiamate specifiche e correlarle a richieste ed eccezioni.You can investigate specific calls, and relate them to requests and exceptions.

grafici di esempio

Il monitoraggio predefinito delle dipendenze attualmente segnala chiamate ai seguenti tipi di dipendenze:The out-of-the-box dependency monitor currently reports calls to these types of dependencies:

  • ServerServer
    • Database SQLSQL databases
    • Servizi Web ASP.NET e WCF che usano i binding basati su HTTPASP.NET web and WCF services that use HTTP-based bindings
    • Chiamate HTTP locali o remoteLocal or remote HTTP calls
    • Azure Cosmos DB, tabelle, archiviazione BLOB e codaAzure Cosmos DB, table, blob storage, and queue
  • Pagina WebWeb pages
    • Chiamate AJAXAJAX calls

Il monitoraggio funziona tramite l'uso di strumentazione con codice byte basata su determinati metodo.Monitoring works by using byte code instrumentation around selected methods. L'overhead delle prestazioni è minimo.Performance overhead is minimal.

È anche possibile scrivere chiamate SDK per monitorare altre dipendenze, sia nel codice client che nel codice server, usando l'API TrackDependency.You can also write your own SDK calls to monitor other dependencies, both in the client and server code, using the TrackDependency API.

Configurare il monitoraggio delle dipendenzeSet up dependency monitoring

Informazioni sulle dipendenze parziali vengono raccolte automaticamente da Application Insights SDK.Partial dependency information is collected automatically by the Application Insights SDK. Per ottenere dati completi, installare l'agente appropriato per il server host.To get complete data, install the appropriate agent for the host server.

PiattaformaPlatform InstallaInstall
Server IISIIS Server Installare Status Monitor nel server oppure aggiornare l'applicazione a .NET Framework 4.6 o versione successiva e installare Application Insights SDK nell'app.Either install Status Monitor on your server or Upgrade your application to .NET framework 4.6 or later and install the Application Insights SDK in your app.
App Web di AzureAzure Web App Aprire il pannello Application Insights nel pannello di controllo dell'app Web e scegliere Installa, se richiesto.In your web app control panel, open the Application Insights blade in your web app control panel and choose Install if prompted.
Servizio cloud di AzureAzure Cloud Service Usare l'attività di avvio oppure installare .NET Framework 4.6+.Use startup task or Install .NET framework 4.6+

Dove trovare i dati sulle dipendenzeWhere to find dependency data

Mappa delle applicazioniApplication Map

La mappa delle applicazioni funge da strumento visivo per individuare le dipendenze tra i componenti dell'applicazione.Application Map acts as a visual aid to discovering dependencies between the components of your application. Viene generata automaticamente dai dati di telemetria provenienti dall'app.It is automatically generated from the telemetry from your app. Questo esempio illustra le chiamate AJAX dagli script del browser e le chiamate REST dall'app server a due servizi esterni.This example shows AJAX calls from the browser scripts and REST calls from the server app to two external services.

Mappa delle applicazioni

  • Passare dalle caselle alla dipendenza pertinente e ad altri grafici.Navigate from the boxes to relevant dependency and other charts.
  • Aggiungere la mappa al dashboard, dove sarà completamente funzionale.Pin the map to the dashboard, where it will be fully functional.

Altre informazioniLearn more.

Pannelli Prestazioni ed ErroriPerformance and failure blades

Il pannello Prestazioni visualizza la durata delle chiamate alle dipendenze effettuate dall'app server.The performance blade shows the duration of dependency calls made by the server app. Sono presenti un grafico di riepilogo e una tabella segmentata per chiamata.There's a summary chart and a table segmented by call.

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.Click through the summary charts or the table items to search raw occurrences of these calls.

Istanze delle chiamate alle dipendenze

I numeri di errori sono visualizzati nel pannello Errori.Failure counts are shown on the Failures blade. Un errore è un codice restituito non compreso nell'intervallo 200-399 o sconosciuto.A failure is any return code that is not in the range 200-399, or unknown.

Nota

Il 100% di errori100% failures? indica probabilmente che si stanno ricevendo solo dati parziali sulle dipendenze.- This probably indicates that you are only getting partial dependency data. È necessario configurare il monitoraggio delle dipendenze appropriato per la piattaforma.You need to set up dependency monitoring appropriate to your platform.

Chiamate AJAXAJAX Calls

Il pannello Browser visualizza la durata e la frequenza di errori delle chiamate AJAX da JavaScript nelle pagine Web.The Browsers blade shows the duration and failure rate of AJAX calls from JavaScript in your web pages. Sono visualizzate come dipendenze.They are shown as Dependencies.

Diagnosticare le richieste lenteDiagnose slow requests

Ogni evento di richiesta è associato alle chiamate alle dipendenze, alle eccezioni e ad altri eventi registrati mentre l'app elabora la richiesta.Each request event is associated with the dependency calls, exceptions and other events that are tracked while your app is processing the request. Se quindi alcune richieste non vengono eseguite correttamente, è possibile capire se il problema è causato dalle risposte lente da una dipendenza.So if some requests are performing badly, you can find out whether it's due to slow responses from a dependency.

Di seguito è illustrato un esempio.Let's walk through an example of that.

Traccia dalle richieste alle dipendenzeTracing from requests to dependencies

Aprire il pannello Prestazioni ed esaminare la griglia delle richieste:Open the Performance blade, and look at the grid of requests:

Elenco di richieste con conteggi e medie

Quella superiore impiega molto tempo.The top one is taking very long. È necessario indagare per scoprire in che modo viene impiegato il tempo.Let's see if we can find out where the time is spent.

Fare clic su tale riga per visualizzare gli eventi di richiesta singola:Click that row to see individual request events:

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:Click any long-running instance to inspect it further, and scroll down to the remote dependency calls related to this request:

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.It looks like most of the time servicing this request was spent in a call to a local service.

Selezionare la riga per ottenere altre informazioni:Select that row to get more information:

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

L'origine del problema è simile a questa.Looks like this is where the problem is. Dopo avere individuato il problema, rimane solo da capire perché la chiamata sta durando così tanto.We've pinpointed the problem, so now we just need to find out why that call is taking so long.

Sequenza temporale della richiestaRequest timeline

In un altro caso non ci sono chiamate a dipendenze particolarmente lunghe,In a different case, there is no dependency call that is particularly long. ma, passando alla visualizzazione della sequenza temporale, è possibile vedere il punto in cui si è verificato il ritardo nell'elaborazione interna:But by switching to the timeline view, we can see where the delay occurred in our internal processing:

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.There seems to be a big gap after the first dependency call, so we should look at our code to see why that is.

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 del codice che richiedono più tempo.The Application Insights profiler traces HTTP calls to your live site and shows you which functions in your code 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. Anche in questo caso è possibile fare clic per risalire al problema.Again, we can click through to track down the problem.

Fare clic sul grafico delle richieste non riuscite

Fare clic su un'occorrenza di una richiesta non riuscita ed esaminare gli eventi associati.Click through to an occurrence of a failed request, and look at its associated events.

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.

AnalyticsAnalytics

È possibile tenere traccia delle dipendenze nel linguaggio di query di Log Analytics.You can track dependencies in the Log Analytics 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

Rilevamento personalizzato delle dipendenzeCustom dependency tracking

Il modulo standard per il rilevamento delle dipendenze rileva automaticamente le dipendenze esterne, ad esempio database e API REST.The standard dependency-tracking module automatically discovers external dependencies such as databases and REST APIs. È tuttavia possibile che si vogliano gestire allo stesso modo altri componenti.But you might want some additional components to be treated in the same way.

È possibile scrivere il codice che invia informazioni sulle dipendenze, mediante la stessa API TrackDependency usata dai moduli standard.You can write code that sends dependency information, using the same TrackDependency API that is used by the standard 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
            {
                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.If you want to switch off the standard dependency tracking module, remove the reference to DependencyTrackingTelemetryModule in ApplicationInsights.config.

Risoluzione dei problemiTroubleshooting

Il flag di operazione riuscita della dipendenza visualizza sempre true o false.Dependency success flag always shows either true or false.

Query SQL no visualizzate completamente.SQL query not shown in full.

  • Eseguire l'aggiornamento alla versione più recente dell'SDK.Upgrade to the latest version of the SDK. Se la versione di .NET è precedente alla 4.6:If your .NET version is less than 4.6:
    • Host IIS: installare l'agente di Application Insights nei server host.IIS host: Install Application Insights Agent on the host servers.
    • App Web di Azure: aprire la scheda Application Insights nel pannello di controllo dell'app Web e installare Application Insights.Azure web app: Open Application Insights tab in the web app control panel, and install Application Insights.

VideoVideo

Passaggi successiviNext steps