Points de terminaison Spring Boot Actuator

Les points de terminaison Spring Boot Actuator nous permettent de surveiller et d’interagir avec notre application. Spring Actuator est un sous-module de Spring Boot et fournit des points de terminaison intégrés que nous pouvons activer ou désactiver pour notre application.

Les points de terminaison Spring Boot Actuator

sont exposés via JMX et HTTP, la plupart du temps nous utilisons les points de terminaison Actuator basés sur HTTP car ils sont faciles d’accès via le navigateur, les commandes CURL, les scripts shell, etc. Certains des points de terminaison Actuator utiles sont :

  1. beans : ce point de terminaison retourne la liste de tous les beans configurés dans notre application.
  2. env : fournit des informations sur les propriétés de l’environnement Spring.
  3. health : Affiche l’état de santé de l’application
  4. info : Affiche les informations de l’application, que nous pouvons configurer dans les propriétés de l’environnement Spring.
  5. mappings : Affiche la liste de tous les chemins @RequestMapping.
  6. shutdown : nous permet de fermer l’application en toute sécurité.
  7. threaddump : fournit le vidage des threads de l’application.

Vous pouvez obtenir la liste complète des points de terminaison d’actuateur de printemps ici.

Sécurité des points de terminaison d’actuateur de printemps

Seuls les points de terminaison « health » et « info » sont exposés sans aucune sécurité, pour accéder à tous les autres points de terminaison, nous devons configurer notre application pour la sécurité de printemps. C’est très facile à réaliser, nous y arriverons dans la partie suivante du tutoriel.

Activer les points de terminaison d’actuateur de printemps

Lorsque nous ajoutons les dépendances d’actuateur de printemps à notre projet spring boot, cela active automatiquement les points de terminaison d’actuateur. Ajoutez les dépendances suivantes à votre application spring pour activer les points de terminaison d’actuateur de printemps.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Maintenant, lorsque vous exécuterez l’application, vous verrez les points de terminaison d’actuateur être mappés dans les journaux.

2018-06-19 15:23:20.715  INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Notez que seuls deux points de terminaison – health et info – ont été mappés. L’image ci-dessous montre la sortie de ces points de terminaison actuateurs. Avez-vous remarqué qu’il n’y a pas de données dans /actuator/info ? C’est parce que nous ne les avons pas configurées. Ajoutez simplement les propriétés suivantes à votre fichier application.properties.

info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot

Redémarrez l’application et vous obtiendrez la sortie suivante :

Personnalisation du chemin de base des points de terminaison actuateurs

Par défaut, le chemin de base des points de terminaison actuateurs est /actuator. Nous pouvons le modifier en définissant management.endpoints.web.base-path dans le fichier de propriétés de l’application.

management.endpoints.web.base-path=/management

Exposition d’autres points de terminaison actuateurs

Nous pouvons activer et désactiver d’autres points de terminaison actuateurs via des fichiers de propriétés. Si vous souhaitez activer tous les points de terminaison actuateurs, ajoutez la propriété suivante.

management.endpoints.web.exposure.include=*

Pour activer uniquement des points de terminaison d’actionneur spécifiques, fournissez la liste des identifiants des points de terminaison.

management.endpoints.web.exposure.include=health,info,beans,env

Sécurité Spring pour les points de terminaison de l’actionneur

Notez que nous devons ajouter Spring Security à notre application pour activer des points de terminaison supplémentaires car tous les autres points de terminaison nécessitent au moins une authentification de base. Ajoutez la dépendance suivante pour la sécurité Spring dans votre application.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

Ajoutez également le nom d’utilisateur et le mot de passe de sécurité Spring dans le fichier application.properties.

spring.security.user.name=pankaj
spring.security.user.password=pankaj

Redémarrez l’application et vous verrez des points de terminaison supplémentaires être mappés.

2018-06-19 16:18:22.211  INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Maintenant, lorsque vous essayez d’accéder aux points de terminaison sécurisés de l’actionneur, vous devrez fournir des informations d’identification de connexion. Les images ci-dessous montrent la réponse des points de terminaison beans et env/java.home.

Points de terminaison personnalisés de Spring Actuator

Une des grandes caractéristiques du Framework Spring est qu’il est très facile à étendre. Nous pouvons créer nos propres points de terminaison personnalisés en utilisant l’annotation @Endpoint sur une classe. Ensuite, nous devons utiliser les annotations @ReadOperation, @WriteOperation ou @DeleteOperation sur les méthodes pour les exposer en tant que bean de point de terminaison actuateur. Nous pouvons créer des points de terminaison spécifiques à une technologie en utilisant les annotations @JmxEndpoint et @WebEndpoint. Voici un exemple de notre propre point de terminaison personnalisé pour Spring Actuator.

package com.journaldev.spring;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {

	@ReadOperation
	@Bean
	public String hi() {
		return "Hi from custom endpoint";
	}
}

Avez-vous remarqué l’identifiant du point de terminaison ? Nous devons également le configurer dans la liste des points de terminaison actuateur à activer. Mettez à jour les propriétés suivantes dans le fichier application.properties.

management.endpoints.web.exposure.include=health,info,beans,env,myendpoint

Maintenant, lorsque vous démarrerez l’application, vérifiez que ce nouveau point de terminaison est mappé dans les journaux.

2018-06-19 17:06:59.743  INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

L’image ci-dessous montre la sortie lorsque nous invoquons notre point de terminaison actuateur personnalisé.

Résumé

Spring Boot Actuator est un module de gestion et d’information prêt pour la production. Nous pouvons facilement l’étendre pour ajouter nos propres API et gérer notre application.

Vous pouvez télécharger le projet complet depuis notre Dépôt GitHub.

Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints