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.

- Qu'est-ce que Spring Actuator?
- Comment ajouter Spring Actuator au projet Maven ou Gradle?
- Créez un projet Spring Boot avec une dépendance Spring Actuator.
- 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 ActuatorAllons 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 SpringComme nous l'avons dit ci-dessus, Spring Actuator fournit plusieurs points de terminaison que nous pouvons utiliser pour surveiller la santé des applications.
Activation des points de terminaisonPar 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 HTTPAllons à 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écifiquesSi 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 / actuatorComme nous le voyons dans la capture d'écran ci-dessous, le point de terminaison
env
est également inclus.
Accès à tous les terminauxSi 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 terminaisonLes 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 HTTPSi 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 terminaisonPar 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 BootDiscutons 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éfinisSpring 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ésLes «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 indicateurAlternativement, 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;
Revenons au point final de santé et voyons si notre indicateur est reflété ou non.

Nous voyons notre indicateur.
Statut de composant uniqueVous 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
/ infoLe 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
/ haricotsLe 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.
/ configpropsLe
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
.
/ envLe point de terminaison
env
fournit toutes les informations environnementales dans l'ordre suivant:
/ heapdumpLe 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.
/ enregistreursLe
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étriquesLe point de terminaison des
metrics
affiche toutes les métriques que vous pouvez suivre pour votre application.
Vérification des métriques individuellesVous 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érencesdocs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.htmldocs.spring.io/spring-boot/docs/current/actuator-api/htmlSelon la tradition établie, nous attendons vos commentaires et invitons tout
le monde à
la journée portes ouvertes , qui se tiendra le 23 mai.