Monitoring di una applicazione Go

Monitoring di una applicazione Go
Oggi facciamo quattro chiacchiere con Aurélien Rainone, programmatore in Develer, che ha recentemente tenuto uno dei nostri techLabs allo Student Hotel di Firenze.

In questa intervista, ripercorrendo brevemente il suo workshop, ci illustrerà i concetti principali legati al monitoraggio di una applicazione scritta in Go (conosciuto anche come GoLang) e ci spiegherà come usare al meglio i tool che sono a nostra disposizione.

Ciao Aurélien, nella tua esperienza quali sono i tipici problemi che si incontrano quando dobbiamo monitorare una app?

I problemi sono molto comuni: il programma è troppo lento? Per quali motivi? Potrebbe andare più veloce? Come si comporta l’app in produzione? Come si comporta sotto carico?

Quali sono i tool che possiamo usare per risolvere questi problemi?

Nella prima parte del workshop, abbiamo guardato in dettaglio i tool inclusi nella distribuzione del linguaggio: basta installare Go e hai già a tua disposizione diversi  strumenti, tra cui l’execution tracer, il profiler e anche la possibilità di scrivere ed eseguire facilmente dei benchmark. In Go, i benchmark sono delle semplici funzioni che hanno come prefisso “Benchmark” (per esempio “BenchmarkMyFunction”); il package “testing” mette già a disposizione moltissime funzionalità, che permettono di testare estensivamente il proprio codice senza ricorrere a tool aggiuntivi.

Che differenze ci sono tra questi tool?

L’execution tracer è un tool grafico che permette di capire quando avvengono determinati eventi legati al runtime di Go, come per esempio  la schedulazione delle goroutines e l’individuazione di problemi di concorrenza.

Il profiler permette di analizzare in dettaglio una funzione o una parte di codice a livello di performance, sia per  la CPU che per la memoria, per sapere esattamente quali sono i punti critici nel codice, per poi ottimizzarli.

Nella seconda parte, abbiamo poi introdotto concetti di monitoring in tempo reale, usando Prometheus, un TSDB (time-series database), e illustrato quali sono i tipi di metriche che possiamo monitorare.

Prometheus è un tool di terze parti non incluso nella distribuzione di Go, pertanto va installato a parte. Durante il workshop, i partecipanti hanno imparato a monitorare un server HTTP in tempo reale, usando uno stack Prometheus/Grafana installato via docker-compose

In conclusione, esiste un tool migliore degli altri da usare?

Direi che no, non c’è un tool migliore degli altri da usare; un tool va utilizzato a seconda del caso d’uso.

Per esempio, se so che una funzione prende un po’ troppo tempo e devo migliorarla, allora scrivo un benchmark per valutare il tempo di esecuzione e misurare il miglioramento che riesco a ottenere con ogni cambiamento. Se invece non conosco esattamente dov’è che il mio programma spende la maggior parte del tempo, uso il profiler in modo da individuare i punti critici.

Altro esempio: ho un server HTTP che sta girando 24 ore su 24 e devo poter continuamente monitorare come sta andando. Con Prometheus, posso monitorare CPU e memoria in base a quante connessioni sono aperte sul server, e vedere cioè come si comporta sotto carico.

In conclusione, è l’esperienza che ci guida nella scelta: una volta che hai acquisito una buona conoscenza dei diversi tool, sai quale usare nelle diverse circostanze

Per rimanere aggiornato sui nostri eventi, seguici sui social o iscriviti alla NewsLetter.

Rimani informato sugli eventi Develer

Iscriviti per ricevere aggiornamenti sugli eventi che organizziamo

Iscriviti