[JAVA] Présentation de Spring Boot Actuator, une fonctionnalité qui facilite l'utilisation des applications Spring Boot

Résumé pour les plus pressés

Quelles sont les fonctions requises pour le fonctionnement du système?

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.

Qu'est-ce que SpringBoot Actuator?

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. image.png

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.

Version avancée

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

Résumé

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

Présentation de Spring Boot Actuator, une fonctionnalité qui facilite l'utilisation des applications Spring Boot
Une histoire remplie des bases de Spring Boot (résolu)
Un mémo qui a touché Spring Boot
Obtenez une instance proxy du composant lui-même dans Spring Boot
Une histoire qui m'a fait regretter quand une "NotReadablePropertyException" s'est produite pendant le développement de l'application Spring Boot.
Considérez RxJava comme une bibliothèque qui facilite l'écriture du traitement asynchrone
Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
Paramètres du gestionnaire de ressources lors de la livraison du SPA avec la fonction de ressource statique de Spring Boot
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Vérifions la sensation de Spring Boot + Swagger 2.0
Faisons un disjoncteur pour le service backend à l'aide de l'actionneur de Spring Boot (partie 1)
[Spring Boot] L'histoire selon laquelle le bean de la classe avec l'annotation ConfigurationProperties n'a pas été trouvé
Un mémorandum de dépendance à Spring Boot2 x Doma2
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Une note de révision de l'interface Spring Framework Resource
Un record d'étude du Spring Framework à partir de zéro
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 4): une fonction qui rend l'utilisateur unique
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
Déployez des applications Spring Boot sur Heroku sans utiliser la CLI Heroku
Accélérez les tests des validateurs qui nécessitent DI dans Spring Boot
Vérifier le fonctionnement de deux rôles avec une application de chat
Saisissons l'image de fonctionnement (atmosphère) du conteneur DI de Spring
Une note sur la fonction de départ de Ruby on Rails
Un programme qui compte le nombre de mots dans une liste
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)
Introduction de la bibliothèque ff4j qui réalise le basculement de fonctionnalités avec Spring Boot
J'ai créé une action GitHub qui facilite la compréhension du résultat de l'exécution de RSpec