Compila Quindi Va

Il blog tecnico di Marco Breveglieri.
it en

Prometheus Client per Delphi rilasciato!

2023-03-26 Tempo di lettura 5 minuti Marco Breveglieri

Sono felice di annunciare che il client Prometheus per Delphi scritto da me è ora finalmente disponibile (con codice sorgente) su GitHub !

Ecco qui di seguito tutti i dettagli per sapere come scaricarlo e utilizzarlo per iniziare a monitorare le vostre applicazioni e servizi scritti in linguaggio Delphi.

Cos’è Prometheus?

Prometheus è uno strumento open source per il monitoraggio e la raccolta di metriche di sistema e applicazioni.

Questo tool è stato creato allo scopo di raccogliere e archiviare metriche su vari aspetti del sistema, come l’utilizzo della CPU, la memoria, la rete e così via. Inoltre, può essere utilizzato per monitorare le applicazioni e i servizi (compresi quelli realizzati da noi), raccogliendo metriche sulle prestazioni dell’applicazione, sull’utilizzo della memoria, sulle richieste HTTP gestite, sul numero di utenti collegati e tanto altro ancora.

Le metriche raccolte dal server di Prometheus sono associate a un timestamp, ovvero alla data/ora precisa del momento in cui sono state rilevate, e possono essere visualizzate attraverso la sua interfaccia utente grafica, oppure esportate verso altri strumenti, come Grafana ad esempio, per creare dashboard personalizzate e comprensibili anche a un utenza business, non solo tecnica.

A cosa serve un client?

Un client Prometheus è un componente software che viene utilizzato per inviare le metriche collezionate dal sistema o dalle applicazioni al server Prometheus, dove vengono raccolte e archiviate. In altre parole, il client Prometheus funge da ponte tra le metriche raccolte e il server Prometheus.

Il compito specifico di un client è quindi duplice: fornire le classi e le strutture dati per poter definire in modo semplice e immediato le metriche da gestire, collezionare i valori istantanei delle metriche ed esportarle in un formato compatibile e comprensibile dal server Prometheus, affinché il tool possa archiviarle ed eventualmente utilizzarle per operazioni accessorie, come l’invio di alert.

Sono disponibili diversi client per svariati linguaggi, alcuni ufficiali (gestiti direttamente dal team di sviluppo di Prometheus), altri sviluppati da terze parti: potete trovarli tutti alla pagina dedicata nel sito ufficiale.

All’elenco dei client per Prometheus ne mancava giusto uno per il linguaggio Delphi, così ho pensato di scriverne uno. 😉

Verso l’integrazione con Delphi

La prima release in assoluto di questo client, non ufficiale e molto parziale (non ottimizzata), è stata resa disponibile come esempio nel mio talk tenutosi al Delphi Day 2022 (potete vedere il replay della sessione su YouTube ), in cui ho parlato di Prometheus, del suo utilizzo con Delphi e dell’integrazione con Grafana per la visualizzazione dei dati.

Potete tranquillamente fare riferimento a questo talk per approfondire l’argomento e muovere i primi passi sia con Prometheus sia con Grafana, e anche con il client Delphi per Prometheus poiché molto del codice mostrato è ancora del tutto valido e funzionante.

Ed ecco il Client Prometheus per Delphi!

Nei mesi successivi ho provveduto a irrobustire la logica del client e applicare un po’ di refactoring sul codice scritto in precedenza, che ora potete finalmente scaricare da GitHub utilizzando GitHub Desktop o un tool equivalente, oppure sfruttando il package manager compatibile con Delphi, Boss .

Nella pagina GitHub del client all’indirizzo qui sopra trovate tutte le istruzioni a corredo.

Utilizzare il client nei propri progetti

Per utilizzare il client Prometheus all’interno dei propri progetti, è necessario predisporre un endpoint HTTP dal quale sia possibile esportare i valori delle metriche stesse nel formato testuale supportato dal tool.

Nel codice sorgente disponibile su GitHub è presente una cartella “Samples” nella quale è possibile trovare diversi progetti demo da cui prendere spunto per capire come esporre le metriche utilizzando uno dei tanti web framework più diffusi per Delphi.

Al momento, è possibile trovare esempi di progetti embrionali per

Se utilizzate il Web framework Horse per i vostri progetti, è disponibile inoltre un middleware compatibile per integrare automaticamente l’esportazione delle metriche nella vostra applicazione con pochissime righe di codice (basta abilitare il middleware chiamando il metodo appropriato).

Inutile dire che il middleware e gli esempi citati - così come il client principale - sono anch’essi gratuiti e opensource.

Alcune note e avvisi…

Qui di seguito riporto alcune note relative alle funzionalità supportate dal client e ad alcune delle sue attuali limitazioni conosciute e feature ancora in lavorazione, ma che verranno ben presto rilasciate.

Il client Prometheus per Delphi supporta la totalità dei requisiti minimi che sono richiesti dal team di Prometheus, come descritto nell’apposita documentazione per la scrittura di client .

La versione attuale del client implementa le metriche principali, ossia Counter e Gauge ; le altre tipologie di metriche addizionali (ma estremamente utili), ossia Histogram e Summary , sono in corso di implementazione e verranno rese presto disponibili nelle prossime release del client.

Riguardo invece i progetti di esempio e i middleware, essi verranno ben presto integrati con ulteriori progetti di partenza e plugin di integrazione per i framework di sviluppo Web più diffusi per Delphi che ancora mancano all’appello, ossia (per citarne alcuni)

Infine, mancano all’appello l’esportazione di metriche cosiddette predefinite, ossia quelle relative all’uso di CPU o di memoria, generalmente fornite di default dal client, unitamente a dati relativi all’eventuale runtime utilizzato (come avviene per .NET e per Java); non essendo indispensabili, al momento tali metriche non sono ancora disponibili “out of the box” all’interno del client, ma vi sono diverse valutazioni in corso per includerle nell’elenco magari prevedendo un modo per abilitarle di default, come se fossero “metriche di sistema”, interagendo con le API disponibili sulla piattaforma di riferimento (poiché si ritiene fondamentale cercare di mantenere il client il più indipendente possibile dalla piattaforma e dal sistema operativo).

Come contribuire?

Provvederò quanto prima ad abilitare gli strumenti necessari previsti da GitHub per la raccolta di feedback, di pull request e di contributi in generale sul progetto, in modo da consolidare ulteriormente la “code base” e integrarla con nuove feature e utilità.

Tuttavia, per suggerimenti, segnalazioni o informazioni sul client, potete contattarmi direttamente sui canali social che trovate nella mia homepage personale .

Happy coding! :)