Gruß, Chabrowiten! In einer Woche beginnt der Unterricht in der neuen Gruppe des Kurses
"Developer on the Spring Framework" . In diesem Zusammenhang teilen wir Ihnen nützliches Material mit, das erklärt, was Spring Actuator ist und wie es nützlich sein kann.

- Was ist ein Federantrieb?
- Wie füge ich Spring Actuator zum Maven- oder Gradle-Projekt hinzu?
- Erstellen Sie ein Spring Boot-Projekt mit einer Spring Actuator-Abhängigkeit.
- Anwendungsüberwachung mit Spring Actuator-Endpunkten.
Was ist ein Federantrieb?Nachdem Sie die Anwendung entwickelt und in der Produktion bereitgestellt haben, ist es sehr wichtig, ihre Leistung zu überwachen. Dies gilt insbesondere für geschäftskritische Anwendungen wie Bankensysteme, bei denen Anwendungsfehler das Geschäft direkt betreffen.
Traditionell mussten wir vor dem Spring Actuator Code schreiben, um den Zustand der Anwendung zu testen, aber mit Spring Actuator mussten wir keinen Code schreiben. Spring Actuator bietet mehrere Endpunkte, die zur Überwachung der Anwendung hilfreich sein können.
Wie füge ich Spring Actuator zum Maven- oder Gradle-Projekt hinzu?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") }
Erstellen eines Spring Boot-Projekts mit Spring ActuatorLassen Sie uns mit dem
Spring Initializer ein Spring Boot-Projekt mit Spring Actuator-, Web- und DevTools-Abhängigkeiten erstellen.
Bitte beachten Sie, dass zum Zeitpunkt dieses Schreibens die Spring Boot-Version 2.1.0 war.

Importieren Sie das Projekt in Eclipse oder eine andere IDE und führen Sie
SpringActuatorApplication.java
.
In der Konsole sehen Sie Folgendes:

Sie können sehen, dass der eingebettete Tomcat auf Port 8080 ausgeführt wird und
SpringActuatorApplication
auf Tomcat ausgeführt wird. Sie können auch sehen, dass die Aktuatorendpunkte unter
/actuator.
verfügbar sind
/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'.
Anwendungsüberwachung mit Spring Actuator-EndpunktenWie oben erwähnt, bietet Spring Actuator mehrere Endpunkte, mit denen wir den Anwendungszustand überwachen können.
Endpunkte aktivierenStandardmäßig sind alle Endpunkte außer dem
shutdown
aktiviert. Verwenden Sie zum Aktivieren des Endpunkts die folgende Eigenschaft in der Datei
application.properties
.
management.endpoint.<code><</code>id<code>></code>.enabled
Anmerkung des Übersetzers: Standardmäßig erfolgt der Zugriff auf alle Endpunkte nur über JMX, es erfolgt kein Zugriff über HTTP auf alle Endpunkte (siehe unten).
Ein Beispiel:Um den Endpunkt zum
shutdown
zu aktivieren, müssen Sie den folgenden Eintrag in der Datei
application.properties
vornehmen:
management.endpoint.shutdown.enabled=true
Wir können alle Endpunkte deaktivieren und dann nur diejenigen einschließen, die wir benötigen. In der nächsten Konfiguration werden alle Endpunkte außer
info
deaktiviert.
management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true
Zugriff auf Endpunkte über HTTPGehen wir zur
localhost- URL: 8080 / actuator und sehen uns die verfügbaren Endpunkte an.
Hinweis: Ich verwende
Postman zum Testen, da JSON in einem gut strukturierten Format angezeigt wird. Sie können jedes andere Tool oder nur einen Browser verwenden.

Wie Sie bereits bemerkt haben, werden hier nur die
health
und
info
Endpunkte angezeigt. Weil dies die einzigen Endpunkte sind, auf die standardmäßig über http zugegriffen werden kann. Der Zugriff über http auf andere Endpunkte ist aus Sicherheitsgründen standardmäßig geschlossen, da diese vertrauliche Informationen enthalten und daher gefährdet sein können.
Zugriff auf bestimmte EndpunkteWenn wir über das Web (http) Zugriff auf andere Endpunkte gewähren möchten, müssen wir die folgenden Einträge in der Datei
application.properties
vornehmen.
management.endpoints.web.exposure.include=< ><a href="http://localhost:8080/actuator"></a>
Ein Beispiel :
management.endpoints.web.exposure.include= health,info,env
Nachdem Sie den obigen Eintrag zu
application.properties
hinzugefügt haben, gehen wir erneut zu
http: // localhost: 8080 / actuatorWie wir im folgenden Screenshot sehen, ist auch der
env
Endpunkt enthalten.
Zugriff auf alle EndpunkteWenn wir alle Endpunkte einschließen möchten, können wir das
*
-Zeichen wie unten gezeigt verwenden.
management.endpoints.web.exposure.include=*
Zugriff auf alle bis auf wenige EndpunkteDie beiden folgenden Einträge aktivieren alle Endpunkte, deaktivieren jedoch den env-Endpunkt.
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env

Deaktivieren aller HTTP-EndpunkteWenn Sie keine Endpunkte über HTTP bereitstellen möchten, können Sie dies tun, indem Sie in der Datei
application.properties
Folgendes festlegen:
management.server.port=-1
oder so:
management.endpoints.web.exposure.exclude=*
Konfigurieren Sie URLs für den Zugriff auf EndpunkteStandardmäßig sind alle Endpunkte über URL
/actuator
an Adressen der Form
/actuator/{id}
zugänglich. Sie können den Basispfad
/actuator
mithilfe der folgenden Eigenschaft in
application.properties
ändern.
management.endpoints.web.base-path
Wenn Sie beispielsweise die Basis-URL wie
/monitor
anstelle von
/actuator
festlegen möchten
/actuator
können Sie dies wie folgt tun:
management.endpoints.web.base-path=/monitor

In diesem Fall sind alle Endpunkte als
/monitor/{id}
anstelle von
/actuator/{id}
verfügbar.
Endpunkte Spring Boot ActuatorLassen Sie uns einige der wichtigsten Endpunkte diskutieren.
/ GesundheitDer Integritätsendpunkt gibt den Gesamtstatus der Anwendung an: ob sie aktiv ist oder nicht. Dies ist sehr wichtig, um den Status der Anwendung während der Produktion zu überwachen. Dieser Endpunkt kann in Überwachungsanwendungen integriert werden und ist sehr nützlich, um den Zustand von Anwendungen in Echtzeit zu bestimmen.
Die vom Integritätsendpunkt bereitgestellte Informationsmenge hängt von der Eigenschaft
management.endpoint.health.show-details
in der Datei
application.properties
.
Wenn
management.endpoint.health.show-details=never
, werden keine zusätzlichen Informationen angezeigt. In diesem Fall wird nur Folgendes angezeigt (dies ist das Standardverhalten).

Wenn
management.endpoint.health.show-details=always
ist, werden allen Benutzern zusätzliche Informationen angezeigt. Wie wir in der Antwort unten sehen, haben wir Informationen zum Speicherplatz (diskSpace). Wenn Ihre Anwendung mit einer Datenbank verbunden ist, werden auch Informationen zum Status der Datenbank angezeigt.

Wenn
management.endpoint.health.show-details=when-authorized
, werden zusätzliche Informationen nur autorisierten Benutzern angezeigt. Die Autorisierung kann mithilfe der Eigenschaft
management.endpoint.health.roles
konfiguriert werden.
Voreingestellte IndikatorenSpring Boot Actuator verfügt über viele automatisch konfigurierte „Integritätsindikatoren“ (HeathIndicators), mit denen der Zustand verschiedener Teile der Anwendung getestet werden kann. Beispielsweise stellt
DiskspaceHealthIndicator
Informationen zum
DiskspaceHealthIndicator
bereit. Wenn Sie MongoDB verwenden, überprüft
MongoHealthIndicator
die Mongo-Datenbank (ob der Server ausgeführt wird oder nicht) und zeigt die entsprechenden Informationen an. Standardmäßig wird der endgültige Status der Anwendung vom
HealthAggregator
, der einfach die Liste der von jedem
HealthIndicator
bereitgestellten Status sortiert. Der erste Status in der sortierten Liste wird als endgültiger Status der Anwendung verwendet.
Deaktivieren aller vorkonfigurierten AnzeigenDie oben beschriebenen „Gesundheitsindikatoren“ sind standardmäßig aktiviert. Sie können sie jedoch mithilfe der folgenden Eigenschaft deaktivieren:
management.health.defaults.enabled=false
Deaktivieren einer einzelnen AnzeigeAlternativ können Sie einen separaten
HealthIndicator
deaktivieren, wie unten gezeigt, um beispielsweise die Überprüfung des Speicherplatzes zu deaktivieren:
management.health.diskspace.enabled=false
Hinweis: Die Kennung eines
HealthIndicator
ist der Name der Bean ohne das
HealthIndicator
Suffix.
Zum Beispiel :
DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource
usw…
Schreiben Ihrer Indikatoren (HealthIndicator)Zusammen mit dem integrierten
HealthIndicator
der vom Spring Boot Actuator bereitgestellt wird, können wir benutzerdefinierte Statusanzeigen erstellen. Dazu müssen Sie eine Klasse erstellen, die die
HealthIndicator
Schnittstelle implementiert, ihre
health()
-Methode implementiert und
Health
als Antwort mit den relevanten Informationen zurückgibt, wie unten gezeigt:
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;
Gehen wir noch einmal zum Gesundheitsendpunkt und sehen, ob unser Indikator reflektiert wird oder nicht.

Wir sehen unseren Indikator.
EinzelkomponentenstatusSie können auch den Status einer einzelnen Komponente überprüfen. Im obigen Beispiel haben wir den von uns geschriebenen Indikator und diskSpace gesehen.
Wenn wir nur den Status der Festplatte sehen möchten, können wir die folgende URL verwenden:
http: // localhost: 8080 / actuator / health / diskSpace
/ infoDer
info
Endpunkt bietet allgemeine Informationen zu der Anwendung, die er von Dateien wie
build-info.properties
oder
git.properties
oder von in
application.properties
angegebenen Eigenschaften erhält.
Da es in unserem Projekt keine solche Datei gibt, ist die Antwort leer, wie unten gezeigt:

Spring Boot Actuator zeigt Build-Informationen an, wenn
META-INF/build-info.properties
. Diese Projektinformationsdatei wird zum Zeitpunkt der
build-info
vom
build-info
Ziel erstellt. Hier können Sie auch eine beliebige Anzahl zusätzlicher Eigenschaften hinzufügen.
spring-boot-maven-plugin
pom.xm
l ein
build-info
Ziel für das
spring-boot-maven-plugin
pom.xm
.
<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>
Schauen wir uns nun den
info
Endpunkt noch einmal an und sehen uns die Baugruppeninformationen an, wie unten gezeigt:

Darüber hinaus können wir Anwendungsinformationen mit dem
info
Schlüssel zu
application.properties
hinzufügen, wie unten gezeigt, und diese werden am Endpunkt
/info
angezeigt.
info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT
/ BohnenDer
beans
Endpunkt zeigt alle im Spring-Container definierten
beans
mit den folgenden Informationen zu jeder Bean an:
aliases : scope : type : resource : (), dependencies :
Zum Beispiel habe ich einen RestController namens
TestController
und eine Komponente namens
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 { }
Wie dies für testController angezeigt wird, sehen Sie im folgenden Screenshot.
/ configpropsDer
configProps
zeigt alle von
@ConfigurationProperties
Anmerkungen versehenen
@ConfigurationProperties
.

Im obigen Screenshot sehen wir zwei Beans, die im Spring Framework selbst definiert und mit
@ConfigurationProperties
kommentiert
@ConfigurationProperties
und daher an diesem Endpunkt angezeigt werden.
Der folgende Screenshot zeigt den von
HttpTraceProperties
mit Anmerkungen versehenen
@ConfigurationProperties
.
/ envDer
env
Endpunkt stellt alle Umgebungsinformationen in der folgenden Reihenfolge bereit:
/ heapdumpDer Heapdump-Endpunkt gibt den Anwendungsheap aus. Dieser Endpunkt gibt Binärdaten im HPROF-Format zurück. Da normalerweise viele Daten zurückgegeben werden, müssen Sie diese speichern und analysieren.
/ LoggerDer
loggers
bietet Anwendungsloggern Informationen zu ihrer konfigurierten Protokollebene (configureLevel) und ihrer effektiven Ebene (effektiveLevel). Wenn die konfigurierte Ebene für den Logger und sein übergeordnetes Element (null) nicht angegeben ist, ist die Root-Logger-Ebene eine effektive Ebene.
Die Eigenschaft
level
gibt an, welche Protokollierungsstufen vom Protokollierungsframework unterstützt werden.

Um Informationen für einen bestimmten Logger zu erhalten, übergeben Sie den Namen (ID) des Loggers in der URL nach dem
/loggers
, wie unten gezeigt:
http: // localhost: 8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication
/ MetrikenDer
metrics
zeigt alle Metriken an, die Sie für Ihre Anwendung verfolgen können.
Überprüfung einzelner MetrikenSie können eine einzelne Metrik
/metrics
, indem Sie sie wie unten gezeigt in der URL after
/metrics
:
http: // localhost: 8080 / actuator /metrics / jvm.memory.used
Referenzendocs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.htmldocs.spring.io/spring-boot/docs/current/actuator-api/htmlGemäß der etablierten Tradition warten wir auf Ihre Kommentare und laden alle zum
Tag der offenen Tür ein , der am 23. Mai stattfinden wird.