Tutoriel d'administration de Spring Boot



Contrôlez et gérez vos applications Spring Boot avec une belle interface utilisateur au-dessus des points d'extrémité Spring Boot Actuator.

Actionneur de soufflet Ă  ressort


Actuator est un module Spring Boot qui ajoute des points de terminaison REST / JMX à votre application afin que vous puissiez facilement le suivre et le gérer dans un environnement de production. Les points de terminaison offrent des contrôles d'intégrité, une surveillance des métriques, un accès aux journaux, des vidages de threads, des vidages de tas, des informations environnementales, etc. L'auteur a parlé en détail d'Actuator dans l'article suivant:
Actionneur: Surveillance et gestion de la production Spring Boot
Surveillez et gérez votre application en cours d'exécution avec Spring Boot Actuator 2.x. Collectez des métriques ou vérifiez l'intégrité de l'application.

Note du traducteur. Il existe un article similaire sur Habré:
Introduction Ă  Spring Boot Actuator

Administrateur de démarrage de printemps


Actuator est un outil formidable et puissant, de plus, ses points d'extrémité sont faciles et pratiques à utiliser avec une autre application - vous utilisez simplement l'appel de service REST. Cependant, utiliser Actuator n'est pas très pratique pour une personne. Il est beaucoup plus facile pour l'utilisateur d'avoir une bonne interface utilisateur que vous pouvez utiliser pour afficher toutes les données de surveillance et gérer votre application. C'est exactement ce que sert Spring Boot Admin. Il vous offre une couche d'interface utilisateur pratique au-dessus des points de terminaison de l'actionneur avec quelques fonctionnalités supplémentaires en plus.

Spring Boot Admin n'est pas un module fourni par l'équipe Spring, il a été créé par une société appelée Codecentric . Cependant, son code est accessible au public sur Github et est gratuit.

Client et serveur


Contrairement Ă  Actuator, Spring Boot Admin se compose en fait de deux parties - client et serveur.

La partie serveur contient l'interface utilisateur administrateur et fonctionne indépendamment des applications surveillées. La partie client est située dans l'application surveillée, qui est enregistrée dans la partie serveur.

Ainsi, même si notre application ne fonctionne pas ou ne fonctionne pas correctement, le serveur de surveillance fonctionne toujours. Imaginez maintenant que vous disposez de plusieurs applications (telles que les microservices Spring Boot), et chacune d'elles peut fonctionner dans plusieurs cas. Avec la surveillance traditionnelle des actionneurs, cela est difficile, car vous devez accéder à chacun d'eux individuellement, et vous devez garder une trace du nombre d'instances et de son emplacement.

Lors de l'utilisation de Spring Boot Admin, chaque instance de l'application surveillée (client) est enregistrée sur le serveur après son lancement. Ensuite, vous avez un seul point (Admin Server) où vous pouvez tous les vérifier.



Code source


Le code source de l'application terminée se trouve dans ce référentiel Github .

Configuration du serveur


Voyons d'abord comment configurer Spring Boot Admin Server. Commençons par la nouvelle application Spring Boot. Vous pouvez facilement le créer à l'aide de Spring Initializr . Assurez-vous d'activer le module Web .

Après avoir créé le projet, la première chose dont nous avons besoin est d'ajouter la dépendance Spring Boot Admin Server:

<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency> 

Notez que bien que ce projet n'ait pas été créé par Pivotal, vous pouvez trouver les modules client et serveur pour Spring Boot Admin dans Spring Initializr. Ensuite, nous devons activer Admin Server en annotant notre classe d'application principale à l'aide de l'annotation @EnableAdminServer :



C’est tout. Vous pouvez maintenant démarrer votre application et après avoir ouvert la page, vous devriez voir un écran comme celui-ci:



Le serveur est en cours d'exécution, mais les clients ne sont pas encore enregistrés. Corrigeons-le.

Configuration du client


Comme pour la configuration du serveur, la première étape consiste à ajouter la dépendance correcte à une application existante:

 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency> 

Ensuite, vous devez déterminer l'URL où votre serveur d'administration s'exécute. Ajoutez cette ligne à votre fichier application.properties :

 spring.boot.admin.client.url=http://localhost:8080 

Ajout d'un actionneur


Vous devriez maintenant pouvoir démarrer à la fois le client et le serveur. Assurez-vous simplement qu'il n'y a pas de conflit de port, car les deux applications utilisent par défaut 8080. À des fins de test, vous pouvez définir server.port = 0 dans votre application.properties afin que votre client utilise un port aléatoire au démarrage. Ainsi, vous pouvez tester le lancement de plusieurs instances s'exécutant sur différents ports.

Lorsque vous ouvrez l'interface utilisateur Admin Server, vous devriez voir votre application. Lorsque vous cliquez sur le nom de l'application, une page contenant des informations sur l'application devrait apparaître.



Si vous voyez un écran similaire à celui ci-dessus avec un minimum d'informations, cela signifie que votre projet n'a pas d'actionneur. N'oubliez pas que Spring Boot Admin utilise des points de terminaison Actuator sous le capot. Heureusement, il vous suffit d'ajouter une simple dépendance et la configuration automatique s'occupe du reste.

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

Cependant, la plupart des points de terminaison ne sont pas affichés par défaut dans Actuator. Vous devez modifier votre configuration dans application.properties pour les exposer:

 management.endpoints.web.exposure.include=* 

Après avoir fourni les points de terminaison Actuator, vous devriez voir beaucoup plus d'informations dans l'interface d'administration:



Un guide détaillé sur la configuration de Spring Boot Actuator se trouve dans cet article .
Note du traducteur. Et dans un article sur Habré .

La sécurité


Maintenant que tout fonctionne, nous devons nous assurer que nos points de terminaison Actuator et notre interface d'administration ne sont pas accessibles Ă  tous.

Sécurité client


Si vous utilisez déjà Spring Security, ce qui précède ne fonctionnera pas pour vous, car les points de terminaison du lecteur sont protégés par défaut et votre serveur administrateur ne pourra pas y accéder. Si vous n'utilisez pas déjà Spring Security, vous devez d'abord ajouter la dépendance:

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

À des fins de test, vous pouvez désactiver temporairement la sécurité du point de terminaison de l'actionneur avec management.security.enabled = false . Cependant, nous voulons que la sécurité soit activée. Si vous utilisez l'authentification de base, vous pouvez simplement spécifier le nom d'utilisateur et le mot de passe dans le fichier de propriétés. Ces informations d'identification seront utilisées par le serveur d'administration pour l'authentification aux points de terminaison du lecteur client:

 spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password 

Par défaut, sauf configuration contraire, Spring Boot utilise par défaut l'utilisateur utilisateur et un mot de passe généré automatiquement à chaque démarrage de l'application. Vous pouvez vérifier le mot de passe dans la console au démarrage. Si vous souhaitez spécifier explicitement le nom d'utilisateur et le mot de passe requis pour votre application, vous pouvez les spécifier dans vos propriétés:

 spring.security.user.name=joe spring.security.user.password=my-secret-password 

Sécurité du serveur


Comme pour le client, nous devons ajouter une dépendance Spring Security:

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

Configurons maintenant le nom d'utilisateur et le mot de passe requis pour se connecter au serveur d'administration dans votre application.properties :

 spring.security.user.name=admin spring.security.user.password=admin-password 

Maintenant, sur votre client, vous devez Ă©galement ajouter ces informations d'identification, sinon il ne pourra pas s'enregistrer sur le serveur:

 spring.boot.admin.client.username=admin spring.boot.admin.client.password=admin-password 

Revenons maintenant au côté serveur. La dernière chose dont nous avons besoin est d'ajouter la configuration de Spring Security pour protéger l'interface utilisateur d'administration:

 @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/**" ); } } 

Cela donnera accès à l'interface administrateur uniquement aux utilisateurs authentifiés utilisant l'authentification HTTP de base pour se connecter. La page de connexion elle-même et les ressources de l'interface utilisateur statique, y compris javascript, HTML et CSS, sont ouvertes. Sinon, vous ne pourrez pas vous connecter. Ensuite, il existe une protection contre la falsification des demandes intersites (CSRF, Cross-Site Request Forgery) basée sur les cookies. Vous pouvez voir que certains chemins sont ignorés dans la protection CSRF - c'est parce qu'Admin Server ne dispose pas actuellement de la prise en charge appropriée .

Maintenant, après le redémarrage, vous devriez voir un bel écran de connexion protégeant votre serveur d'administration:



DĂ©couverte du cloud


Le client Admin Spring Boot n'est pas le seul moyen d'enregistrer vos applications sur le serveur. Admin Server prend également en charge Spring Cloud Service Discovery. Vous pouvez en savoir plus dans la documentation officielle ou dans l'article « Spring Cloud Discovery avec Spring Boot Admin ».

Notifications


Dès que la surveillance a commencé, vous souhaitez être averti en cas de problème. La bonne nouvelle est que Spring Admin propose un large éventail d'options de notification.

S'il s'agit de votre première visite sur la page Admin Server, il vous demande l'autorisation d'afficher les notifications push sur votre ordinateur. Chaque fois qu'un problème se produit, vous recevrez un message contextuel.



D'autres notifications nécessitent une configuration facile. Cela signifie généralement simplement fournir quelques entrées dans votre application.properties . Les services suivants sont actuellement pris en charge:


Configurer les notifications par e-mail


Si vous souhaitez activer les notifications par e-mail, vous devez ajouter la dépendance de messagerie Spring à votre serveur:

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

Ensuite, vous devez déterminer votre serveur SMTP, qui sera utilisé pour envoyer des notifications et des informations d'identification par e-mail. Mettez à jour vos applications.properties de votre serveur d'administration.

 spring.mail.host=smtp.foo.com spring.mail.username=smtp-server-user spring.mail.password=smtp-server-password 

Ensuite, vous devez identifier les destinataires et les expéditeurs.

 # 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 

Conclusion


Spring Boot Admin offre une couche d'interface utilisateur pratique et utile au-dessus des points de terminaison de l'actionneur. De plus, il vous permet de contrôler de manière centralisée plusieurs applications avec plusieurs instances, ce qui est inestimable lorsque vous travaillez dans le cloud et avec des microservices. Cependant, assurez-vous de protéger suffisamment votre client et votre serveur. Pour plus d'informations, consultez la documentation officielle .

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


All Articles