Application Insights per i servizi cloud di Azure
Application Insights può monitorare le app del servizio cloud di Microsoft Azure in termini di disponibilità, prestazioni, errori e utilizzo combinando i dati degli SDK di Application Insights con i dati di Diagnostica di Azure provenienti dai servizi cloud. Con il feedback ottenuto sulle prestazioni e sull'efficacia dell'app in circostanze normali, è possibile prendere decisioni informate sulla direzione della progettazione in ogni ciclo di vita di sviluppo.
Nota
Il 31 marzo 2025, il supporto per l'inserimento delle chiavi di strumentazione terminerà. L'inserimento delle chiavi di strumentazione continuerà a funzionare, ma non saranno più garantiti aggiornamenti o supporto per la funzionalità. Eseguire la transizione alle stringhe di connessione per sfruttare le nuove funzionalità.
Prerequisiti
Prima di iniziare, è necessario disporre di quanto segue:
-
Accedere con l'account Microsoft per Windows, Xbox Live o altri servizi cloud Microsoft.
Strumenti di Microsoft Azure 2.9 o versione successiva.
Developer Analytics Tools 7.10 o versione successiva.
Operatività immediata
Il modo più rapido e semplice per monitorare il servizio cloud con Application Insights è scegliere questa opzione quando si pubblica il servizio in Azure.
Questa opzione instrumenta l'app in fase di esecuzione, fornendo tutti i dati di telemetria necessari per monitorare richieste, eccezioni e dipendenze nel ruolo Web. Monitora inoltre i contatori delle prestazioni dai ruoli di lavoro. Eventuali tracce diagnostiche generate dall'app verranno inviate anche ad Application Insights.
Se non si hanno altre esigenze, non è necessario eseguire altre operazioni.
I passaggi successivi visualizzano le metriche dall'app ed eseguono query sui dati con Analytics.
Per monitorare le prestazioni nel browser, potrebbe essere necessario configurare test di disponibilità e aggiungere codice alle pagine Web.
Le sezioni successive illustrano le opzioni aggiuntive seguenti:
- Inviare dati da componenti diversi e creare configurazioni per separare le risorse.
- Aggiungere dati di telemetria personalizzati dall'app.
App di esempio instrumentata con Application Insights
In questa app di esempio Application Insights viene aggiunto a un servizio cloud con due ruoli di lavoro ospitati in Azure.
Nella sezione successiva viene illustrato come adattare nello stesso modo il proprio progetto di servizio cloud.
Pianificare le risorse e i gruppi di risorse
I dati di telemetria provenienti dall'app vengono archiviati, analizzati e visualizzati in una risorsa di Azure di tipo Application Insights.
Ogni risorsa appartiene a un gruppo di risorse. I gruppi di risorse vengono usati per gestire i costi, concedere l'accesso ai membri di un team e distribuire gli aggiornamenti in una singola transazione coordinata. Ad esempio, è possibile creare uno script per distribuire un servizio cloud di Azure e le risorse per il monitoraggio con Application Insights in un'unica operazione.
Risorse per i componenti
È consigliabile aggiungere una proprietà della dimensione a ogni elemento di telemetria che ne identifica il ruolo di origine. In questo approccio i grafici delle metriche, ad esempio le eccezioni, visualizzano in genere un'aggregazione dei conteggi dei diversi ruoli ma, in base alle esigenze, è possibile segmentare il grafico in base all'identificatore di ruolo. Le ricerche possono essere filtrate anche in base alla stessa dimensione. Questa alternativa può rendere un po' più semplice visualizzare tutti gli elementi insieme, ma può anche creare confusione tra i ruoli.
I dati di telemetria del browser in genere vengono inclusi nella stessa risorsa come ruolo Web lato server.
Inserire le risorse di Application Insights per i diversi componenti in un unico gruppo di risorse. Questo approccio consente di gestirli facilmente insieme.
Separare sviluppo, test e produzione
Se si sviluppano eventi personalizzati per la funzionalità successiva mentre è live la versione precedente, è opportuno inviare i dati di telemetria dello sviluppo a una risorsa di Application Insights separata. In caso contrario potrebbe essere difficile trovare i dati di telemetria di test in mezzo a tutto il traffico del sito live.
Per evitare questa situazione, creare risorse separate per ogni configurazione della build o "timbro" (sviluppo, test, produzione e così via) del sistema. Inserire le risorse per ogni configurazione della build in un gruppo di risorse separato.
Per inviare i dati di telemetria alle risorse appropriate, è possibile configurare Application Insights SDK in modo che selezioni una chiave di strumentazione diversa a seconda della configurazione della build.
Informazioni su come impostare dinamicamente la chiave di strumentazione per diverse fasi.
Creare una risorsa di Application Insights per ogni ruolo
Se si è deciso di creare una risorsa separata per ogni ruolo, ed eventualmente un set separato per ogni configurazione della build, il modo più semplice è crearle tutte insieme nel portale di Application Insights. Se si creano molte risorse, è possibile automatizzare il processo.
Nel portale di Azure selezionare Nuovo>Servizi per gli sviluppatori>Application Insights.
Nell'elenco a discesa Tipo di applicazione selezionare Applicazione Web ASP.NET.
Ogni risorsa viene identificata da una chiave di strumentazione che potrebbe essere necessaria in seguito per configurare manualmente o verificare la configurazione dell'SDK.
Configurare Diagnostica di Azure per ogni ruolo
Impostare questa opzione per monitorare l'app con Application Insights. Per i ruoli Web, questa opzione offre monitoraggio delle prestazioni, avvisi, diagnostica e analisi dell'utilizzo. Per gli altri ruoli, è possibile cercare e monitorare i dati di Diagnostica di Azure, ad esempio riavvio, contatori delle prestazioni e chiamate a System.Diagnostics.Trace.
In Visual Studio Esplora soluzioni, in <Ruoli di ServizioCloud>>aprire le proprietà di ogni ruolo.
In Configurazione selezionare la casella di controllo Invia i dati di diagnostica ad Application Insights e selezionare la risorsa di Application Insights creata in precedenza.
Se si è deciso di usare una risorsa di Application Insights separata per ogni configurazione della build, selezionare prima la configurazione.
Ciò ha effetto dell'inserimento delle chiavi di strumentazione di Application Insights nei file denominati ServiceConfiguration.*.cscfg. Di seguito è riportato il codice di esempio.
Per variare il livello delle informazioni diagnostiche inviate ad Application Insights, modificare direttamente i file CSCFG.
Installare l'SDK in ogni progetto
Con questa opzione è possibile aggiungere dati di telemetria business personalizzati a qualsiasi ruolo. L'opzione fornisce un'analisi più accurata dell'utilizzo e delle prestazioni dell'app.
In Visual Studio configurare Application Insights SDK per ogni progetto di app cloud.
Per configurare i ruoli Web, fare clic con il pulsante destro del mouse sul progetto e quindi scegliere Configura Application Insights o Aggiungi > dati di telemetria di Application Insights.
Per configurare i ruoli di lavoro:
a. Fare clic con il pulsante destro del mouse sul progetto e selezionare Gestisci pacchetti NuGet.
b. Aggiungere Application Insights per server Windows.
Per configurare l'SDK per inviare i dati alla risorsa di Application Insights:
a. In una funzione di avvio appropriata impostare la chiave di strumentazione dall'impostazione di configurazione nel file CSCFG:
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault(); configuration.InstrumentationKey = RoleEnvironment.GetConfigurationSettingValue("APPINSIGHTS_INSTRUMENTATIONKEY"); var telemetryClient = new TelemetryClient(configuration);
b. Ripetere il "passaggio a" per ogni ruolo nell'app. Vedere gli esempi:
Impostare il file ApplicationInsights.config da copiare sempre nella directory di output.
Un messaggio nel file CONFIG chiede di inserire la chiave di strumentazione. Tuttavia, per le app cloud è preferibile che venga impostata dal file CSCFG. Questo approccio assicura che il ruolo venga identificato correttamente nel portale.
Configurare Status Monitor per raccogliere query SQL complete (facoltativo)
Questo passaggio è necessario solo se si vogliono acquisire query SQL complete in .NET Framework.
Nel
\*.csdef
file Aggiungi attività di avvio per ogni ruolo simile a<Startup> <Task commandLine="AppInsightsAgent\InstallAgent.bat" executionContext="elevated" taskType="simple"> <Environment> <Variable name="ApplicationInsightsAgent.DownloadLink" value="http://go.microsoft.com/fwlink/?LinkID=522371" /> <Variable name="RoleEnvironment.IsEmulated"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> </Environment> </Task> </Startup>
Scaricare InstallAgent.bat e InstallAgent.ps1, inserirli nella
AppInsightsAgent
cartella in ogni progetto di ruolo. Assicurarsi di copiarli nella directory di output tramite le proprietà del file di Visual Studio o gli script di compilazione.In tutti i ruoli di lavoro aggiungere variabili di ambiente:
<Environment> <Variable name="COR_ENABLE_PROFILING" value="1" /> <Variable name="COR_PROFILER" value="{324F817A-7420-4E6D-B3C1-143FBED6D855}" /> <Variable name="MicrosoftInstrumentationEngine_Host" value="{CA487940-57D2-10BF-11B2-A3AD5A13CBC0}" /> </Environment>
Eseguire e pubblicare l'app
Eseguire l'app e accedere ad Azure.
Aprire le risorse di Application Insights create.
Verranno visualizzati i singoli punti dati in Cerca e i dati aggregati in Esplora metriche.
Aggiungere altri dati di telemetria (vedere le sezioni successive) e quindi pubblicare l'app per ottenere commenti e suggerimenti in diretta sull'utilizzo e la diagnostica.
Se non sono presenti dati, eseguire le operazioni seguenti:
- Aprire il riquadro Ricerca per visualizzare i singoli eventi.
- Aprire pagine diverse nell'app in modo da generare alcuni dati di telemetria.
- Attendere alcuni secondi e fare clic su Aggiorna.
Visualizzare gli eventi di Diagnostica di Azure
Le informazioni di Diagnostica di Azure sono disponibili in Application Insights nelle posizioni seguenti:
- I contatori delle prestazioni vengono visualizzati come metriche personalizzate.
- I log eventi di Windows vengono visualizzati come tracce ed eventi personalizzati.
- I log applicazioni, i log ETW e gli eventuali log dell'infrastruttura di diagnostica vengono visualizzati come tracce.
Per visualizzare i contatori delle prestazioni e i conteggi degli eventi, aprire Esplora metriche e aggiungere il grafico seguente:
Per eseguire ricerche nei vari log di traccia inviati da Diagnostica di Azure, usare la Ricerca o una Query Analytics. Supponendo, ad esempio, di avere un'eccezione non gestita che ha causato l'arresto e il riciclo di un ruolo, questa informazione verrebbe visualizzata nel canale Applicazione del registro eventi di Windows. È possibile usare la funzionalità di ricerca per visualizzare l'errore del registro eventi di Windows e ottenere l'analisi dello stack completa per l'eccezione. In questo modo sarà possibile trovare la causa radice del problema.
Altri dati di telemetria
Le sezioni successive illustrano come ottenere altri dati di telemetria da aspetti diversi dell'app.
Tenere traccia delle richieste dai ruoli di lavoro
Nei ruoli Web il modulo delle richieste raccoglie automaticamente i dati sulle richieste HTTP. Per alcuni esempi di come è possibile eseguire l'override del comportamento di raccolta predefinito, vedere il progetto MVCWebRole di esempio.
È possibile acquisire le prestazioni delle chiamate ai ruoli di lavoro tenendone traccia nello stesso modo in cui avviene per le richieste HTTP. In Application Insights il tipo di telemetria per le richieste misura un'unità di lavoro lato server denominata che può essere programmata e può avere indipendentemente esito positivo o negativo. Sebbene le richieste HTTP vengano acquisite automaticamente dall'SDK, è possibile inserire il proprio codice per tenere traccia delle richieste ai ruoli di lavoro.
Vedere i due ruoli di lavoro di esempio instrumentati per segnalare le richieste:
Eccezioni
Per informazioni su come raccogliere le eccezioni non gestite da diversi tipi di app Web, vedere Monitoraggio delle eccezioni in Application Insights.
Il ruolo Web di esempio contiene i controller MVC5 e Web API 2. Le eccezioni non gestite da questi due controller vengono acquisite con i gestori di eventi seguenti:
- AiHandleErrorAttribute impostato per i controller MVC5 come illustrato in questo esempio
- AiWebApiExceptionLogger impostato per i controller Web API 2 come illustrato in questo esempio
Per i ruoli di lavoro esistono due modi per tenere traccia delle eccezioni:
- Usare TrackException(ex).
- Se è stato aggiunto il pacchetto NuGet del listener di traccia di Application Insights, è possibile usare System.Diagnostics.Trace per registrare le eccezioni come illustrato in questo esempio.
Contatori delle prestazioni
Per impostazione predefinita, vengono raccolti i contatori seguenti:
- \Process(??APP_WIN32_PROC??)% Processor Time
- \Memory\Available Bytes
- .NET CLR Exceptions(??APP_CLR_PROC??)# of Exceps Thrown / sec
- \Process(??APP_WIN32_PROC??)\Private Bytes
- \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
- \Processor(_Total)% Processor Time
Per i ruoli Web vengono raccolti anche i contatori seguenti:
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests/Sec
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Request Execution Time
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests In Application Queue
È possibile specificare altri contatori delle prestazioni personalizzati o di Windows modificando ApplicationInsights.config, come illustrato in questo esempio.
Telemetria correlata per i ruoli di lavoro
Grazie agli strumenti di diagnostica avanzati è possibile individuare la causa di una richiesta non riuscita o con latenza elevata. Con i ruoli Web, l'SDK configura automaticamente una correlazione tra i dati di telemetria correlati.
Per ottenere questa visualizzazione con i ruoli di lavoro, è possibile usare un inizializzatore di telemetria personalizzato per impostare un attributo di contesto Operation.Id comune per tutti i dati di telemetria. In questo modo sarà possibile visualizzare immediatamente se il problema di errore o latenza è stato causato da una dipendenza o dal codice.
Ecco come fare:
- Impostare l'ID correlazione in un oggetto CallContext come illustrato in questo esempio. In questo caso, viene usato l'ID richiesta come ID di correlazione.
- Aggiungere un'implementazione personalizzata di TelemetryInitializer per impostare l'oggetto Operation.Id sull'oggetto correlationId impostato in precedenza. Per un esempio, vedere ItemCorrelationTelemetryInitializer.
- Aggiungere l'inizializzatore di telemetria personalizzato. È possibile eseguire questa operazione nel file ApplicationInsights.config o nel codice come illustrato in questo esempio.
Telemetria client
Per ottenere dati di telemetria basati su browser, quali conteggi delle visualizzazioni delle pagine, tempi di caricamento delle pagine ed eccezioni di script, e per scrivere i dati di telemetria negli script delle pagine, vedere Aggiungere l'SDK per JavaScript alle pagine Web.
Test della disponibilità
Per assicurarsi che l'applicazione sia disponibile e reattiva, Configurare i test Web.
Visualizzare tutti gli elementi contemporaneamente
Per una panoramica del sistema, è possibile riunire i grafici di monitoraggio principali in un unico dashboard. Ad esempio, è possibile aggiungere i conteggi delle richieste e degli errori di ogni ruolo.
Se il sistema usa altri servizi di Azure, ad esempio Analisi di flusso, includere anche i relativi grafici di monitoraggio.
Se si dispone di un'app client per dispositivi mobili, usare App Center. Creare query in Analytics per visualizzare i conteggi degli eventi e aggiungerli al dashboard.
Esempio
L'esempio monitora un servizio che ha un ruolo Web e due ruoli di lavoro.
Eccezione "metodo non trovato" durante l'esecuzione dei servizi cloud di Azure
È stata compilata per .NET LTS? Le versioni precedenti non sono supportate automaticamente nei ruoli dei servizi cloud di Azure. Installare .NET LTS in ogni ruolo prima di eseguire l'app.