Java - Monitoring de la JVM avec Spring Boot

Le problème

JLB a déjà setup un Grafana qui vient s’appuyer sur TimeScale DB et InfluxDB (oui, on s’amuse et alors?).
Steph a une app dev en Java/Spring Boot, et ce serait quand même pas trop mal de monitorer ce qu’il se passe du côté de la JVM.
Spring Boot, qui comme tout framework aime bien nous faciliter la vie, collecte déjà pas mal de metrics et les expose en HTTP ou via la JMX (il s’agit là du composant Actuator.
Actuator expose pas mal de metrics, que l’on peut activer ou désactiver facilement.
Pour ajouter Actuator, suffit d’ajouter la dépendance suivante :

 dependencies {
   compile("org.springframework.boot:spring-boot-starter-actuator")
 }

et de tweaker la config à souhait, cet article est d’ailleurs un guide assez complet.

Donc, vu qu’Actuator fait déjà la moitié du boulot, ce serait bien qu’on puisse facilement récupérer ces données et les stocker dans une base de données time serie non ?

La solution

En vrai c’est tout simple. Une dépendance, de la conf épicétou.
La dépendance en question :

dependencies {
    compile 'io.micrometer:micrometer-registry-influx:latest.release'
}

Un petit extrait de la conf

management.metrics.export.influx.enabled=true
management.metrics.export.influx.uri=https://influx.example.com:8086
management.metrics.export.influx.auto-create-db=false 
management.metrics.export.influx.db=db-name
management.metrics.export.influx.user-name=user-name

Et comme on est des gens bien, le mot de passe on le met pas dans la conf.
En tant que variable d’environement, on passe tout en majuscule et on remplace les points par des underscores:
MANAGEMENT_METRICS_EXPORT_INFLUX_PASSWORD='coucou_c_est_le_password'

Et hop, coté grafana, on peut faire un dashboard comme ci-dessous assez rapidement:
dashboard

Voilà, bisous.