Einführung in Spring Boot Actuator

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.



  1. Was ist ein Federantrieb?
  2. Wie füge ich Spring Actuator zum Maven- oder Gradle-Projekt hinzu?
  3. Erstellen Sie ein Spring Boot-Projekt mit einer Spring Actuator-Abhängigkeit.
  4. 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 Actuator

Lassen 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-Endpunkten

Wie oben erwähnt, bietet Spring Actuator mehrere Endpunkte, mit denen wir den Anwendungszustand überwachen können.

IDBeschreibung
auditevents
Bietet Ereignisinformationen
Audit für die aktuelle Anwendung.
BohnenZeigt eine vollständige Liste aller an
Frühlingsbohnen in der Anwendung.
CachesCache-Informationen.
BedingungenZeigt den Zustand an, der
wurden für Konfigurationsklassen berechnet
und Autokonfiguration und Gründe für
was sie übereinstimmten oder nicht
korrespondierte.
configpropsZeigt eine Liste aller an
@ConfigurationProperties
envZeigt Eigenschaften von an
Konfigurierbare Umgebung.
FlugbahnZeigt Datenbankmigrationen an
Flyway, die angewendet wurden.
GesundheitZeigt Gesundheitsinformationen an
Anwendungen.
httptraceZeigt Trace-Informationen an
HTTP (standardmäßig die letzten 100 HTTP
Anfrage-Antwort).
infoZeigt zusätzliche Informationen an
über die Anwendung.
IntegrationsgraphCount Spring Integration.
LoggerZeigt und erlaubt
Ändern Sie die Konfiguration der Logger in
Anwendung.
LiquibaseZeigt angewandte Migrationen an
Liquibase-Datenbanken
MetrikenZeigt Metrikinformationen an
für die aktuelle Anwendung.
ZuordnungenZeigt eine Liste aller Pfade an.
@RequestMapping.
geplante AufgabenZeigt geplante Aufgaben an
(geplante Aufgaben).
SitzungenErmöglicht das Abrufen und Löschen
Benutzersitzungen aus Repositorys,
unterstützt von Spring Session. Nicht verfügbar
bei Verwendung der Frühlingssitzung für reaktive
Webanwendungen.
HerunterfahrenErmöglicht die korrekte Anwendung
um die Arbeit abzuschließen.
ThreaddumpZeigt Stream-Informationen an.

Endpunkte aktivieren

Standardmäß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 HTTP

Gehen 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 Endpunkte

Wenn 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 / actuator

Wie wir im folgenden Screenshot sehen, ist auch der env Endpunkt enthalten.



Zugriff auf alle Endpunkte

Wenn 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 Endpunkte

Die 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-Endpunkte

Wenn 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 Endpunkte

Standardmäß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 Actuator

Lassen Sie uns einige der wichtigsten Endpunkte diskutieren.

/ Gesundheit

Der 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 Indikatoren

Spring 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 Anzeigen

Die 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 Anzeige

Alternativ 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; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code. // int errorCode = performHealthCheck(); if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } } 

Gehen wir noch einmal zum Gesundheitsendpunkt und sehen, ob unser Indikator reflektiert wird oder nicht.



Wir sehen unseren Indikator.

Einzelkomponentenstatus

Sie 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



/ info

Der 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 



/ Bohnen

Der 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.



/ configprops
Der 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 .



/ env

Der env Endpunkt stellt alle Umgebungsinformationen in der folgenden Reihenfolge bereit:

Systemeigenschaften
JVM-abhängig (plattformunabhängig)
Systemumgebung oder Variablen
Umgebung
hängt vom Betrieb ab
System (plattformabhängig)
Einstellungen auf Anwendungsebene
definiert in
application.properties



/ heapdump

Der 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.

/ Logger

Der 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



/ Metriken

Der metrics zeigt alle Metriken an, die Sie für Ihre Anwendung verfolgen können.



Überprüfung einzelner Metriken

Sie 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



Referenzen

docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
docs.spring.io/spring-boot/docs/current/actuator-api/html

Gemäß der etablierten Tradition warten wir auf Ihre Kommentare und laden alle zum Tag der offenen Tür ein , der am 23. Mai stattfinden wird.

Source: https://habr.com/ru/post/de452624/


All Articles