Condividi tramite


Diagnostica completa per servizi e app Web con Application Insights

Questo articolo illustra come Application Insights si adatta al ciclo DevOps.

Funzione di Application Insights

Application Insights consente di monitorare l'app Web in esecuzione, Indica gli errori e i problemi di prestazioni e consente di analizzare il modo in cui i clienti usano l'app. Funziona per le app in esecuzione su piattaforme come ASP.NET, Java EE e Node.js. È ospitato nel cloud o in locale.

Immagine che mostra gli aspetti della complessità della distribuzione di app Web.

È essenziale monitorare un'applicazione moderna durante l'esecuzione. Si desidera rilevare gli errori prima che i clienti facciano. Si desidera anche individuare e risolvere i problemi di prestazioni che rallentano o causano un inconveniente agli utenti. Quando il sistema esegue la tua soddisfazione, vuoi anche sapere cosa stanno facendo gli utenti. Ad esempio, usano la funzionalità più recente? e se stanno traendo vantaggio dal programma.

Le applicazioni Web moderne vengono sviluppate in un ciclo di recapito continuo:

  • Rilasciare una nuova funzionalità o un miglioramento.
  • Osservare come funziona bene per gli utenti.
  • Pianificare l'incremento successivo dello sviluppo in base a tale conoscenza.

In questo ciclo, l'osservazione riveste un ruolo fondamentale. Application Insights offre gli strumenti necessari per monitorare le prestazioni e l'utilizzo di un'applicazione Web.

Tra questi, l'aspetto più importante è la diagnostica, con le diagnosi che ne conseguono. Se l'applicazione ha esito negativo, l'azienda viene persa. Il ruolo principale di un framework di monitoraggio è:

  • Rilevare gli errori in modo affidabile.
  • Inviare immediatamente una notifica.
  • Presentare le informazioni necessarie per diagnosticare il problema.

Application Insights esegue queste attività.

Da dove provengono i bug?

Gli errori nei sistemi Web sono in genere causati da problemi di configurazione o difetti nell'interazione fra i numerosi componenti. La prima attività quando si affronta un evento imprevisto del sito live consiste nell'identificare il locus del problema. Quale componente o relazione è la causa?

In un'era più semplice, un programma computer è stato eseguito in un computer. Gli sviluppatori lo hanno testato accuratamente prima della spedizione, e dopo la spedizione, hanno raramente visto o pensato di nuovo. Gli utenti hanno dovuto mettere in piedi eventuali bug residui per molti anni.

Il processo è molto diverso ora. L'app ha una moltitudine di dispositivi diversi da eseguire e può essere difficile garantire lo stesso comportamento su ognuno di essi. L'hosting di app nel cloud significa che i bug possono essere risolti rapidamente. Ma significa anche che c'è concorrenza continua e l'aspettativa di nuove funzionalità a intervalli frequenti.

In queste condizioni, l'unico modo per mantenere il controllo costante sul conteggio dei bug è l'unit test automatizzato. Non è possibile ripetere manualmente tutto su ogni consegna. Il testing delle unità ormai è parte integrante del processo di compilazione. Strumenti come Xamarin Test Cloud consentono il testing automatizzato dell'interfaccia utente all'interno più versioni dei browser. Queste prove consentono di ridurre al minimo il numero di bug presenti in un'app.

Le applicazioni Web tipiche includono molti componenti live. Insieme al client (in un browser o in un'app per dispositivi) e al server Web, è probabile che si verifichi un'elaborazione back-end sostanziale. Forse il back-end è una pipeline di componenti o una raccolta libera di pezzi di collaborazione. Molti di loro non saranno nel vostro controllo. Sono servizi esterni a cui si dipende.

In configurazioni come queste può essere difficile e dispendioso testare o prevedere ogni errore possibile e immaginabile al di fuori del sistema live.

Domande

Ecco alcune domande da porre quando si sviluppa un sistema Web:

  • L'app si arresta in modo anomalo?
  • Cosa succede esattamente? Se ha avuto esito negativo una richiesta, si vuole sapere come è arrivato. È necessaria una traccia di eventi.
  • La tua app è abbastanza veloce? Quanto tempo ci mette per rispondere a una normale richiesta?
  • Il server riesce a gestire il carico? Quando aumenta la frequenza delle richieste, il tempo di risposta rimane costante?
  • Come si risponde alle dipendenze, ad esempio le API REST, i database e altri componenti che l'app chiama? In particolare, se il sistema è lento, è il componente o si ottengono risposte lente da qualcun altro?
  • L'app è su o giù? È visibile in tutto il mondo? È necessario sapere se si arresta.
  • Qual è la causa radice? Errore nel componente o dipendenza? Si tratta di un problema di comunicazione?
  • Quanti utenti sono interessati? Se si ha più di un problema da affrontare, qual è il più importante?

Informazioni su Azure Application Insights

Immagine che mostra un flusso di lavoro di base di Application Insights.

  1. Application Insights consente di instrumentare l'app, inviandone i dati di telemetria durante l'esecuzione. È possibile compilare Application Insights SDK nell'app oppure applicare la strumentazione in fase di esecuzione. Il metodo precedente è più flessibile perché è possibile aggiungere dati di telemetria personalizzati ai moduli regolari.
  2. I dati di telemetria vengono inviati al portale di Application Insights, in cui vengono archiviati ed elaborati. Anche se Application Insights è ospitato in Azure, può monitorare qualsiasi app Web, non solo app di Azure.
  3. I dati di telemetria vengono forniti sotto forma di grafici e tabelle di eventi.

Esistono due tipi principali di telemetria: istanze non elaborate e istanze aggregate.

  • I dati dell'istanza possono includere un report di una richiesta ricevuta dall'app Web. È possibile trovare ed esaminare i dettagli di una richiesta usando lo strumento Di ricerca nel portale di Application Insights. L'istanza potrebbe includere dati come il tempo necessario per rispondere alla richiesta e all'URL richiesto e alla posizione approssimativa del client.
  • I dati aggregati includono i conteggi degli eventi per unità in modo che sia possibile confrontare la frequenza delle richieste con i tempi di risposta. Include anche le medie delle metriche, ad esempio i tempi di risposta delle richieste.

Le principali categorie di dati sono:

  • Richieste all'app (in genere richieste HTTP) con dati su URL, tempo di risposta e esito positivo o negativo.
  • Dipendenze come le chiamate REST e SQL effettuate dall'app, anche con URI, tempi di risposta e esito positivo.
  • Le eccezioni, incluse le analisi dello stack.
  • Dati di visualizzazione pagina, provenienti dai browser degli utenti.
  • Metriche come contatori delle prestazioni e metriche scritte autonomamente.
  • Eventi personalizzati che è possibile usare per tenere traccia degli eventi aziendali.
  • Tracce del log a scopo di debug.

Case study: Real Madrid F.C.

Il servizio Web del Real Madrid Football Club serve circa 450 milioni di tifosi in tutto il mondo, I fan lo accedono tramite web browser e le app per dispositivi mobili del club. I fan possono prenotare i biglietti e accedere anche a informazioni e video clip sui risultati, i giocatori e i prossimi giochi. Possono cercare con filtri come i numeri di gol segnati. Inoltre, sono disponibili i collegamenti ai social media. L'esperienza utente è altamente personalizzata ed è progettata come comunicazione bidirezionale per coinvolgere i fan.

La soluzione è un sistema di servizi e applicazioni in Azure. La scalabilità è un requisito chiave. Il traffico è variabile e può raggiungere volumi elevati durante e intorno alle corrispondenze.

Per il Real Madrid, è fondamentale monitorare le prestazioni del sistema. Application Insights offre una visualizzazione completa nel sistema per garantire un livello di servizio affidabile e elevato.

Il club ottiene anche una conoscenza approfondita dei suoi tifosi come dove sono (solo il 3% è in Spagna), l'interesse che hanno nei giocatori, nei risultati storici e nelle prossime partite, e come rispondono ai risultati delle partite.

La maggior parte di questi dati di telemetria viene raccolta automaticamente senza codice aggiunto, semplificando la soluzione e riducendo la complessità operativa. Per il Real Madrid, Application Insights gestisce ogni mese 3,8 miliardi di punti di telemetria.

Real Madrid usa il modulo Power BI per visualizzare i dati di telemetria.

Screenshot che mostra una visualizzazione di Power BI dei dati di telemetria di Application Insights.

Rilevamento intelligente

diagnostica proattiva è una funzionalità recente. Senza richiedere configurazioni particolari da parte dell'utente, Application Insights rileva automaticamente gli aumenti atipici nella frequenza degli errori dell'app e fornisce avvisi a tale riguardo. È abbastanza intelligente ignorare uno sfondo di errori occasionali e aumenta anche che sono semplicemente proporzionali a un aumento delle richieste.

Ad esempio, potrebbe verificarsi un errore in uno dei servizi da cui dipende. O forse la nuova compilazione distribuita non funziona correttamente. Lo saprai non appena guardi il tuo messaggio di posta elettronica. Sono disponibili anche webhook in modo da poter attivare altre app.

Un altro aspetto di questa funzionalità è che consente di eseguire un'approfondita analisi giornaliera dei dati di telemetria, finalizzata a individuare schemi delle prestazioni atipici altrimenti difficili da rilevare, Ad esempio, può trovare prestazioni lente associate a una determinata area geografica o a una versione specifica del browser.

In entrambi i casi, l'avviso indica i sintomi individuati. Fornisce anche i dati necessari per diagnosticare il problema, ad esempio i report sulle eccezioni pertinenti.

Screenshot che mostra la posta elettronica dalla diagnostica proattiva.

Il cliente Samtec ha dichiarato: "Durante un recente cutover delle funzionalità, è stato rilevato un database con scalabilità ridotta che stava raggiungendo i limiti delle risorse e causando timeout. Gli avvisi proattivi si sono presentati al momento stesso di valutare il problema, praticamente in tempo reale, come promesso. Questi e gli altri avvisi della piattaforma Azure ci hanno aiutato a risolvere il problema quasi nell'immediato. Tempo di inattività <totale di 10 minuti."

Flusso di metriche live

Distribuire l'ultima build può generare ansia. In caso di problemi, è necessario conoscerli immediatamente in modo che sia possibile eseguire il backout, se necessario. Flusso metriche attive offre le metriche essenziali con una latenza di circa un secondo.

Screenshot che mostra le metriche attive.

Consente di esaminare immediatamente un campione di eventuali errori o eccezioni.

Screenshot che mostra gli eventi di errore live.

Mappa delle applicazioni

Mappa applicazioni individua automaticamente la topologia dell'applicazione. Fornisce le informazioni sulle prestazioni sopra la mappa per consentire di identificare facilmente i colli di bottiglia delle prestazioni e i flussi problematici nell'ambiente distribuito. Con La mappa delle applicazioni è possibile individuare le dipendenze delle applicazioni nei servizi di Azure.

È possibile valutare un problema comprendendo se è correlato al codice o alla dipendenza. Da un'unica posizione, è possibile esaminare l'esperienza di diagnostica correlata. Ad esempio, l'applicazione potrebbe non riuscire a causa di una riduzione delle prestazioni in un livello SQL. Con La mappa delle applicazioni è possibile visualizzarla immediatamente ed eseguire il drill-through dell'esperienza Sql Index Advisor o Query Insights.

Screenshot che mostra una mappa dell'applicazione.

Application Insights Log Analytics

Con Log Analytics è possibile scrivere query arbitrarie in un linguaggio simile a SQL avanzato. La diagnosi nell'intero stack di app diventa semplice, in quanto le varie prospettive diventano connesse. È quindi possibile porre le domande giuste per correlare le prestazioni del servizio con le metriche aziendali e l'esperienza del cliente.

È possibile eseguire query di tutte le istanze di telemetria e dei dati non elaborati archiviati nel portale. Il linguaggio include filtri, join, aggregazioni e altre operazioni. È possibile calcolare i campi ed eseguire analisi statistiche Sono disponibili visualizzazioni tabulari e grafiche.

Screenshot che mostra un grafico di query e risultati di analisi.

Ad esempio, è facile:

  • Segmentare i dati sulle prestazioni delle richieste dell'applicazione in base ai livelli cliente per comprendere l'esperienza.
  • Cercare specifici codici di errore o nomi di eventi personalizzati durante l'analisi dei siti attivi.
  • Esaminare l'utilizzo delle app da parte di determinati clienti per comprendere come vengono acquisite e adottate le funzionalità.
  • Tenere traccia di sessioni e tempi di risposta di determinati utenti per consentire al team operativo e di supporto di fornire assistenza in tempi immediati.
  • Individuare le funzionalità più utilizzate nelle app per rispondere alle domande sulla priorità delle funzionalità.

Il cliente DNN ha dichiarato: "Application Insights ha fornito la parte mancante dell'equazione per poter combinare, ordinare, eseguire query e filtrare i dati in base alle esigenze. Permettendo al nostro team di mettere in campo il proprio ingegno e la propria esperienza per trovare i dati con un linguaggio di query avanzato, questa soluzione ci ha consentito di risalire a informazioni e risolvere problemi che nemmeno sapevamo di avere. Da domande del tipo "Mi chiedo se..." sono emerse molte risposte interessanti."

Integrazione di strumenti di sviluppo

Application Insights si integra con gli strumenti di sviluppo.

Configura Application Insights

Visual Studio ed Eclipse hanno strumenti per configurare i pacchetti SDK corretti per il progetto in fase di sviluppo. È disponibile un comando di menu per aggiungere Application Insights.

Se si usa un framework di registrazione delle tracce, ad esempio Log4N, NLog o System.Diagnostics.Trace, è possibile inviare i log ad Application Insights insieme agli altri dati di telemetria in modo da poter correlare facilmente le tracce con richieste, chiamate di dipendenza ed eccezioni.

Ricercare i dati di telemetria in Visual Studio

Durante lo sviluppo e il debug di una funzionalità, è possibile visualizzare e cercare i dati di telemetria direttamente in Visual Studio. È possibile usare le stesse funzionalità di ricerca del portale Web.

Quando Application Insights registra un'eccezione, è possibile visualizzare il punto dati in Visual Studio e passare direttamente al codice pertinente.

Screenshot che mostra una ricerca in Visual Studio.

Durante il debug, è possibile mantenere i dati di telemetria nel computer di sviluppo. È possibile visualizzarlo in Visual Studio senza inviarlo al portale. Con l'opzione locale si evita di mischiare il debug e la telemetria della produzione.

Elementi di lavoro

Quando viene generato un avviso, Application Insights può creare automaticamente un elemento di lavoro nel sistema di tracciamento delle attività.