JHipster Health Check

JHipster est un générateur d’applications qui se base (entre autre) sur Spring Boot et met à profit les nombreuses fonctionnalités transverses offertes par ce framework.

En particulier, Spring Boot Actuator met à disposition un indicateur de bonne santé de l’application, autrement appelé Health Check.

Cet indicateur peut être très facilement mis à profit dans un système de supervision classique (Shinken, Zabbix), ou un orchestrateur de conteneurs qui a besoin de connaitre l’état des noeuds afin de les redémarrer automatiquement en cas de crash (environnement Kubernetes par exemple).

(A noter que JHipster intègre plusieurs solutions de supervision. Pour en savoir plus).

Présentation de l’écran de diagnostic JHipster

Lorsqu’on se connecte en tant qu’administrateur à une application JHipster, on peut consulter cet indicateur de bonne santé à l’aide du menu Administration > Diagnostics

image3

Cela nous affiche une page comme ceci.

image5

On remarque qu’il y a en fait plusieurs indicateurs de bonne santé :

  • Espace disque
  • Couchbase (en fait il s’agit ici d’une application utilisant Couchbase comme système de persistence)

Actuator health

Pour fournir ces indicateurs, JHipster se base sur Spring Boot Actuator.

Actuator expose un ensemble d’indicateurs opérationnels au travers de différents Endpoints .
L’écran de diagnostic JHipster que l’on a présenté plus haut fait appel à un Endpoint particulier nommé health.

Par défaut le endpoint health est accessible à l’URL /health mais dans JHipster ce mapping a été redéfini en /management/health.

Si on appelle l’URL /management/health de notre application, voilà ce que l’on obtient :

image7

Le résultat est un document json tout simple indiquant le statut UP ou DOWN.

Mais lorsque l’URL /management/health est appelée depuis l’écran de diagnostic, on obtient des informations plus détaillées relatives à l’espace disque et à l’état de la base de données.

image2

Cela vient du fait que lorsqu’on accède à /management/health depuis l’écran de diagnostic, on le fait en étant identifié administrateur. On remarque donc que le Endpoint Actuator health ne se comporte pas de la même manière selon que l’on est identifié ou anonyme (cela est bien expliqué dans la documentation Spring).

Personnalisation des indicateurs de bonne santé

Spring Boot Actuator donne la possibilité d’étendre le endpoint heath simplement pour maîtriser l’indicateur de bonne santé au niveau applicatif. Il suffit de suivre la documentation.

À titre d’exemple, ci-dessous, voici comment ajouter un indicateur au endpoint health qui va de façon aléatoire indiquer que l’application est en bonne santé ou non.

@Component
public class MyApplicationHealthIndicator extends AbstractHealthIndicator {

   @Override
   protected void doHealthCheck(Health.Builder builder) throws Exception {
      
       // Generate a random status
       boolean isOk = Math.random() < 0.5;
      
       if (isOk) {
           builder.up().withDetail("commentaire","Ca va bien");
       } else {
           builder.down().withDetail("commentaire","C'est pas bon signe");
       }
   }
}

Si on revient maintenant dans l’écran de diagnostic JHipster on voit maintenant notre nouvel indicateur de bonne santé. En l’occurrence dans l’image suivante, cet indicateur est DOWN.

image8

Dans l’écran ci-dessous, on montre la requête HTTP correspondante ; elle renvoie un code retour 503 et un document json avec un statut DOWN pour l’indicateur myApplication.

image1

Consultation via JMX

Il est intéressant de noter que les Endpoint Actuator sont exposés sous forme de MBeans JMX.

Ci-dessous, une copie d’écran VisualVM nous montre le MBean correspondant au Endpoint health.

image6

Retour d’expérience

Cet article a été écrit dans le cadre d’un projet de déploiement d’une application JHipster sur OpenShift.
Dans ce contexte, il est important de disposer de Health Checks pertinents car Kubernetes se base sur ces indicateurs pour évaluer l’état de santé des noeuds et les orchestrer en conséquence.

Ci-dessous un extrait d’écran OpenShift nous montre les deux indicateurs Readiness Probe et Liveness Probe se basant sur le health check mis à disposition par Spring Boot Actuator.

image4-1

Dans la phase de déploiement de l'application il est donc appréciable de disposer d’un tel indicateur “out of the box”. Il est encore plus appréciable que JHipster prenne en compte plusieurs indicateurs spontanément comme par exemple la disponibilité de la base de données (Couchbase dans notre cas).