Spring Boot Actuator-Endpunkte ermöglichen es uns, unsere Anwendung zu überwachen und mit ihr zu interagieren. Spring Actuator ist ein Untermodule von Spring Boot und bietet integrierte Endpunkte, die wir für unsere Anwendung aktivieren und deaktivieren können.
Spring Boot Actuator-Endpunkte
werden über JMX und HTTP bereitgestellt. Meistens verwenden wir HTTP-basierte Actuator-Endpunkte, da sie einfach über den Browser, das CURL-Kommando, Shell-Skripte usw. zugänglich sind. Einige nützliche Actuator-Endpunkte sind:
- beans: Dieser Endpunkt liefert eine Liste aller in unserer Anwendung konfigurierten Beans.
- env: Bietet Informationen über die Spring-Umgebungseigenschaften.
- health: Zeigt den Status der Anwendung an.
- info: Zeigt Informationen zur Anwendung an. Dies kann in den Spring-Umgebungseigenschaften konfiguriert werden.
- mappings: Zeigt eine Liste aller @RequestMapping-Pfade an.
- shutdown: Ermöglicht ein ordnungsgemäßes Herunterfahren der Anwendung.
- threaddump: Liefert einen Thread-Dump der Anwendung.
Du kannst die vollständige Liste der Spring Actuator Endpoints hier erhalten.
Spring Actuator Endpoints Sicherheit
Nur die Endpunkte „health“ und „info“ sind ohne Sicherheit zugänglich. Um auf alle anderen Endpunkte zuzugreifen, müssen wir unsere Anwendung für die Spring Security konfigurieren. Dies ist sehr einfach zu erreichen, darauf werden wir im späteren Teil des Tutorials eingehen.
Aktiviere Spring Actuator Endpoints
Wenn wir Spring Actuator-Abhängigkeiten zu unserem Spring Boot-Projekt hinzufügen, werden die Actuator-Endpunkte automatisch aktiviert. Füge die unten stehenden Abhängigkeiten zu deiner Spring-Anwendung hinzu, um die Spring Boot Actuator-Endpunkte zu aktivieren.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Wenn du die Anwendung jetzt ausführst, siehst du, dass die Actuator-Endpunkte in den Protokollen zugeordnet werden.
2018-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Beachten Sie, dass nur zwei Endpunkte – health
und info
– zugeordnet wurden. Im folgenden Bild ist die Ausgabe dieser Aktuator-Endpunkte dargestellt.
Haben Sie bemerkt, dass keine Daten im
/actuator/info
vorhanden sind? Das liegt daran, dass wir sie nicht konfiguriert haben. Fügen Sie einfach die folgenden Eigenschaften zu Ihrer application.properties
-Datei hinzu.
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
Starten Sie die Anwendung neu, und Sie erhalten die folgende Ausgabe:
Anpassen des Basispfads der Aktuator-Endpunkte
Standardmäßig ist der Basispfad der Aktuator-Endpunkte /actuator
. Wir können ihn durch Festlegen von management.endpoints.web.base-path
in der Anwendungsproperties-Datei auf einen anderen Wert ändern.
management.endpoints.web.base-path=/management
Andere Aktuator-Endpunkte freigeben
Wir können andere Aktuator-Endpunkte über Eigenschaftsdateien aktivieren und deaktivieren. Wenn Sie alle Aktuator-Endpunkte aktivieren möchten, fügen Sie die folgende Eigenschaft hinzu.
management.endpoints.web.exposure.include=*
Um nur bestimmte Aktor-Endpunkte zu aktivieren, geben Sie die Liste der Endpunkt-IDs an.
management.endpoints.web.exposure.include=health,info,beans,env
Spring Security für Aktor-Endpunkte
Beachten Sie, dass wir Spring Security zu unserer Anwendung hinzufügen müssen, um zusätzliche Endpunkte zu aktivieren, da alle anderen Endpunkte zumindest eine Basisauthentifizierung erfordern. Fügen Sie die folgende Abhängigkeit für Spring Security zu Ihrer Anwendung hinzu.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Fügen Sie auch den Benutzernamen und das Passwort für Spring Security in der Anwendungseigenschaftendatei hinzu.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
Starten Sie die Anwendung neu und Sie werden feststellen, dass zusätzliche Endpunkte zugeordnet werden.
2018-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Wenn Sie nun versuchen, auf die gesicherten Aktor-Endpunkte zuzugreifen, müssen Sie Anmeldeinformationen angeben. Unten sehen Sie die Antwort der Endpunkte
beans
und env/java.home
.
Spring Actuator benutzerdefinierte Endpunkte
Eines der großartigen Merkmale des Spring Frameworks ist, dass es sehr einfach zu erweitern ist. Wir können eigene benutzerdefinierte Aktuator-Endpunkte mit der @Endpoint
-Annotation in einer Klasse erstellen. Anschließend müssen wir die @ReadOperation
-, @WriteOperation
– oder @DeleteOperation
-Annotationen auf den Methoden verwenden, um sie als Aktuator-Endpunkt-Beans freizugeben. Wir können technologisch spezifische Endpunkte mit den @JmxEndpoint
– und @WebEndpoint
-Annotationen erstellen. Hier ist ein Beispiel für unseren eigenen benutzerdefinierten Spring Aktuator-Endpunkt.
package com.journaldev.spring;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {
@ReadOperation
@Bean
public String hi() {
return "Hi from custom endpoint";
}
}
Haben Sie die Endpunkt-ID bemerkt? Diese müssen wir auch in der Liste der zu aktivierenden Aktuator-Endpunkte konfigurieren. Aktualisieren Sie die folgenden Eigenschaften in der application.properties
-Datei.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
Wenn Sie die Anwendung starten, überprüfen Sie, ob dieser neue Endpunkt in den Protokollen zugeordnet ist.
2018-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Im folgenden Bild ist die Ausgabe zu sehen, wenn wir unseren benutzerdefinierten Aktuator-Endpunkt aufrufen.
Zusammenfassung
Spring Boot Actuator ist ein produktionsbereites Management- und Informationsmodul. Wir können es problemlos erweitern, um unsere eigenen APIs hinzuzufügen und unsere Anwendung zu verwalten.
Sie können das vollständige Projekt von unserem GitHub-Repository herunterladen.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints