Metriche con Spring Boot Actuator

Spring Boot permette di utilizzare una serie di feature per monitorare le nostre applicazioni che vanno sotto il nome di Spring Boot Actuator

In questo articolo vediamo come abilitare ed utilizzare Actuator all’interno della nostra applicazione Spring Boot. Stiamo parlando di informazioni specifiche della nostra applicazione che vengono rese disponibili attraverso degli endpoint (url) che pubblicano dati in formato JSON. Sicuramente gli sviluppatori che incominciano ad avere qualche capello bianco vedranno delle similitudini tra questo sistema e il vecchio ma ancora vivo JMX (Java Management Extensions), che infatti è uno dei modi attraverso il quale Spring Boot Actuator può pubblicare le informazioni.

La prima cosa che dobbiamo fare è aggiungere la dipendenza al nostro progetto

Così facendo abbiamo incluso nel nostro progetto gli endpoint Actuator, ora dobbiamo abilitarli perchè per default sono visibili solo a chi è autenticato nella nostra applicazione. Per fare ciò dobbiamo aggiungere una proprietà nel nostro progetto, nel file application.yml

Ora possiamo visualizzare tutte le informazioni che sono disponibili attraverso i diversi endpoint pubblicati da Actuator. Per avere una lista completa potete vedere la documentazione ufficiale, ma per incominciare subito a visualizzarli nella nostra applicazione d’esempio potete richiamare l’url http://localhost:8080/actuator . Infatti noi abbiamo incluso anche la dipendenza a Spring Data REST HAL Browser, che ci permette di visualizzare le informazioni JSON che vengono ritornate in maniera molto veloce.

Andando ad esempio sull’endpoint /health riceveremo le seguenti informazioni sulle condizioni della nostra applicazione

Tutti gli endpoint sono configurabili attraverso i properties della nostra applicazione, per abilitarli o per customizzare qualche comportamento. Esiste anche l’endpoint shutdown, disabilitato per default, che permette addirittura di spegnere la nostra applicazione. Se volessimo abilitarlo dovremmo andare ad operare sulla configurazione richiamando lo specifico endpoint

e poi richiamando il path /shutdown con il metodo HTTP POST potremo spegnere la nostra applicazione. Magari questa funzionalità potrebbe tornare utile in alcuni casi, ovviamente riabilitando quantomeno l’autenticazione!!

Health

All’interno della nostra applicazione possono esserci diversi servizi esterni di cui vogliamo avere informazioni sullo stato di “salute”. Avviando semplicemente la nostra applicazione vediamo che avendo configurato anche il database H2 tra le nostre dipendenze, quando andiamo a richiamare il path /health riceviamo le informazioni sullo status anche del db. Può essere molto utile agganciarsi a questo sistema per pubblicare le informazioni sullo stato di salute di un servizio che viene gestito dalla nostra applicazione. Per fare ciò dobbiamo creare un’implementazione dell’interfaccia HealthIndicator

Il servizio che vogliamo pubblicare sotto /health è un nostro server Redis. Il metodo che viene richiamato è health() che va a verificare la connessione a Redis con un classico PING/PONG e poi, se il servizio è online, recupera una chiave random. Ora se andiamo a richiamare l’endpoint health troveremo anche il nostro servizio

 

Metriche

Altro endpoint che sicuramente può essere utile nelle nostre applicazioni è quello relativo alle metriche, /metrics. Per default vengono visualizzate varie metriche standard come quelle riportate di seguito

Oltre alle metriche standard possiamo aggiungere ovviamente dei nostri valori utilizzando delle variabili che possono essere gestite semplicemente incrementandole/decrementandole (counter) o settandone direttamente il valore (gauge). Nella seguente classe andiamo a popolare due di queste variabili utilizzando i servizi di default messi a disposizione da Spring Boot Actuator

Richiamando adesso l’endpoint /metrics troveremo ora anche le nostre nuove metriche. Come in tutti gli altri casi quando parliamo di Spring Boot, non stiamo parlando di feature spettacolari, ma comunque sono quelle classiche cose che devono essere implementate nelle nostre applicazioni e averle già pronte per l’utilizzo è sicuramente un ottimo punto di partenza.

I nostri servizi possono produrre delle metriche che rendiamo disponibili tramite questi endpoint REST, ma potrebbe essere utile inviare queste informazioni anche verso altri sistemi. Proprio per questo motivo è stato implementato un sistema per esportare ed aggregare le metriche che stiamo producendo. Qui di seguito vedete un semplice esempio di configurazione che esporta le metriche su un server Redis

Attraverso l’annotation ExportMetricWriter andiamo a dire a Spring dove vogliamo scrivere le nostre metriche. Per far funzionare il precedente esempio dobbiamo inserire nel nostro application.yaml la chiave e il prefisso che utilizzeremo per le informazioni su Redis

Se proviamo ad andare su Redis vedremo quindi le informazioni delle metriche che vengono salvate

Per maggiori informazioni su questo argomento vi rimando alla documentazione ufficiale.

 

Custom Endpoint

Con tutti questi endpoint a disposizione viene ovviamente la voglia di farne uno nostro, che possa ritornare informazioni specifiche per la nostra applicazione. Ecco quindi come fare, implementando l’interfaccia Endpoint

in questo caso ritorniamo dei valori d’esempio all’interno di un HashMap ma avremmo potuto utilizzare anche altre strutture dati. Recuperando la lista degli endpoint da /actuator troveremo il nostro che è stato pubblicato sotto l’url /customEndPoint . Effettuando la chiamata riceveremo l’HashMap in formato JSON

 

 

 

Una risposta

  1. marzo 28, 2017

    […] I liked this Italian-language post by Federico Paparoni on using the Spring Boot Actuator for metrics […]