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 terminaux
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 terminaison
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 HTTP
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 Boot
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 / info
/ 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 
 / haricots
/ 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.
 / configprops
/ 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 .
 / env
/ envLe point de terminaison 
env fournit toutes les informations environnementales dans l'ordre suivant:
 / heapdump
/ 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étriques
/ métriquesLe point de terminaison des 
metrics affiche toutes les métriques que vous pouvez suivre pour votre application.
 Vérification des métriques individuelles
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/html
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.