Spring Boot Actuator Endpunkte

Spring Boot Actuator Endpunkte ermöglichen es uns, unsere Anwendung zu überwachen und mit ihr zu interagieren. Spring Actuator ist ein Sub-Modul von Spring Boot und bietet integrierte Endpunkte, die wir für unsere Anwendung aktivieren und deaktivieren können.

Übersicht über die Spring Boot Actuator Endpunkte

Spring Boot Actuator Endpunkte sind über JMX und HTTP verfügbar, meistens nutzen wir HTTP-basierte Actuator Endpunkte, da sie einfach über den Browser, CURL-Befehl, Shell-Skripte usw. zugänglich sind. Einige der nützlichen Actuator Endpunkte sind:

  • beans: Dieser Endpunkt liefert eine Liste aller in unserer Anwendung konfigurierten Beans.
  • env: Bietet Informationen über die Spring Environment-Eigenschaften.
  • health: Zeigt die Gesundheit der Anwendung an.
  • info: Zeigt Anwendungsinformationen an, die wir in den Spring-Umgebungseigenschaften konfigurieren können.
  • mappings: Zeigt eine Liste aller @RequestMapping-Pfade.
  • shutdown: Ermöglicht es uns, die Anwendung sanft herunterzufahren.
  • threaddump: Stellt den Thread-Dump der Anwendung bereit.

Die vollständige Liste der Spring Actuator Endpunkte können Sie hier einsehen.

Sicherheit der Spring Actuator Endpunkte

Nur die Endpunkte „health“ und „info“ sind ohne Sicherheitsmaßnahmen zugänglich. Für den Zugriff auf alle anderen Endpunkte müssen wir unsere Anwendung für Spring Security konfigurieren. Dies ist sehr einfach zu erreichen, wir werden dies im weiteren Verlauf des Tutorials behandeln.

Spring Actuator Endpunkte aktivieren

Wenn wir Spring Actuator-Abhängigkeiten zu unserem Spring Boot-Projekt hinzufügen, werden die Actuator-Endpunkte automatisch aktiviert. Fügen Sie die folgenden Abhängigkeiten zu Ihrer 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 Sie die Anwendung jetzt ausführen, werden Sie sehen, dass die Actuator-Endpunkte in den Logs abgebildet 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 – abgebildet wurden. Das folgende Bild zeigt die Ausgabe dieser Actuator-Endpunkte.

Haben Sie bemerkt, dass es keine Daten im /actuator/info gibt? Das liegt daran, dass wir sie noch nicht konfiguriert haben. Fügen Sie einfach die folgenden Eigenschaften zu Ihrer application.properties-Datei hinzu.

info.app.name=Spring Actuator Beispiel
info.app.java.version=10
info.app.type=Spring Boot

Starten Sie die Anwendung neu und Sie erhalten folgende Ausgabe:

Anpassen des Basispfads der Actuator Endpunkte

Standardmäßig ist der Basispfad der Actuator-Endpunkte /actuator, wir können ihn durch Festlegen von management.endpoints.web.base-path in der Datei der Anwendungseigenschaften auf einen anderen Wert ändern.

management.endpoints.web.base-path=/management

Andere Actuator Endpunkte freigeben

Wir können andere Actuator-Endpunkte durch Eigenschaftsdateien aktivieren und deaktivieren. Wenn Sie alle Actuator-Endpunkte aktivieren möchten, fügen Sie die folgende Eigenschaft hinzu.

management.endpoints.web.exposure.include=*

Um nur bestimmte Actuator-Endpunkte zu aktivieren, geben Sie die Liste der Endpunkt-IDs an.

management.endpoints.web.exposure.include=health,info,beans,env

Spring Security für Actuator Endpunkte

Beachten Sie, dass wir Spring Security zu unserer Anwendung hinzufügen müssen, um zusätzliche Endpunkte zu aktivieren, da alle anderen Endpunkte mindestens eine Basisauthentifizierung benötigen. Fügen Sie die folgende Abhängigkeit für Spring Security in Ihre Anwendung ein.

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

Fügen Sie auch Benutzernamen und Passwort für Spring Security in die Datei application.properties ein.

spring.security.user.name=pankaj
spring.security.user.password=pankaj

Starten Sie die Anwendung neu und Sie werden sehen, dass zusätzliche Endpunkte abgebildet 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 Actuator-Endpunkte zuzugreifen, müssen Sie Anmeldedaten angeben.

Die folgenden Bilder zeigen die Antwort der Endpunkte beans und env/java.home.

 

Spring Actuator Eigene Endpunkte

Eine der großartigen Funktionen des Spring Frameworks ist, dass es sehr einfach zu erweitern ist. Wir können unsere eigenen benutzerdefinierten Actuator-Endpunkte mit der Annotation @Endpoint in einer Klasse erstellen. Dann müssen wir @ReadOperation, @WriteOperation oder @DeleteOperation Annotationen auf den Methoden verwenden, um sie als Actuator-Endpunkt-Bean freizugeben. Wir können technologie-spezifische Endpunkte mit den Annotationen @JmxEndpoint und @WebEndpoint erstellen. Hier ist ein Beispiel für unseren eigenen benutzerdefinierten Spring Actuator-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? Wir müssen auch diese in der Liste der zu aktivierenden Actuator-Endpunkte konfigurieren. Aktualisieren Sie die folgenden Eigenschaften in der application.properties-Datei.

management.endpoints.web.exposure.include=health,info,beans,env,myendpoint

Wenn Sie nun die Anwendung starten, überprüfen Sie, ob dieser neue Endpunkt in den Logs abgebildet wird.

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

Das folgende Bild zeigt die Ausgabe, wenn wir unseren eigenen Actuator-Endpunkt aufrufen.

Zusammenfassung

Spring Boot Actuator ist ein produktionsbereites Verwaltungs- und Informationsmodul. Wir können es leicht erweitern, um unsere eigenen APIs hinzuzufügen und unsere Anwendung zu verwalten – eine Anleitung.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: