Monitoraggio self-hosting per applicazioni Spring Boot

1. Introduzione

Una delle tante grandi caratteristiche di Spring Boot è il set di attuatori integrati. Questi attuatori forniscono un modo semplice per monitorare e controllare quasi ogni aspetto di un'applicazione Spring Boot.

In questo tutorial, esamineremo come utilizzare l'attuatore di metriche per creare una soluzione di monitoraggio self-hosted per le applicazioni Spring Boot.

2. Database delle metriche

La prima parte del monitoraggio delle applicazioni Spring Boot è la scelta di un database di metriche . Per impostazione predefinita, Spring Boot configurerà un registro delle metriche Micrometer in ogni applicazione.

Questa implementazione predefinita raccoglie un set predefinito di metriche dell'applicazione come l'utilizzo della memoria e della CPU, le richieste HTTP e poche altre. Ma queste metriche sono archiviate solo in memoria , il che significa che andranno perse ogni volta che l'applicazione viene riavviata.

Per creare una soluzione di monitoraggio self-hosted, dovremmo prima scegliere un database di metriche che risiede all'esterno dell'applicazione Spring Boot. Le sezioni seguenti illustreranno solo alcune delle opzioni self-hosted disponibili.

Notare che ogni volta che Spring Boot rileva un altro database di metriche sul classpath, disabilita automaticamente il registro in memoria.

2.1. InfluxDB

InfluxDB è un database di serie temporali open source. Il modo più rapido per iniziare con InfluxDB è eseguirlo localmente come container Docker:

docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb

Nota che questo memorizzerà le metriche nella partizione locale / tmp . Questo va bene per lo sviluppo e il test, ma non sarebbe una buona scelta per gli ambienti di produzione.

Una volta che InfluxDB è in esecuzione, possiamo configurare la nostra applicazione Spring Boot per pubblicare le metriche aggiungendo la dipendenza Micrometer appropriata :

 io.micrometer micrometer-registry-influx 

Inoltre, dobbiamo aggiungere una nuova voce al file application.properties :

management.metrics.export.influx.uri=//localhost:8086

Per impostazione predefinita, il nome del database è impostato su mydb , mentre il nome utente e la password rimangono non impostati.

Tuttavia, possiamo sovrascrivere i valori predefiniti utilizzando proprietà dedicate:

management.metrics.export.influx.db=customDbName management.metrics.export.influx.user-name=myUserName management.metrics.export.influx.password=mySecret

InfluxDB non fornisce uno strumento di visualizzazione nativo . Tuttavia, fornisce uno strumento separato chiamato cronografo che funziona bene per visualizzare i dati InfluxDB.

2.2. Prometeo

Prometheus è un toolkit di monitoraggio e avviso open source originariamente creato su SoundCloud. Funziona in modo leggermente diverso da InfluxDB.

Invece di configurare la nostra applicazione per pubblicare le metriche su Prometheus, configuriamo Prometheus per eseguire periodicamente il polling della nostra applicazione .

Innanzitutto, configuriamo la nostra applicazione Spring Boot per esporre un nuovo endpoint dell'attuatore Prometheus. Lo facciamo includendo la dipendenza micrometer-registry-prometheus:

 io.micrometer micrometer-registry-prometheus 

Questo creerà un nuovo endpoint dell'attuatore che produce i dati delle metriche in un formato speciale che Prometheus comprende.

Successivamente, dobbiamo configurare Prometheus per eseguire il polling della nostra applicazione aggiungendo la configurazione desiderata in un file prometheus.yml .

La seguente configurazione indica a Prometheus di eseguire il polling della nostra applicazione ogni 5 secondi, utilizzando il nuovo endpoint dell'attuatore:

scrape_configs: - job_name: 'spring-actuator' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['127.0.0.1:8080']

Infine, possiamo avviare un server Prometheus locale utilizzando Docker. Ciò presuppone che il nostro file di configurazione personalizzato si trovi nel file locale /etc/prometheus/prometheus.yml :

docker run -d \ --name=prometheus \ -p 9090:9090 \ -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus \ --config.file=/etc/prometheus/prometheus.yml

Prometheus fornisce il proprio strumento di visualizzazione per visualizzare le metriche raccolte. È possibile accedervi dall'URL // localhost: 9090 /.

2.3. Grafite

La grafite è un altro database di serie temporali open source. La sua architettura è leggermente più complicata rispetto agli altri database che abbiamo esaminato, ma con Docker è semplice eseguire un'istanza in locale:

docker run -d \ --name graphite \ --restart=always \ -p 80:80 \ -p 2003-2004:2003-2004 \ -p 2023-2024:2023-2024 \ -p 8125:8125/udp \ -p 8126:8126 \ graphiteapp/graphite-statsd

Quindi possiamo configurare Spring Boot per pubblicare le metriche nella nostra istanza aggiungendo la dipendenza micrometro-registro-grafite:

 io.micrometer micrometer-registry-graphite 

Oltre ad aggiungere le proprietà di configurazione ad application.properties :

management.metrics.export.graphite.host=127.0.0.1 management.metrics.export.graphite.port=2004

Come Prometheus, Graphite include il proprio dashboard di visualizzazione. È disponibile all'URL // localhost / .

3. Strumenti di visualizzazione

Una volta che disponiamo di una soluzione per memorizzare le metriche al di fuori della nostra applicazione Spring Boot, la decisione successiva è come visualizzare i dati .

Alcuni dei database di metriche menzionati in precedenza includono i propri strumenti di visualizzazione. Esiste uno strumento di visualizzazione autonomo che vale la pena guardare per la nostra soluzione di monitoraggio self-hosted.

3.1. Grafana

Grafana is an open-source analytics and monitoring tool. It can connect to all of the previously mentioned databases, as well as many others.

Grafana generally provides better configuration and superior alerting than most built-in visualization tools. It can easily be extended using plugins, and there are lots of pre-built dashboards that can be imported to quickly create our own visualizations.

To run Grafana locally, we can start it using Docker:

docker run -d -p 3000:3000 grafana/grafana

We can now access the Grafana home page at the URL //localhost:3000/.

At this point, we would need to configure one or more data sources. This can be any of the metrics databases discussed previously or a variety of other supported tools.

Una volta configurata un'origine dati, possiamo creare una nuova dashboard o importarne una che faccia ciò che vogliamo.

4. Conclusione

In questo articolo, abbiamo esaminato la creazione di una soluzione di monitoraggio self-hosted per le applicazioni Spring Boot.

Abbiamo esaminato tre database di metriche che Spring Boot supporta prontamente e abbiamo visto come eseguirli localmente.

Abbiamo anche esaminato brevemente Grafana, un potente strumento di visualizzazione in grado di visualizzare i dati delle metriche da una varietà di fonti.