[JAVA] Einführung des Spring Boot Actuator, einer Funktion, die die Bedienung von Spring Boot-Anwendungen erleichtert

Zusammenfassung für diejenigen, die es eilig haben

Welche Funktionen sind für den Systembetrieb erforderlich?

Es ist nicht das Ende der Erstellung eines Systems, aber es ist auch wichtig, es stabil zu betreiben und wie oft es verwendet wird. Selbst bei DevOps und Agile ist es wichtig, nach der Veröffentlichung Feedback zu erhalten und die nächste Strategie zu verfolgen. Was ist Feedback? Nicht nur "Ich möchte, dass Sie dies tun" und "Ich möchte diese Funktion, ich brauche sie nicht" von Benutzern, sondern auch "Ich verwende diese Funktion nicht" oder "Diese Funktion wurde plötzlich verwendet" vom Systembetreiber. Es ist auch wichtig, dies von der Anbieterseite aus zu beachten.

Spring Boot verfügt über eine Funktion namens Spring Boot Actuator, mit der die erforderlichen Informationen im aktuellen System abgerufen werden können. Ich möchte sie daher vorstellen.

Was ist SpringBoot Actuator?

Mit der Erweiterungsfunktion von SpringBoot können Sie leicht verschiedene Informationen erhalten. Typische

Es sind Informationen wie. Details finden Sie unter dem unten stehenden Link.

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html

How to Get Started Es ist einfach, verwenden Sie also Spring Initializr. Die Version von Spring Boot verwendet diesmal 2.3.0 M1. Wählen Sie Spring Web und Spring Boot Actuator für Abhängigkeiten aus. image.png

Drücken Sie nach Abschluss der Einstellungen Genarate, um die Quellcodevorlage herunterzuladen. Wenn Sie fertig sind, entpacken Sie es und öffnen Sie es in Ihrer bevorzugten IDE.

Wenn Sie sich pom.xml ansehen, sehen Sie, dass die abhängigen Bibliotheken für SpringBoot Actuator aufgelistet sind.

pom.xml


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

Die Informationen, die mit dieser Funktion gelernt werden können, können nützliche Informationen für Angreifer sein, die Schwachstellen ausnutzen. Daher ist die Funktion standardmäßig deaktiviert. Ändern Sie die Anwendungseinstellungen, um sie zu aktivieren.

application.properties


management.endpoints.enabled-by-default=true
management.endpoints.web.exposure.include=*

management.endpoints.enabled-by-default legt die Verfügbarkeit der Informationserfassung standardmäßig fest. management.endpoints.web.exposure.include ist eine Einstellung, die REST-Endpunkte aktiviert. Ersteres ist auf true gesetzt und kann standardmäßig abgerufen werden, und letzteres wird auf * gesetzt, in dem Sinne, dass es für alle Endpunkte aktiviert ist.

Nach dem Einstellen erstellen und starten. Sie können der normalen Spring Boot App folgen.

Erstellen Sie mit mvn package und beginnen Sie mit java -jar target / demo-0.0.1-SNAPSHOT.jar.

Versuchen Sie nach dem Start, auf http: // localhost: 8080 / actuator / zuzugreifen. Anschließend können Sie die Endpunktliste in JSON abrufen.

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
    }
  }
}

Da die Menge groß ist, werde ich nicht alles erklären, aber wenn es zum Beispiel Gesundheit ist, zeigt es, dass der Lebens- und Todeszustand der Anwendung mit diesem Endpunkt als Gesundheitsprüfungsfunktion erfasst werden kann.

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"
}

Eine andere Möglichkeit, Umweltinformationen abzurufen, besteht darin, sie auf einem Endpunkt namens env zu veröffentlichen.

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"
        },
Unten weggelassen.

Wenn Sie hier schauen, was ist das Betriebssystem, was ist die Java-Implementierung, Version und Zeichenkodierung? Sie können Informationen wie erhalten.

Darüber hinaus sind Beans, die eine Liste der registrierten Beans und Konfigurationsprops abrufen können, die den festgelegten Inhalt abrufen können, praktisch, um die Umgebung zum Zeitpunkt der üblichen Fehlerbehebung zu überprüfen.

Erweiterte Version

Bisher haben wir nur Endpoint eingeführt, das standardmäßig bereitgestellt wird. Sie können es jedoch anpassen. Wenn Sie etwas speziell in der App zurückgeben möchten, können Sie einen Endpunkt erstellen und ihn einfach in JSON zurückgeben. Ich werde das Beispiel hier weglassen. Wenn Sie dies tun möchten, lesen Sie bitte den offiziellen Leitfaden.

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints-custom

Zusammenfassung

Was haben Sie gedacht? Dieses Mal konnte ich nicht herausfinden, wie ich die Betriebsstatistikinformationen darüber abrufen kann, wie viele Funktionen wie erforderlich in DevOps verwendet werden, aber ich hoffe, Sie können sich vorstellen, dass es einfach zu sein scheint, die Umgebungsinformationen abzurufen. Wenn Sie die (?) Spring Boot-App Spring Boot Actuator nicht installiert haben, versuchen Sie es bitte.

Recommended Posts

Einführung des Spring Boot Actuator, einer Funktion, die die Bedienung von Spring Boot-Anwendungen erleichtert
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Ein Memo, das Spring Boot berührte
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
Eine Geschichte, die mich bedauerte, als während der Entwicklung der Spring Boot-App eine "NotReadablePropertyException" auftrat.
Stellen Sie sich RxJava als eine Bibliothek vor, die das Schreiben von asynchroner Verarbeitung erleichtert
Rufen Sie den in der Controller-Klasse von Spring Boot definierten Pfad als Liste ab
Ressourcenhandler-Einstellungen bei der Bereitstellung von SPA mit der statischen Ressourcenfunktion von Spring Boot
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
Lassen Sie uns einen Leistungsschalter für den Backend-Service mit Actuator of Spring Boot (Teil 1) herstellen.
[Spring Boot] Die Geschichte, dass die Bean der Klasse mit der Annotation ConfigurationProperties nicht gefunden wurde
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Eine Übersicht über die Spring Framework Resource-Oberfläche
Eine Aufzeichnung über das Studium des Spring Framework von Grund auf neu
Ich habe eine Antwortfunktion für die Erweiterung Rails Tutorial (Teil 4) erstellt: Eine Funktion, die den Benutzer einzigartig macht
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Stellen Sie Spring Boot-Anwendungen für Heroku bereit, ohne die Heroku-CLI zu verwenden
Beschleunigen Sie das Testen von Validatoren, für die DI im Spring Boot erforderlich ist
Überprüfen Sie die Funktion von zwei Rollen mit einer Chat-Anwendung
Lassen Sie uns das Betriebsbild (Atmosphäre) des DI-Containers von Spring erfassen
Ein Hinweis zum Seed-Feature von Ruby on Rails
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
Einführung von Spring Boot2, einem Java-Framework für die Webentwicklung (für Anfänger)
Einführung der Bibliothek ff4j, die Feature Toggle mit Spring Boot realisiert
Ich habe eine GitHub-Aktion erstellt, die es einfach macht, das Ausführungsergebnis von RSpec zu verstehen