{"id":7144,"date":"2024-07-17T08:00:00","date_gmt":"2024-07-17T06:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=7144"},"modified":"2024-07-16T18:22:05","modified_gmt":"2024-07-16T16:22:05","slug":"gestione-proattiva-degli-errori-basata-sui-dati-con-aws-x-ray-e-cloudwatch","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/gestione-proattiva-degli-errori-basata-sui-dati-con-aws-x-ray-e-cloudwatch\/","title":{"rendered":"Gestione Proattiva degli Errori Basata sui Dati con AWS X-Ray e CloudWatch"},"content":{"rendered":"\n

“L\u2019immaginazione \u00e8 pi\u00f9 importante della conoscenza. La conoscenza \u00e8 limitata. L\u2019immaginazione abbraccia il mondo.”<\/em> Albert Einstein<\/p>\n\n\n\n

L\u2019esperienza utente \u00e8 fondamentale per il successo di un sito web: se un utente riscontra errori durante l\u2019utilizzo di un servizio, ci\u00f2 influenzer\u00e0 il tasso di conversione ed i guadagni.<\/p>\n\n\n\n

Correlare i dati per trovare la causa scatenante di un disservizio \u00e8 un processo che richiede tempo: spesso \u00e8 necessario molto lavoro per cercare nell\u2019enorme quantit\u00e0 di log e isolare tra le azioni dell’utente la causa scatenante. A volte \u00e8 praticamente impossibile identificare i piccoli glitch che peggiorano l’esperienza dell\u2019utente del nostro sito web.<\/p>\n\n\n\n

Supponiamo che ad un utente che accede ai nostri servizi web venga assegnato un ID univoco per ogni transazione che compie (come ad esempio un ID carrello, un ID ordine o un cookie di sessione).<\/p>\n\n\n\n

Se si verificasse un errore e l\u2019utente ci contattasse per risolverlo, potremmo certamente risalire a cosa stava facendo l\u2019utente e identificare il problema, ma correlando manualmente<\/em> i dati dell\u2019errore all\u2019identificatore utilizzato dall’applicazione.<\/p>\n\n\n\n

Si tratterebbe di un approccio di tipo reattivo<\/em>. <\/p>\n\n\n\n

Come possiamo invece sfruttare proattivamente<\/em> i dati e gli strumenti che gi\u00e0 abbiamo per vedere quali transazioni sono impattate da problemi? Possiamo riuscire a contattare facilmente e rapidamente l\u2019utente per aiutarlo prima che si accorga dell’errore e apra un ticket?<\/p>\n\n\n\n

Abbiamo gi\u00e0 visto soluzioni di monitoraggio su AWS, ad esempio con AWS X-Ray<\/a>, CloudWatch<\/a> e Cloudwatch RUM<\/a>, cos\u00ec come abbiamo visto come estrarre dati significativi per la nostra business intelligence. Tuttavia, correlare i dati in tempo reale per rispondere rapidamente agli eventi e agli errori<\/strong> richiede un\u2019integrazione pi\u00f9 profonda.<\/p>\n\n\n\n

In questo articolo, vedremo come possiamo utilizzare una funzione meno conosciuta di CloudWatch, i CloudWatch Custom Widgets<\/strong>, per ottenere informazioni pi\u00f9 approfondite sull’esperienza utente senza utilizzare servizi aggiuntivi. Spesso e volentieri, infatti, abbiamo gi\u00e0 i dati di cui abbiamo bisogno; dobbiamo solo liberare la nostra immaginazione \ud83d\ude42<\/p>\n\n\n\n

Prima di iniziare: CloudWatch RUM dispone gi\u00e0 di una integrazione con AWS X-Ray: si tratta di attivarla con una semplice checkbox per iniziare tracciare e correlare gli errori con AWS lambda, chiamate API ed i servizi AWS. Ecco un esempio da un caso d\u2019uso reale:<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Come si pu\u00f2 vedere, con le architetture serverless la complessit\u00e0 cresce ed il tracciamento richiede tempo, pazienza e conoscenza. AWS X-Ray aggiunge un header di tracciamento per facilitare la correlazione tra le richieste degli utenti ed ogni componente; \u00e8 utile per uno sviluppatore, ma \u00e8 difficile da usare per altri team come ad esempio team di supporto e analisi dei dati. <\/p>\n\n\n\n

Inoltre, non ha informazioni sul dominio applicativo necessarie per prendere decisioni su eventuali modifiche del comportamento dell\u2019applicazione per risolvere problemi e imperfezioni. <\/p>\n\n\n\n

Esiste quindi uno strumento che permetta avere un collegamento tra un errore dell\u2019applicazione e i dati dell\u2019applicazione? Certo! Parliamo di CloudWatch Custom Widgets.<\/strong><\/p>\n\n\n\n

I Custom Widgets aiutano a ricercare e visualizzare i dati in modo conveniente utilizzando  funzioni Lambda ed aggiungendo cos\u00ec una parte di calcolo computazionale che pu\u00f2 essere utile ad automatizzare il lavoro di correlazione dei dati disponibili da fonti diverse, minimizzando anche gli errori umani.<\/p>\n\n\n\n

Vediamo come costruire una dashboard che visualizzi le transazioni con errori, cercando ed estraendo dati significativi.<\/p>\n\n\n\n

Assumeremo per comodit\u00e0 che le trace di AWS X-Ray contengano gi\u00e0 l\u2019ID della transazione. Ora occorre  trovare un modo per ottenere tutti gli errori e da qui estrarre i dettagli sulle transazioni e visualizzare i risultati.<\/p>\n\n\n\n

Fortunatamente per noi, possiamo cercare in AWS X-Ray gli errori registrati da CloudWatch RUM (che si sono verificati nei browser degli utenti) con una sintassi simile a questa:<\/p>\n\n\n\n

fault AND (service(id(type: \u201cclient::RUM\u201d )))<\/code><\/pre>\n\n\n\n

Con questa semplice query otteniamo tutte le tracce. <\/p>\n\n\n\n

Per ottenere l\u2019ID interno della transazione \u00e8 possibile usare una funzione lambda che cerchi i record restituiti dalla nostra query utilizzando il nostro linguaggio di programmazione preferito in abbinata alle librerie AWS SDK (ad esempio, python e boto3).<\/p>\n\n\n\n

La stessa lambda pu\u00f2 cercare altre informazioni nei database, cos\u00ec da poter recuperare dettagli sull’utente, come ad esempio l\u2019email, utili a risolvere il problema.<\/p>\n\n\n\n

A questo punto \u00e8 sufficiente generare codice HTML dalla funzione lambda per visualizzare tutte le informazioni in una dashboard Cloudwatch. A questo indirizzo<\/a> sono disponibili alcuni esempi.<\/p>\n\n\n\n

Una volta sviluppata la lambda, sar\u00e0 possibile aggiungere un widget personalizzato a una dashboard ed avere l\u2019anteprima del risultato: <\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

In questo modo possiamo avere una visualizzazione che mostri tutti gli errori ed i dati utili al team di supporto, il quale potr\u00e0 coinvolgere facilmente gli sviluppatori quando necessario.<\/p>\n\n\n\n

Conclusioni e next step<\/h2>\n\n\n\n

Il nostro caso d\u2019uso \u00e8 volutamente semplice, ma \u00e8 possibile espandere questo esempio ed includere maggiori informazioni: pensate al valore aggiunto di avere statistiche su quanto frequentemente si verifica un errore all’interno di un funnel utente specifico.<\/p>\n\n\n\n

Una volta trovato un modo per correlare i dati, l’immaginazione \u00e8 l\u2019unico limite! <\/p>\n\n\n\n

Quello descritto \u00e8 un tipo di approccio simile ai principi della filosofia Unix, che permette di costruire elaborazioni e workflow complesse combinando utility semplici:<\/p>\n\n\n\n