Zelfgehoste monitoring voor Spring Boot-applicaties

1. Inleiding

Een van de vele geweldige functies van Spring Boot is de set ingebouwde actuatoren. Deze actuatoren bieden een gemakkelijke manier om zowat elk aspect van een Spring Boot-applicatie te bewaken en te besturen.

In deze tutorial zullen we kijken naar het gebruik van de metrics-actuator om een ​​zelfgehoste monitoringoplossing voor Spring Boot-applicaties te creëren.

2. Gegevensdatabase

Het eerste deel van het monitoren van Spring Boot-applicaties is het kiezen van een metrics-database. Spring Boot configureert standaard een Micrometer metrics-register in elke applicatie.

Deze standaardimplementatie verzamelt een vooraf gedefinieerde set toepassingsstatistieken zoals geheugen- en CPU-gebruik, HTTP-verzoeken en enkele andere. Maar deze statistieken worden alleen in het geheugen opgeslagen, wat betekent dat ze verloren gaan wanneer de applicatie opnieuw wordt opgestart.

Om een ​​zelf-gehoste monitoringoplossing te creëren, moeten we eerst een metrische database kiezen die buiten de Spring Boot-applicatie leeft. In de volgende secties worden slechts enkele van de beschikbare zelfgehoste opties besproken.

Merk op dat elke keer dat Spring Boot een andere metrische database op het klassenpad detecteert, het automatisch het in-memory register uitschakelt.

2.1. InfluxDB

InfluxDB is een open-source tijdreeksdatabase. De snelste manier om met InfluxDB aan de slag te gaan, is door het lokaal uit te voeren als een Docker-container:

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

Houd er rekening mee dat hierdoor metrische gegevens worden opgeslagen in het lokale / tmp partitie. Dit is prima voor ontwikkeling en testen, maar zou geen goede keuze zijn voor productieomgevingen.

Zodra InfluxDB draait, we kunnen onze Spring Boot-applicatie configureren om er metrische gegevens naar te publiceren door de juiste Micrometer-afhankelijkheid toe te voegen:

 io.micrometer micrometer-registry-instroom 

Bovendien moeten we een nieuw item toevoegen aan het application.properties het dossier:

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

Standaard is de databasenaam ingesteld op mydb, terwijl de gebruikersnaam en het wachtwoord niet zijn ingesteld.

We kunnen de standaardwaarden echter overschrijven met behulp van speciale eigenschappen:

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

InfluxDB biedt geen native visualisatietool. Het biedt echter een aparte tool genaamd Chronograph die goed werkt voor het visualiseren van InfluxDB-gegevens.

2.2. Prometheus

Prometheus is een open-source toolkit voor monitoring en alarmering, oorspronkelijk gebouwd op SoundCloud. Het werkt iets anders dan InfluxDB.

In plaats van onze applicatie te configureren om metrische gegevens naar Prometheus te publiceren, we configureren Prometheus om onze applicatie periodiek te pollen.

Eerst configureren we onze Spring Boot-applicatie om een ​​nieuw Prometheus-actuator-eindpunt bloot te leggen. We doen dit door de micrometer-registry-prometheus-afhankelijkheid op te nemen:

 io.micrometer micrometer-registry-prometheus 

Dit zal een nieuw actuator-eindpunt creëren dat metrische gegevens produceert in een speciaal formaat dat Prometheus begrijpt.

Vervolgens moeten we Prometheus configureren om onze applicatie te pollen door onze gewenste configuratie toe te voegen aan een prometheus.yml het dossier.

De volgende configuratie geeft Prometheus de opdracht om onze applicatie elke 5 seconden te pollen, met behulp van het nieuwe actuator-eindpunt:

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

Ten slotte kunnen we een lokale Prometheus-server starten met Docker. Dit veronderstelt dat ons aangepaste configuratiebestand zich in het lokale bestand bevindt /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 biedt zijn eigen visualisatietool voor het bekijken van verzamelde meetgegevens. Het is toegankelijk via de URL // localhost: 9090 /.

2.3. Grafiet

Grafiet is een andere open-source tijdreeksdatabase. De architectuur is iets gecompliceerder dan de andere databases die we hebben bekeken, maar met Docker is het eenvoudig om lokaal een instantie uit te voeren:

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

Vervolgens kunnen we Spring Boot configureren om metrische gegevens naar onze instantie te publiceren door de micrometer-registry-graphite-afhankelijkheid toe te voegen:

 io.micrometer micrometer-register-grafiet 

Evenals het toevoegen van de configuratie-eigenschappen aan application.properties:

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

Net als Prometheus heeft Graphite een eigen visualisatiedashboard. Het is beschikbaar op de URL // localhost /.

3. Visualisatietools

Zodra we een oplossing hebben voor het opslaan van statistieken buiten onze Spring Boot-applicatie, de volgende beslissing is hoe we de gegevens willen visualiseren.

Sommige van de eerder genoemde metrische databases bevatten hun eigen visualisatietools. Er is een stand-alone visualisatietool die de moeite waard is om te bekijken voor onze zelfgehoste monitoringoplossing.

3.1. Grafana

Grafana is een open-source analyse- en monitoringtool. Het kan verbinding maken met alle eerder genoemde databases, evenals met vele andere.

Grafana biedt over het algemeen een betere configuratie en superieure waarschuwingen dan de meeste ingebouwde visualisatietools. Het kan eenvoudig worden uitgebreid met plug-ins en er zijn veel vooraf gebouwde dashboards die kunnen worden geïmporteerd om snel onze eigen visualisaties te maken.

Om Grafana lokaal uit te voeren, kunnen we het starten met Docker:

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

We hebben nu toegang tot de Grafana-startpagina via de URL // localhost: 3000 /.

Op dit punt moeten we een of meer gegevensbronnen configureren. Dit kan een van de metrische databases zijn die eerder zijn besproken of een verscheidenheid aan andere ondersteunde tools.

Zodra een gegevensbron is geconfigureerd, kunnen we een nieuw dashboard bouwen of een dashboard importeren dat doet wat we willen.

4. Conclusie

In dit artikel hebben we gekeken naar het creëren van een zelfgehoste monitoringoplossing voor Spring Boot-applicaties.

We keken naar drie metrische databases die Spring Boot direct ondersteunt en zagen hoe ze lokaal konden worden uitgevoerd.

We hebben ook kort gekeken naar Grafana, een krachtige visualisatietool die metrische gegevens uit verschillende bronnen kan weergeven.