
Steuern und verwalten Sie Ihre Spring Boot-Anwendungen mit einer ansprechenden Benutzeroberfläche auf den Spring Boot Actuator-Endpunkten.
Federbeinantrieb
Actuator ist ein Spring Boot-Modul, das Ihrer Anwendung REST / JMX-Endpunkte hinzufügt, damit Sie diese problemlos in einer Produktionsumgebung nachverfolgen und verwalten können. Endpunkte bieten Integritätsprüfungen, Metriküberwachung, Zugriff auf Protokolle, Thread-Dumps, Heap-Dumps, Umgebungsinformationen und mehr. Der Autor hat im folgenden Artikel ausführlich über Actuator gesprochen:
Aktuator: Überwachung und Verwaltung der Spring Boot-Produktion
Überwachen und verwalten Sie Ihre laufende Anwendung mit Spring Boot Actuator 2.x. Sammeln Sie Metriken oder überprüfen Sie den Zustand der Anwendung.
Anmerkung des Übersetzers. Es gibt einen ähnlichen Artikel über Habré:
Einführung in Spring Boot ActuatorSpring Boot Admin
Actuator ist ein großartiges und leistungsstarkes Tool. Darüber hinaus können die Endpunkte einfach und bequem mit einer anderen Anwendung verwendet werden - Sie verwenden lediglich den REST-Serviceabruf. Die Verwendung von Actuator ist jedoch für eine Person nicht sehr praktisch. Für den Benutzer ist es viel einfacher, eine gute Benutzeroberfläche zu haben, mit der Sie alle Überwachungsdaten anzeigen und Ihre Anwendung verwalten können. Genau das leistet Spring Boot Admin. Es bietet Ihnen eine bequeme Benutzeroberflächenebene über den Endpunkten von Actuator und darüber hinaus einige zusätzliche Funktionen.
Spring Boot Admin ist kein Modul, das vom Spring-Team bereitgestellt wird. Es wurde von einer Firma namens
Codecentric erstellt . Der Code ist jedoch auf
Github öffentlich verfügbar und kostenlos.
Client und Server
Im Gegensatz zu Actuator besteht Spring Boot Admin eigentlich aus zwei Teilen - Client und Server.
Der Serverteil enthält die Administrator-Benutzeroberfläche und arbeitet unabhängig von den überwachten Anwendungen. Der Client-Teil befindet sich in der überwachten Anwendung, die im Server-Teil registriert ist.
Daher funktioniert der Überwachungsserver auch dann noch, wenn unsere Anwendung nicht oder nicht ordnungsgemäß funktioniert. Stellen Sie sich nun vor, Sie haben mehrere Anwendungen (z. B. Spring Boot-Mikrodienste), von denen jede in mehreren Instanzen ausgeführt werden kann. Bei der herkömmlichen Überwachung von Aktoren ist dies schwierig, da Sie auf jede einzelne Instanz einzeln zugreifen und nachverfolgen müssen, wie viele Instanzen und wo sie ausgeführt werden.
Bei Verwendung von Spring Boot Admin wird jede Instanz der überwachten Anwendung (Client) nach dem Start auf dem Server registriert. Dann haben Sie einen einzigen Punkt (Admin-Server), an dem Sie alle überprüfen können.

Quellcode
Der Quellcode für die fertige Anwendung befindet sich in
diesem Github-Repository .
Server-Setup
Schauen wir uns zunächst an, wie Spring Boot Admin Server konfiguriert wird. Beginnen wir mit der neuen Spring Boot-Anwendung. Sie können es ganz einfach mit dem
Spring Initializr erstellen. Stellen Sie sicher, dass das
Webmodul aktiviert ist.
Nachdem Sie das Projekt erstellt haben, müssen Sie zunächst die Spring Boot Admin Server-Abhängigkeit hinzufügen:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency>
Beachten Sie, dass, obwohl dieses Projekt nicht von Pivotal erstellt wurde, Sie die Client- und Servermodule für den Spring Boot Admin im Spring Initializr finden. Als Nächstes müssen wir den Admin-Server aktivieren, indem wir unsere Hauptanwendungsklasse mit der Anmerkung
@EnableAdminServer versehen :

Das ist alles. Jetzt können Sie Ihre Anwendung starten und nach dem Öffnen der Seite sollten Sie einen Bildschirm wie diesen sehen:

Der Server läuft, aber die Clients sind noch nicht registriert. Lass es uns reparieren.
Client-Setup
Wie bei der Serverkonfiguration besteht der erste Schritt darin, einer vorhandenen Anwendung die richtige Abhängigkeit hinzuzufügen:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency>
Dann müssen Sie die URL ermitteln, unter der Ihr Admin-Server ausgeführt wird. Fügen Sie diese Zeile zu Ihrer
application.properties- Datei hinzu:
spring.boot.admin.client.url=http:
Aktor hinzufügen
Sie sollten nun in der Lage sein, sowohl den Client als auch den Server zu starten. Stellen Sie nur sicher, dass kein
Portkonflikt vorliegt , da beide Anwendungen standardmäßig 8080 verwenden. Zu Testzwecken können Sie
server.port = 0 in Ihren
application.properties festlegen, sodass Ihr Client beim Start einen zufälligen Port verwendet. Auf diese Weise können Sie den Start mehrerer Instanzen testen, die an verschiedenen Ports ausgeführt werden.
Wenn Sie die Admin-Server-Benutzeroberfläche öffnen, sollte Ihre Anwendung angezeigt werden. Wenn Sie auf den Namen der Anwendung klicken, sollte eine Seite mit Informationen zur Anwendung angezeigt werden.

Wenn Sie einen Bildschirm ähnlich dem oben gezeigten mit einer minimalen Menge an Informationen sehen, bedeutet dies, dass Ihr Projekt nicht über Actuator verfügt. Denken Sie daran, dass Spring Boot Admin unter der Haube Aktuator-Endpunkte verwendet. Glücklicherweise müssen Sie nur eine einfache Abhängigkeit hinzufügen, und die automatische Konfiguration erledigt den Rest.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Die meisten Endpunkte werden jedoch nicht standardmäßig in Actuator angezeigt. Sie müssen Ihre Konfiguration in
application.properties ändern, um sie verfügbar zu machen:
management.endpoints.web.exposure.include=*
Nachdem Sie die Actuator-Endpunkte bereitgestellt haben, sollten auf der Administrationsoberfläche viele weitere Informationen angezeigt werden:

Eine ausführliche Anleitung zur Konfiguration von Spring Boot Actuator finden Sie
in diesem Artikel .
Anmerkung des Übersetzers. Und in einem
Artikel über Habré .
Sicherheit
Nachdem alles funktioniert, müssen wir sicherstellen, dass unsere Aktuator-Endpunkte und die Administrationsoberfläche nicht für alle zugänglich sind.
Kundensicherheit
Wenn Sie Spring Security bereits verwenden, funktioniert das oben Genannte nicht für Sie, da die Laufwerkendpunkte standardmäßig geschützt sind und Ihr Administrator-Server nicht auf sie zugreifen kann. Wenn Sie Spring Security noch nicht verwenden, müssen Sie zuerst die Abhängigkeit hinzufügen:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Zu Testzwecken können Sie die Actuator-Endpunktsicherheit mit
management.security.enabled = false vorübergehend deaktivieren. Wir möchten jedoch, dass die Sicherheit aktiviert wird. Wenn Sie die Standardauthentifizierung verwenden, können Sie einfach den Benutzernamen und das Kennwort in der Eigenschaftendatei angeben. Diese Anmeldeinformationen werden vom Admin-Server für die Authentifizierung an den Endpunkten des Client-Laufwerks verwendet:
spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password
Sofern nicht anders konfiguriert, verwendet Spring Boot standardmäßig den Benutzer
user und das automatisch generierte Kennwort, wenn die Anwendung gestartet wird. Sie können das Kennwort während des Startvorgangs in der Konsole überprüfen. Wenn Sie den für Ihre Anwendung erforderlichen Benutzernamen und das Kennwort explizit angeben möchten, können Sie diese in Ihren Eigenschaften angeben:
spring.security.user.name=joe spring.security.user.password=my-secret-password
Serversicherheit
Wie beim Client müssen wir eine Spring Security-Abhängigkeit hinzufügen:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Jetzt konfigurieren wir den Benutzernamen und das Kennwort, die für die Anmeldung beim Admin-Server in Ihrer
application.properties erforderlich sind :
spring.security.user.name=admin spring.security.user.password=admin-password
Jetzt müssen Sie auf Ihrem Client auch diese Anmeldeinformationen hinzufügen, sonst kann er sich nicht auf dem Server registrieren:
spring.boot.admin.client.username=admin spring.boot.admin.client.password=admin-password
Nun zurück zur Serverseite. Als letztes müssen wir die Spring Security-Konfiguration hinzufügen, um die Admin-Benutzeroberfläche zu schützen:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl("/"); http.authorizeRequests() .antMatchers("/assets/**").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated().and() .formLogin().loginPage("/login") .successHandler(successHandler).and() .logout().logoutUrl("/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( "/instances", "/actuator/**" ); } }
Auf diese Weise erhalten nur authentifizierte Benutzer Zugriff auf die Administratoroberfläche, die sich mit der grundlegenden HTTP-Authentifizierung anmelden. Die Anmeldeseite selbst und die statischen Ressourcen der Benutzeroberfläche, einschließlich Javascript, HTML und CSS, sind geöffnet. Andernfalls können Sie sich nicht anmelden. Dann gibt es einen Schutz gegen Fälschung von Cross-Site-Anfragen (CSRF, Cross-Site Request Forgery), die auf Cookies basieren. Sie können sehen, dass einige Pfade im CSRF-Schutz ignoriert werden. Dies liegt daran, dass der Admin-Server derzeit
nicht über die richtige Unterstützung verfügt .
Nach dem Neustart sollte nun ein schöner Anmeldebildschirm angezeigt werden, der Ihren Admin-Server schützt:

Cloud-Entdeckung
Der Spring Boot Admin-Client ist nicht die einzige Möglichkeit, Ihre Anwendungen auf dem Server zu registrieren. Admin Server unterstützt auch Spring Cloud Service Discovery. Weitere Informationen finden Sie in der
offiziellen Dokumentation oder im Artikel „
Spring Cloud Discovery mit Spring Boot Admin “.
Benachrichtigungen
Sobald Sie die Überwachung gestartet haben, möchten Sie benachrichtigt werden, wenn ein Fehler auftritt. Die gute Nachricht ist, dass Spring Admin eine Vielzahl von Benachrichtigungsoptionen bietet.
Wenn Sie die Admin-Server-Seite zum ersten Mal besuchen, werden Sie um die Erlaubnis gebeten, Push-Benachrichtigungen auf Ihrem Computer anzuzeigen. Wenn ein Problem auftritt, erhalten Sie eine Popup-Nachricht.

Andere Benachrichtigungen müssen einfach eingerichtet werden. Dies bedeutet normalerweise, dass Sie nur einige Einträge in Ihrer
application.properties angeben . Die folgenden Dienste werden derzeit unterstützt:
Richten Sie E-Mail-Benachrichtigungen ein
Wenn Sie E-Mail-Benachrichtigungen aktivieren möchten, müssen Sie Ihrer Serverseite die Abhängigkeit von Spring-E-Mails hinzufügen:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
Anschließend müssen Sie Ihren SMTP-Server bestimmen, über den Benachrichtigungen und Anmeldeinformationen per E-Mail gesendet werden. Aktualisieren Sie die
application. -Eigenschaften Ihres Admin-Servers.
spring.mail.host=smtp.foo.com spring.mail.username=smtp-server-user spring.mail.password=smtp-server-password
Dann müssen Sie die Empfänger und Absender identifizieren.
# Sender email address spring.boot.admin.notify.mail.from="Spring Boot Admin <noreply@foo.com>" # Comma-delimited list of recipient email addresses spring.boot.admin.notify.mail.to=alice@foo.com,bob@bar.com # Comma-delimited list of carbon copy recipient email addresses spring.boot.admin.notify.mail.cc=joe@foo.com
Fazit
Spring Boot Admin bietet eine praktische und nützliche Benutzeroberflächenebene über den Actuator-Endpunkten. Darüber hinaus können Sie mehrere Anwendungen mit mehreren Instanzen zentral steuern, was bei der Arbeit in der Cloud und mit Microservices von unschätzbarem Wert ist. Stellen Sie jedoch sicher, dass Sie sowohl Ihren Client als auch Ihren Server ausreichend schützen. Weitere Informationen finden Sie in der
offiziellen Dokumentation .