Ciao, sono Valerio Barbera, ingegnere informatico, founder e CTO di Inspector, una piattaforma di monitoraggio oggi utilizzata da sviluppatori in più di 10 paesi.
In questo articolo voglio condividere la mia esperienza di lavoro nel mondo del monitoraggio provando ad aiutare gli sviluppatori a fare chiarezza su tre aspetti:
- Quale è il giusto tool per ogni specifico problema di monitoraggio;
- Quando, o in quali situazioni, il monitoraggio può essere efficace e vale l’investimento;
- Perché dovresti monitorare certe parti del tuo sistema e altre no, in base allo stadio di maturazione della tua applicazione e del tuo business.
Per molti sviluppatori, il bisogno di monitorare le loro applicazioni nasce quando iniziano a lavorare ad un progetto di medie/grandi dimensioni.
La ragione è semplice: quando un software diventa complesso, o è utilizzato da clienti di alto valore per l’azienda, i problemi ed i malfunzionamenti diventano costosi. Doppiamente costosi se a trovarli sono direttamente i clienti che rimangono bloccati a causa di problemi tecnici inaspettati. I clienti sempre meno digeriscono queste situazioni e non è certo un mistero che molti contratti finiscono alle ortiche perché i continui disservizi erodono i rapporti umani fra cliente e fornitore.
Risolvere problemi critici per i nostri clienti può certamente generare importanti opportunità di business, ma più il problema è critico, più devi far fronte ad aspettative sempre più alte.
Monitorare è il modo in cui gli sviluppatori evitano problemi tecnici inaspettati con l’obiettivo di mantenere contratti e clienti il più a lungo possibile generando stabilità di fatturato e nuove opportunità di business per l’azienda.
Oggi però non è così facile navigare il mercato dei sistemi di monitoraggio, probabilmente perché così tanti dati possono essere usati in così tanti modi diversi da rendere le scelte complicate lasciando gli sviluppatori sempre nel dubbio di aver fatto la scelta giusta o meno.
Ecco cosa ho imparato nella mia esperienza.
Cosa sono le piattaforme di monitoraggio?
Le piattaforme di monitoraggio tipicamente sono degli strumenti per sviluppatori composti di due parti: l’agente di monitoraggio (cosiddetto “Agent”), e la piattaforma centrale di analytics.
L’Agent è un pacchetto software che gli sviluppatori installano nei loro server o nelle applicazioni, ed il suo scopo è raccogliere informazioni rilevanti sullo stato dei sistemi e sulle loro performance.
I dati raccolti vengono poi inviati ad una piattaforma remota che ha il compito di conservarli, analizzarli e creare delle metriche che gli sviluppatori possono consultare in una dashboard in modo da poter capire a colpo d’occhio cosa sta succedendo all’interno dei propri sistemi.
Non ultimo, la piattaforma deve consentire allo sviluppatore di settare degli allarmi nel modo più semplice possibile per individuare i casi in cui qualcosa va storto.
Questa è certamente una descrizione semplicistica, che può descrivere migliaia di tool diversi. Se cerchi su Google il termine “monitoring tools” troverai tonnellate di risultati, molti dei quali faranno riferimento a strumenti che sembrano dei tool di “application monitoring” (o sono venduti come tali) ma che non hanno niente a che vedere con l’application monitoring.
Queste somiglianze mettono in difficoltà chi si approccia a questi problemi e rendono più complicato fare le scelte giuste e capire quale tool fa al caso proprio.
Diamo un’occhiata alle varie soluzioni disponibili suddivise per categorie per capire anche per quali scenari sono più adatte.
Logs management tools
Un tool di logs management è spesso la prima soluzione su cui si focalizza lo sviluppatore quando approccia per la prima volta al problema del monitoraggio.
Probabilmente perché fin dagli albori dello sviluppo software tenere sott’occhio i log dell’applicazione è sempre stata una delle abitudini dominanti di tutti gli sviluppatori, in quanto è il modo più semplice e veloce per rimanere informati su cosa sta succedendo all’interno dell’applicazione.
È stato lo stesso anche per me. Ma quando l’applicazione inizia a scalare (viene eseguita su molti server, richiede un’architettura complessa, alti standard di performance sono cruciali, ecc.) ho riscontrato enormi difficoltà ad estrarre dai log delle informazioni rilevanti e facilmente consultabili sullo stato interno dell’applicazione e sul consumo delle risorse.
È un po come l’invenzione dell’automobile al posto della quale la gente del tempo si aspettava cavalli più veloci perché i cavalli erano il mezzo di trasporto usato normalmente, fin quando si capì che era necessario qualcosa di totalmente differente per portare la produttività ad un altro livello.
Uptime monitoring tools
I tool di uptime monitoring possono essere descritti come dei “sofisticati ping”.
Lo scopo principale è semplice: questi tool “pingano” i tuoi endpoint da varie region in tutto il mondo per aiutarti a misurare quanto bene (o male) la tua applicazione può essere raggiunta dagli utenti che si trovano nelle varie parti del mondo.
Queste metriche aiutano a misurare come sta lavorando l’infrastruttura di rete esterna per portare la tua applicazione fino nel browser dei tuoi utenti finali (Load balancer, CDN, network, etc.) in modo da essere informato immediatamente se queste infrastrutture generano problemi.
Non forniscono nessuna informazione su ciò che accade all’interno della tua applicazione.
Nel mio caso, essendo Inspector un’applicazione usata da sviluppatori in giro per tutto il mondo, mi hanno aiutato a capire in quali parti del mondo gli utenti soffrivano di una navigazione lenta e quindi su dove fosse necessario impiegare più risorse per migliorare l’esperienza d’uso del prodotto.
Il problema di questi strumenti è che monitorano l’ambiente esterno, se la tua applicazione perde colpi, o va direttamente down, non potrai mai sapere perché.
Error tracking tools
Questi tool funzionano come una specie di trappola per eccezioni e ti consentono di ricevere alert quando si manifesta un errore.
In molti casi purtroppo una singola eccezione è una informazione troppo basilare per prevenire delle interruzioni di servizio. Non ci sono informazioni sui trend di performance, il carico dei sistemi nel momento in cui si è verificato l’errore, utilizzo di memoria, etc.
Inoltre non sarai in grado di sapere se la tua applicazione è nei guai finché non va esplicitamente in errore. Ed il nostro intento dichiarato ad inizio articolo è quello di evitare che siano i clienti a inciampare sui problemi tecnici.
Il problema è che approcciare un monitoraggio più strutturato purtroppo non è così semplice.
All-in-one Application Monitoring platforms
Le piattaforme di monitoraggio più blasonate come Datadog, Dynatrace, NewRelic, AppDynamics, e altre, forniscono la gestione dei log, metriche sui server, metriche di uptime, insight sulle infrastrutture, metriche sull’applicazione, raccolta di eventi non strutturati, e molto altro: personalmente trovo ragionevole credere che siano piattaforme progettate per scenari di tipo Enterprise.
Richiedono inevitabilmente molta assistenza e formazione, o addirittura un team dedicato, per essere configurate e manutenute, e tendono ad essere eccessivamente complesse e costose per team di piccole e medie dimensioni.
Inoltre richiedono l’installazione degli agenti a livello di server.
Sia che tu stia usando piattaforme per automatizzare il provisioning delle infrastrutture, o hai un team esterno che si occupa delle operations, tutto ciò che viene installato sulle infrastrutture è fuori dal ciclo di vita dello sviluppo software, causando la perdita di autonomia da parte degli sviluppatori.
Queste caratteristiche possono mettere in difficoltà gli sviluppatori, causando costanti flussi di email attraverso i vari team, ogni volta che è necessaria la minima configurazione o personalizzazione, e gli sviluppatori software hanno quasi sempre la peggio, perché in ogni caso non hanno nessun controllo su tutto ciò che risiede nelle infrastrutture.
Code Execution Monitoring tools
I tool di Code Execution Monitoring sono focalizzati sulla cosa più importante per ogni sviluppatore: l’esecuzione del codice sorgente.
Hai mai pensato alla possibilità di poter vedere il codice in esecuzione invece di doverlo immaginare e navigarlo manualmente? Questo è esattamente ciò per cui sono progettati questi i tool di Code Execution Monitoring.
Questo tipo di strumenti raccolgono informazioni sulle performance dell’applicazione, errori, trend di comportamento, e ti forniscono una rappresentazione visuale di cosa sta facendo la tua applicazione durante il suo normale funzionamento.
L’idea alla base di un tool di code execution monitoring è di creare un ambiente di monitoraggio totalmente “code-driven” appositamente pensato per lo sviluppatore software, evitando qualunque installazione o configurazione a livello server con cui molti sviluppatori odiano avere a che fare.
Io stesso sono uno di quegli sviluppatori a cui non piace complicarsi la vita con la gestione delle infrastrutture. Gestire server, ambienti cloud, etc. è una professione a sé. Richiede molte competenze verticali sugli ambienti operativi delle macchine, cyber security, scalabilità, e coinvolge tecnologie complesse (vedi Kubernetes).
Come sviluppatore software, ho cercato a lungo un sistema di monitoraggio del codice che fosse totalmente code-driven in modo da rimanere quanto più indipendente possibile dalle infrastrutture su cui risiede l’applicazione, sia che siano gestite da piattaforme di automazione sia che siano in carico a un team esterno.
Ho trascorso molti mesi a condividere l’idea alla base di Inspector come tool di Code Execution Monitoring partecipando ad eventi della community italiana di PHP, fiere di settore e confrontandomi con molti CTO e responsabili dello sviluppo software in molte aziende.
Grazie al Code Execution Monitoring puoi assicurarti in modo facile e veloce che le tue applicazioni stanno funzionando correttamente, puoi assicurarti di garantire una ottima esperienza cliente all’altezza delle aspettative, soprattutto nei periodi in cui lavori a cambiamenti continui, ed è sufficiente solo una libreria software che puoi installare nella tua applicazione come ogni altra dipendenza.
Inspector è partner di CTO Mastermind: contattalo per una prova gratuita.
Inspector è partner di CTO Mastermind e fa parte della rete di aziende innovative scelte dal CTO Mastermind e consigliate dalla community.
Ai membri di CTO Mastermind Inspector riserva una prova gratuita che include fino a 50.000 transazioni mensili, senza limiti di tempo!
Per accedere a questo vantaggio o chiedere informazioni, clicca qui sotto e contatta Inspector.