Si vous n'avez jamais utilisé Spring Boot auparavant je vous conseille de lire mon article sur le sujet .
Libre à vous de choisir comment suivre vos applications : endpoints HTTP, JMX, shell distant via telnet ou SSH. Dans cet article je vais plutôt me concentrer sur les endpoints HTTP.
Configuration
Commençons par ajouter la dépendance spring-boot-starter dans notre build Gradle (ou Maven).
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.1.5.RELEASE")
compile("org.springframework.boot:spring-boot-starter-actuator:1.1.5.RELEASE")
}
En fait vous n'avez pas besoin d'en faire plus pour accéder aux éléments exposés par défaut.
Endpoint HTTP
Pour suivre la mode actuelle, où l'on aime le web et le format JSON..., Spring peut exposer les métriques de l'application via HTTP. Par défaut plusieurs Endpoints sont définis et vous pouvez ainsi suivre les métriques de votre application via un navigateur (enfin... si vous savez lire le json condensé)
Vous voulez faire un thread dump? Lancez votre navigateur et lancez l'URL de votre application en la suffixant par dump. Par exemple http://localhost:8080/dump
Voici un récapitulatif de ce que vous pouvez suivre. A chaque fois je vous ai mis un lien pour vous montrer un exemple de ce que l'on peut voir
autoconfig : affiche un rapport montrant les objets pouvant bénéficier de la configuration automatique et ceux qui le sont ou ne le sont pas (voir exemple)
beans : affiche la liste des beans Spring (voir exemple)
configprops : affiche la liste de la configuration externalisée de votre application les @ConfigurationProperties (voir exemple)
dump : effectue un dump des threads (voir exemple)
env : affiche toutes les propriétés chargées par Spring environnement ou non (voir exemple)
info : affiche des informations que vous spécifiez dans un fichier application.properties (vide par défaut)
health : montre l'état de l'application (voir exemple)
metrics : différentes métriques liées à l'application (voir exemple)
mappings : toutes les URL accessibles, recense les @RequestMapping (voir exemple)
trace : affiche les logs de l'application, par défaut les requêtes HTTP (voir exemple)
Ajouter ses propres informations
Bien souvent dans les rapports de suivi d'une application, nous avons besoin de rajouter certaines informations spécifiques.
Vous pouvez le faire en ajoutant des données dans un fichier application.properties placé dans les ressources de l'application. Par exemple
info.application-name=Test Springboot info.javamind-article=http://javamind-fr.blogspot.fr/search/label/Spring%20Boot
L'URL http://localhost:8080/info donnera comme résultat
{ "application-name": "Test Springboot", "javamind-article": "http://javamind-fr.blogspot.fr/search/label/Spring%20Boot" }
Créer son propre rapport de santé
Un truc que je trouve très intéressant, c'est de pouvoir rajouter facilement vos propres rapports aux éléments proposés par défaut.
La page http://localhost:8080/health permet d'afficher le statut de l'application et de détailler ce qu'il se passe. Par défaut nous avons
{"status":"UP"}
Nous allons implémenter notre propre indicateur
@Component public class MyOwnIndicator implements HealthIndicator { @Override public Health health() { return Health.up() .withDetail("test de javamind", "Super green") .withDetail("test database", "OK call in 10ms") .build(); } }
L'interface fluent permet de facilement spécifier ce qu'il se passe sur le statut général (up(), down()..) et de spécifier les détails des tests avec la méthode withDetail(...).
L'URL http://localhost:8080/health donne maintenant
{ "status":"UP", "test de javamind":"Super green", "test database":"OK call in 10ms" }
Ajoutons un second indicateur qui annonce un problème dans l'application
@Component public class MySecondIndicator implements HealthIndicator { @Override public Health health() { return Health.down(new RuntimeException("Erreur lors de l'execution")) .withDetail("test sauvegarde", "KO pb disque") .build(); } }
Nous avons le résultat suivant
{ "status":"DOWN", "myOwnIndicator": { "status":"UP", "test de javamind":"Super green", "test database":"OK call in 10ms" }, "mySecondIndicator": { "status":"DOWN", "error":"java.lang.RuntimeException: Erreur lors de l'execution", "test sauvegarde":"KO pb disque" } }
L'application est passée au statut DOWN car le deuxième test génère une erreur
Pour aller plus loin
Comme d'habitude la documentation de Spring est assez riche. Une autre fonctionnalité dont je n'ai pas parlé ici, c'est que Spring Boot scanne votre configuration. Si par exemple une datasource est trouvée, il rajoutera automatiquement l'exposition du statut de la base.
Vous pouvez voir les exemples exposés sur mon github

Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.