Spring Boot Admin Tutorial



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 Actuator

Spring 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://localhost:8080 

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 .

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


All Articles