Introduction à Spring Boot Actuator

Salut, Khabrovites! Dans une semaine, les cours commenceront dans le nouveau groupe du cours "Developer on the Spring Framework" . À cet égard, nous partageons avec vous du matériel utile qui indique ce qu'est Spring Actuator et comment il peut être utile.



  1. Qu'est-ce que Spring Actuator?
  2. Comment ajouter Spring Actuator au projet Maven ou Gradle?
  3. Créez un projet Spring Boot avec une dépendance Spring Actuator.
  4. Surveillance des applications avec les points d'extrémité de l'actionneur Spring.

Qu'est-ce que Spring Actuator?

Après avoir développé l'application et l'avoir déployée en production, il est très important de surveiller ses performances. Cela est particulièrement vrai pour les applications stratégiques, telles que les systèmes bancaires, dans lesquelles la défaillance d'une application affecte directement l'entreprise.

Traditionnellement, avant Spring Actuator, nous devions écrire du code pour tester la santé de l'application, mais avec Spring Actuator, nous n'avions pas besoin d'écrire de code. Spring Actuator fournit plusieurs points de terminaison qui peuvent être utiles pour surveiller l'application.

Comment ajouter Spring Actuator au projet Maven ou Gradle?

Maven

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

Gradle

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

Création d'un projet Spring Boot avec Spring Actuator

Allons de l'avant et créons un projet Spring Boot avec les dépendances Spring Actuator, Web et DevTools à l'aide de Spring Initializer .

Veuillez noter qu'au moment d'écrire ces lignes, la version Spring Boot était 2.1.0.



Importez le projet dans Eclipse ou tout autre IDE et exécutez SpringActuatorApplication.java .

Dans la console, vous verrez ce qui suit:



Vous pouvez voir que le Tomcat intégré s'exécute sur le port 8080 et que SpringActuatorApplication s'exécute sur Tomcat. Vous pouvez également voir que les points de terminaison de l'actionneur sont disponibles dans /actuator.

 018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] nbjsSpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823) 2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] osbaeweb.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'. 

Surveillance des applications avec les points d'extrémité de l'actionneur Spring

Comme nous l'avons dit ci-dessus, Spring Actuator fournit plusieurs points de terminaison que nous pouvons utiliser pour surveiller la santé des applications.

IdentifiantLa description
auditevents
Fournit des informations sur les événements
audit pour l'application en cours.
haricotsAffiche une liste complète de tous
Haricots de printemps dans l'application.
cachesCachez les informations.
conditionsAffiche la condition, qui
ont été calculés pour les classes de configuration
et l'autoconfiguration, et les raisons de
qu'ils correspondent ou non
correspondait.
configpropsAffiche une liste de tous
@ConfigurationProperties
envAffiche les propriétés de
Environnement configurable.
voie de migrationAffiche les migrations de base de données
Voie de migration appliquée.
santéAffiche des informations sur la santé
applications.
httptraceAffiche les informations de trace
HTTP (par défaut, les 100 derniers HTTP
demande-réponse).
infoAffiche des informations supplémentaires
sur l'application.
graphique d'intégrationComptez l'intégration du printemps.
bûcheronsAffiche et permet
changer la configuration des enregistreurs
application.
liquibaseAffiche les migrations appliquées
Bases de données Liquibase
métriquesAffiche des informations sur les mesures
pour l'application actuelle.
mappingsAffiche une liste de tous les chemins.
@RequestMapping.
tâches programméesAffiche les tâches planifiées
(tâches planifiées).
séancesPermet de récupérer et de supprimer
sessions utilisateur à partir de référentiels,
soutenu par Spring Session. Non disponible
lors de l'utilisation de session de printemps pour réactif
applications Web.
arrêtPermet à l'application de correctement
pour terminer le travail.
threaddumpAffiche les informations sur le flux.

Activation des points de terminaison

Par défaut, tous les points de terminaison sont activés, sauf l' shutdown . Pour activer le point de terminaison, utilisez la propriété suivante dans le fichier application.properties .

 management.endpoint.<code><</code>id<code>></code>.enabled 

Note du traducteur: par défaut, l'accès à tous les points de terminaison se fait uniquement via JMX, il n'y a pas d'accès via HTTP à tous les points de terminaison (voir ci-dessous).

Un exemple:

Pour activer le point de terminaison d' shutdown , nous devons effectuer l'entrée suivante dans le fichier application.properties :

 management.endpoint.shutdown.enabled=true 

Nous pouvons désactiver tous les points de terminaison, puis inclure uniquement ceux dont nous avons besoin. Dans la configuration suivante, tous les points de terminaison, à l'exception des info seront désactivés.

 management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true 

Accès aux points de terminaison via HTTP

Allons à l'URL de l' hôte local : 8080 / actuator et examinons les points de terminaison disponibles.

Remarque: J'utilise Postman pour les tests car il affiche JSON dans un format bien structuré. Vous pouvez utiliser n'importe quel autre outil ou simplement un navigateur.



Comme vous l'avez déjà remarqué, seuls les points de terminaison d' info et d' info sont affichés ici. Parce que ce sont les seuls points de terminaison accessibles par défaut via http. L'accès via http à d'autres points de terminaison est fermé par défaut pour des raisons de sécurité, car ils peuvent contenir des informations confidentielles et, par conséquent, peuvent être compromis.

Accès à des points de terminaison spécifiques

Si nous voulons fournir un accès via le Web (http) à d'autres points de terminaison, nous devons effectuer les entrées suivantes dans le fichier application.properties .

 management.endpoints.web.exposure.include=<    ><a href="http://localhost:8080/actuator"></a> 

Un exemple :

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

Maintenant, après avoir ajouté l'entrée ci-dessus à application.properties , revenons à http: // localhost: 8080 / actuator

Comme nous le voyons dans la capture d'écran ci-dessous, le point de terminaison env est également inclus.



Accès à tous les terminaux

Si nous voulons inclure tous les points de terminaison, nous pouvons utiliser le signe * comme indiqué ci-dessous.

 management.endpoints.web.exposure.include=* 



Accès à tous, sauf quelques points de terminaison

Les deux entrées ci-dessous activent tous les points de terminaison, mais désactivent le point de terminaison env.

 management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env 





Désactiver tous les points de terminaison HTTP

Si vous ne souhaitez pas fournir de points de terminaison via HTTP, vous pouvez le faire en définissant les éléments suivants dans le fichier application.properties :

 management.server.port=-1 

ou alors:

 management.endpoints.web.exposure.exclude=* 

Configurer des URL pour l'accès aux points de terminaison

Par défaut, tous les points de terminaison sont accessibles via URL /actuator aux adresses de la forme /actuator/{id} . Cependant, vous pouvez modifier le chemin de base /actuator à l'aide de la propriété suivante dans application.properties .

 management.endpoints.web.base-path 

Par exemple, si vous souhaitez créer l'URL de base comme /monitor au lieu de /actuator vous pouvez le faire comme suit:

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



Dans ce cas, tous les points de terminaison seront disponibles en tant que /monitor/{id} au lieu de /actuator/{id}



Actionneur Spring Boot

Discutons de certains des points de terminaison les plus importants.

/ santé

Le point de terminaison d'intégrité donne le statut général de l'application: qu'elle soit opérationnelle ou non. Ceci est très important pour surveiller l'état de l'application lorsqu'elle est en production. Ce point de terminaison peut être intégré aux applications de surveillance et sera très utile pour déterminer la santé des applications en temps réel.

La quantité d'informations fournies par le point de terminaison d'intégrité dépend de la propriété management.endpoint.health.show-details du fichier application.properties .

Si management.endpoint.health.show-details=never , aucune information supplémentaire n'est affichée. Dans ce cas, vous ne verrez que les éléments suivants (c'est le comportement par défaut).



Si management.endpoint.health.show-details=always , des informations supplémentaires sont affichées pour tous les utilisateurs. Comme nous le voyons dans la réponse ci-dessous, nous avons des informations sur l'espace disque (diskSpace). Si votre application est connectée à une base de données, vous verrez également des informations sur l'état de la base de données.



Si management.endpoint.health.show-details=when-authorized , les informations supplémentaires ne seront affichées qu'aux utilisateurs autorisés. L'autorisation peut être configurée à l'aide de la propriété management.endpoint.health.roles .

Indicateurs prédéfinis

Spring Boot Actuator possède de nombreux «indicateurs de santé» configurés automatiquement (HeathIndicators) pour tester la santé de différentes parties de l'application. Par exemple, DiskspaceHealthIndicator fournit des informations sur l'espace disque. Si vous utilisez MongoDB, MongoHealthIndicator vérifiera la base de données Mongo (que le serveur fonctionne ou non) et affiche les informations correspondantes. Par défaut, l'état final de l'application est déterminé par HealthAggregator , qui trie simplement la liste des états fournis par chaque HealthIndicator . Le premier état de la liste triée est utilisé comme état final de l'application.

Désactiver tous les indicateurs préconfigurés

Les «indicateurs de santé» décrits ci-dessus sont activés par défaut, cependant, vous pouvez les désactiver en utilisant la propriété suivante:

 management.health.defaults.enabled=false 

Désactiver un seul indicateur

Alternativement, vous pouvez désactiver un HealthIndicator distinct, comme indiqué ci-dessous, par exemple, pour désactiver la vérification de l'espace disque:

 management.health.diskspace.enabled=false 

Remarque: l'identifiant de tout HealthIndicator sera le nom du bean sans le suffixe HealthIndicator .

Par exemple :

 DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource 

et ainsi de suite ...

Écrire vos indicateurs (HealthIndicator)

Avec le HealthIndicator intégré fourni par le Spring Boot Actuator, nous pouvons créer des indicateurs d'état personnalisés. Pour ce faire, vous devez créer une classe qui implémente l'interface HealthIndicator , implémenter sa méthode health() et renvoyer Health comme réponse avec les informations pertinentes, comme indiqué ci-dessous:

 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code. // int errorCode = performHealthCheck(); if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } } 

Revenons au point final de santé et voyons si notre indicateur est reflété ou non.



Nous voyons notre indicateur.

Statut de composant unique

Vous pouvez également vérifier le statut d'un composant individuel. Dans l'exemple ci-dessus, nous avons vu l'indicateur que nous avons écrit et diskSpace.

Si nous voulons voir uniquement l'état du disque, nous pouvons utiliser l'URL suivante:

http: // localhost: 8080 / actuator / health / diskSpace



/ info

Le point de terminaison info fournit des informations générales sur l'application qu'il reçoit à partir de fichiers tels que build-info.properties ou git.properties , ou à partir des propriétés spécifiées dans application.properties .

Puisqu'il n'y a pas un tel fichier dans notre projet, la réponse sera vide, comme indiqué ci-dessous:



Spring Boot Actuator affiche des informations de génération si META-INF/build-info.properties . Ce fichier d'informations sur le projet est créé au moment de la build-info par la cible build-info . Ici, vous pouvez également ajouter un nombre arbitraire de propriétés supplémentaires.

Ajoutons une cible de build-info pour spring-boot-maven-plugin à pom.xm l.

 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>UTF-8</encoding.source> <encoding.reporting>UTF-8</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin> 

Maintenant, regardons à nouveau le point de terminaison info et voyons les informations d'assembly, comme indiqué ci-dessous:



De plus, nous pouvons ajouter des informations d'application avec la clé info à application.properties , comme indiqué ci-dessous, et elles seront affichées sur le point de terminaison /info .

 info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT 



/ haricots

Le point de terminaison des beans affiche tous les beans définis dans le conteneur Spring avec les informations suivantes sur chaque bean:

 aliases :    scope :   type :    resource :  (),     dependencies :    

Par exemple, j'ai créé un RestController nommé TestController et injecté un composant appelé TestService

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private TestService testService; @GetMapping("/messages") public String getMessage() { return "Hello"; } } import org.springframework.context.annotation.Configuration; @Configuration public class TestService { } 

Vous pouvez voir comment cela est affiché pour testController dans la capture d'écran ci-dessous.



/ configprops
Le configProps affiche tous les @ConfigurationProperties annotés par @ConfigurationProperties .



Dans la capture d'écran ci-dessus, nous voyons deux beans définis dans Spring Framework lui-même et annotés avec @ConfigurationProperties et sont donc affichés à ce point de terminaison.

La capture d'écran ci-dessous montre le code source HttpTraceProperties annoté par @ConfigurationProperties .



/ env

Le point de terminaison env fournit toutes les informations environnementales dans l'ordre suivant:

Propriétés système
Dépendant de la JVM (indépendant de la plateforme)
Environnement système ou variables
environnement
dépend du fonctionnement
système (selon la plate-forme)
Paramètres de niveau d'application
défini dans
application.properties



/ heapdump

Le point de terminaison heapdump vide le tas d'application. Ce point de terminaison renvoie des données binaires au format HPROF. Étant donné que de nombreuses données sont généralement renvoyées, vous devez les enregistrer et les analyser.

/ enregistreurs

Le loggers fournit aux enregistreurs d'applications des informations sur leur niveau de journal configuré (configuréLevel) et leur niveau effectif (effectiveLevel). Si le niveau configuré n'est pas spécifié pour l'enregistreur et son parent (null), alors le niveau de l'enregistreur racine sera un niveau effectif.

La propriété level indique les niveaux de journalisation pris en charge par la structure de journalisation.



Pour obtenir des informations sur un enregistreur spécifique, transmettez le nom (id) de l'enregistreur dans l'URL après le /loggers , comme indiqué ci-dessous:

http: // localhost: 8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication



/ métriques

Le point de terminaison des metrics affiche toutes les métriques que vous pouvez suivre pour votre application.



Vérification des métriques individuelles

Vous pouvez regarder une seule métrique en la transmettant dans l'url après /metrics , comme indiqué ci-dessous:

http: // localhost: 8080 / actuator / metrics / jvm.memory.used



Les références

docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
docs.spring.io/spring-boot/docs/current/actuator-api/html

Selon la tradition établie, nous attendons vos commentaires et invitons tout le monde à la journée portes ouvertes , qui se tiendra le 23 mai.

Source: https://habr.com/ru/post/fr452624/


All Articles