Ce n'est pas la fin de la création d'un système, mais il est également important de le faire fonctionner de manière stable et de savoir dans quelle mesure il est utilisé. Même avec DevOps et Agile récent, il est important d'obtenir des commentaires après la sortie et d'adopter la stratégie suivante. Qu'est-ce que les commentaires? Non seulement "Je veux que vous fassiez ceci" et "Je veux cette fonction, je n'en ai pas besoin" des utilisateurs, mais aussi "Je n'utilise pas cette fonction" ou "Cette fonction a soudainement commencé à être utilisée" de l'opérateur système. Il est également important de le remarquer du côté du fournisseur.
Spring Boot a une fonction appelée Spring Boot Actuator, qui est une fonction permettant d'obtenir les informations nécessaires dans ce dernier système actuel, je voudrais donc l'introduire.
Avec la fonction d'extension de SpringBoot, vous pouvez facilement obtenir diverses informations. Typiques
-Est-ce que l'application fonctionne? (Bilan de santé) --Paramètres de la JVM --Paramètres de l'application
Ce sont des informations telles que. Les détails peuvent être trouvés sur le lien ci-dessous.
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html
How to Get Started C'est facile, alors utilisez Spring Initializr. La version de Spring Boot utilise cette fois la 2.3.0 M1. Sélectionnez Spring Web et Spring Boot Actuator pour les dépendances.
Une fois les réglages terminés, appuyez sur Genarate pour télécharger le modèle de code source. Lorsque vous avez terminé, décompressez-le et ouvrez-le dans votre IDE préféré.
Si vous regardez pom.xml, vous pouvez voir que les bibliothèques dépendantes de SpringBoot Actuator sont répertoriées.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Les informations qui peuvent être apprises avec cette fonction peuvent être des informations utiles pour les attaquants qui exploitent des vulnérabilités, la fonction est donc désactivée par défaut. Modifiez les paramètres de l'application pour l'activer.
application.properties
management.endpoints.enabled-by-default=true
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default définit la disponibilité de l'acquisition d'informations par défaut, management.endpoints.web.exposure.include est un paramètre qui active les points de terminaison REST. Le premier est défini sur true et peut être obtenu par défaut, et le second est défini sur * dans le sens où il est activé pour tous les points de terminaison.
Après la configuration, créez et démarrez. Vous pouvez suivre l'application Spring Boot normale.
Construisez avec mvn package '' et commencez par
java -jar target / demo-0.0.1-SNAPSHOT.jar ''.
Une fois démarré, essayez d'accéder à `` http: // localhost: 8080 / actuator / ''. Ensuite, vous pouvez obtenir la liste des points de terminaison dans JSON.
curl http://localhost:8080/actuator | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1659 0 1659 0 0 162k 0 --:--:-- --:--:-- --:--:-- 162k
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:8080/actuator/beans",
"templated": false
},
"caches-cache": {
"href": "http://localhost:8080/actuator/caches/{cache}",
"templated": true
},
"caches": {
"href": "http://localhost:8080/actuator/caches",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
},
"conditions": {
"href": "http://localhost:8080/actuator/conditions",
"templated": false
},
"shutdown": {
"href": "http://localhost:8080/actuator/shutdown",
"templated": false
},
"configprops": {
"href": "http://localhost:8080/actuator/configprops",
"templated": false
},
"env": {
"href": "http://localhost:8080/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://localhost:8080/actuator/env/{toMatch}",
"templated": true
},
"loggers-name": {
"href": "http://localhost:8080/actuator/loggers/{name}",
"templated": true
},
"loggers": {
"href": "http://localhost:8080/actuator/loggers",
"templated": false
},
"heapdump": {
"href": "http://localhost:8080/actuator/heapdump",
"templated": false
},
"threaddump": {
"href": "http://localhost:8080/actuator/threaddump",
"templated": false
},
"metrics-requiredMetricName": {
"href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
"templated": true
},
"metrics": {
"href": "http://localhost:8080/actuator/metrics",
"templated": false
},
"scheduledtasks": {
"href": "http://localhost:8080/actuator/scheduledtasks",
"templated": false
},
"mappings": {
"href": "http://localhost:8080/actuator/mappings",
"templated": false
}
}
}
Comme le montant est important, je ne vais pas tout expliquer, mais par exemple, s'il s'agit de santé, cela montre que l'état de vie et de mort de l'application peut être acquis avec ce point de terminaison en tant que fonction de contrôle de santé.
curl http://localhost:8080/actuator/health | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 0 15 0 0 35 0 --:--:-- --:--:-- --:--:-- 35
{
"status": "UP"
}
Une autre façon d'obtenir des informations environnementales consiste à les publier sur un point de terminaison appelé env.
curl http://localhost:8080/actuator/env | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12493 0 12493 0 0 154k 0 --:--:-- --:--:-- --:--:-- 154k
{
"activeProfiles": [],
"propertySources": [
{
"name": "server.ports",
"properties": {
"local.server.port": {
"value": 8080
}
}
},
{
"name": "servletContextInitParams",
"properties": {}
},
{
"name": "systemProperties",
"properties": {
"java.runtime.name": {
"value": "OpenJDK Runtime Environment"
},
"java.protocol.handler.pkgs": {
"value": "org.springframework.boot.loader"
},
"sun.boot.library.path": {
"value": "/Users/user/.sdkman/candidates/java/8.0.212-amzn/jre/lib"
},
"java.vm.version": {
"value": "25.212-b04"
},
"gopherProxySet": {
"value": "false"
},
"java.vm.vendor": {
"value": "Amazon.com Inc."
},
"java.vendor.url": {
"value": "https://aws.amazon.com/corretto/"
},
"path.separator": {
"value": ":"
},
"java.vm.name": {
"value": "OpenJDK 64-Bit Server VM"
},
"file.encoding.pkg": {
"value": "sun.io"
},
"user.country": {
"value": "JP"
},
"sun.java.launcher": {
"value": "SUN_STANDARD"
},
"sun.os.patch.level": {
"value": "unknown"
},
"PID": {
"value": "59317"
},
"java.vm.specification.name": {
"value": "Java Virtual Machine Specification"
},
"user.dir": {
"value": "/Users/user/oper/spring/spring-docker"
},
"java.runtime.version": {
"value": "1.8.0_212-b04"
},
"java.awt.graphicsenv": {
"value": "sun.awt.CGraphicsEnvironment"
},
"java.endorsed.dirs": {
"value": "/Users/user/.sdkman/candidates/java/8.0.212-amzn/jre/lib/endorsed"
},
"os.arch": {
"value": "x86_64"
},
"java.io.tmpdir": {
"value": "/var/folders/1m/v_pnk3kd3hj0558d1z3nsnzh0000gn/T/"
},
"line.separator": {
"value": "\n"
},
"java.vm.specification.vendor": {
"value": "Oracle Corporation"
},
"os.name": {
"value": "Mac OS X"
},
"sun.jnu.encoding": {
"value": "UTF-8"
},
Omis ci-dessous.
Si vous regardez ici, quel est le système d'exploitation, quelle est l'implémentation, la version et l'encodage de caractères Java? Vous pouvez obtenir des informations telles que.
De plus, les Beans qui peuvent obtenir une liste des beans enregistrés et des configprops qui peuvent obtenir le contenu défini sont pratiques pour vérifier l'environnement au moment du dépannage habituel.
Jusqu'à présent, nous n'avons introduit que Endpoint, qui est fourni par défaut, mais vous pouvez le personnaliser. S'il y a quelque chose que vous souhaitez renvoyer spécialement dans l'application, vous pouvez créer un point de terminaison et le renvoyer facilement dans JSON. Je vais omettre l'exemple ici, donc si vous voulez le faire, veuillez consulter le guide officiel.
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints-custom
Qu'as-tu pensé? Cette fois, je n'ai pas pu trouver comment obtenir les informations statistiques de fonctionnement sur la quantité de fonctions telles que nécessaires utilisées dans DevOps, mais j'espère que vous pouvez penser qu'il semble facile d'obtenir les informations environnementales. Si vous n'avez pas installé l'application (?) Spring Boot, Spring Boot Actuator, veuillez l'essayer.
Recommended Posts