Surveillance auto-hébergée pour les applications Spring Boot

1. Introduction

L'une des nombreuses fonctionnalités intéressantes de Spring Boot est l'ensemble d'actionneurs intégrés. Ces actionneurs offrent un moyen facile de surveiller et de contrôler à peu près tous les aspects d'une application Spring Boot.

Dans ce didacticiel, nous examinerons l'utilisation de l'actionneur de métriques pour créer une solution de surveillance auto-hébergée pour les applications Spring Boot.

2. Base de données de métriques

La première partie de la surveillance des applications Spring Boot consiste à choisir une base de données de métriques . Par défaut, Spring Boot configurera un registre de métriques Micrometer dans chaque application.

Cette implémentation par défaut collecte un ensemble prédéfini de métriques d'application telles que l'utilisation de la mémoire et du processeur, les requêtes HTTP et quelques autres. Mais ces métriques sont stockées uniquement en mémoire , ce qui signifie qu'elles seront perdues à chaque redémarrage de l'application.

Pour créer une solution de surveillance auto-hébergée, nous devons d'abord choisir une base de données de métriques qui vit en dehors de l'application Spring Boot. Les sections suivantes ne traiteront que de quelques-unes des options auto-hébergées disponibles.

Notez que chaque fois que Spring Boot détecte une autre base de données de métriques sur le chemin de classe, il désactive automatiquement le registre en mémoire.

2.1. InfluxDB

InfluxDB est une base de données de séries chronologiques open source. Le moyen le plus rapide de démarrer avec InfluxDB est de l'exécuter localement en tant que conteneur Docker:

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

Notez que cela stockera les métriques dans la partition locale / tmp . C'est bien pour le développement et les tests, mais ce ne serait pas un bon choix pour les environnements de production.

Une fois qu'InfluxDB est en cours d'exécution, nous pouvons configurer notre application Spring Boot pour y publier des métriques en ajoutant la dépendance Micrometer appropriée :

 io.micrometer micrometer-registry-influx 

De plus, nous devons ajouter une nouvelle entrée au fichier application.properties :

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

Hors de la boîte, le nom de la base de données est défini sur mydb , tandis que le nom d'utilisateur et le mot de passe restent inchangés.

Cependant, nous pouvons remplacer les valeurs par défaut en utilisant des propriétés dédiées:

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

InfluxDB ne fournit pas d'outil de visualisation natif . Cependant, il fournit un outil distinct appelé Chronographe qui fonctionne bien pour visualiser les données InfluxDB.

2.2. Prométhée

Prometheus est une boîte à outils open-source de surveillance et d'alerte conçue à l'origine chez SoundCloud. Cela fonctionne légèrement différemment d'InfluxDB.

Au lieu de configurer notre application pour publier des métriques sur Prometheus, nous configurons Prometheus pour interroger périodiquement notre application .

Tout d'abord, nous configurons notre application Spring Boot pour exposer un nouveau point de terminaison d'actionneur Prometheus. Nous faisons cela en incluant la dépendance micromètre-registre-prométhée:

 io.micrometer micrometer-registry-prometheus 

Cela créera un nouveau point de terminaison d'actionneur qui produira des données de métriques dans un format spécial que Prometheus comprend.

Ensuite, nous devons configurer Prometheus pour interroger notre application en ajoutant la configuration souhaitée dans un fichier prometheus.yml .

La configuration suivante demande à Prometheus d'interroger notre application toutes les 5 secondes, en utilisant le nouveau point de terminaison de l'actionneur:

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

Enfin, nous pouvons démarrer un serveur Prometheus local à l'aide de Docker. Cela suppose que notre fichier de configuration personnalisé se trouve dans le fichier local /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 fournit son propre outil de visualisation pour visualiser les métriques collectées. Il est accessible à l'URL // localhost: 9090 /.

2.3. Graphite

Graphite est une autre base de données de séries chronologiques open source. Son architecture est légèrement plus compliquée que les autres bases de données que nous avons examinées, mais avec Docker, il est simple d'exécuter une instance localement:

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

Ensuite, nous pouvons configurer Spring Boot pour publier des métriques sur notre instance en ajoutant la dépendance micromètre-registre-graphite:

 io.micrometer micrometer-registry-graphite 

En plus d'ajouter les propriétés de configuration à application.properties :

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

Comme Prometheus, Graphite comprend son propre tableau de bord de visualisation. Il est disponible à l'URL // localhost / .

3. Outils de visualisation

Une fois que nous avons une solution pour stocker des métriques en dehors de notre application Spring Boot, la prochaine décision est de savoir comment nous voulons visualiser les données .

Certaines des bases de données de métriques mentionnées précédemment incluent leurs propres outils de visualisation. Il existe un outil de visualisation autonome qui vaut la peine d'être examiné pour notre solution de surveillance auto-hébergée.

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.

Une fois qu'une source de données est configurée, nous pouvons créer un nouveau tableau de bord ou en importer un qui fait ce que nous voulons.

4. Conclusion

Dans cet article, nous avons examiné la création d'une solution de surveillance auto-hébergée pour les applications Spring Boot.

Nous avons examiné trois bases de données de métriques que Spring Boot prend facilement en charge et avons vu comment les exécuter localement.

Nous avons également examiné brièvement Grafana, un outil de visualisation puissant qui peut afficher des données de métriques provenant de diverses sources.