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 :
- beans : ce point de terminaison retourne la liste de tous les beans configurés dans notre application.
- env : fournit des informations sur les propriétés de l’environnement Spring.
- health : Affiche l’état de santé de l’application
- info : Affiche les informations de l’application, que nous pouvons configurer dans les propriétés de l’environnement Spring.
- mappings : Affiche la liste de tous les chemins @RequestMapping.
- shutdown : nous permet de fermer l’application en toute sécurité.
- 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