Tutorial de Spring Boot Admin



Controle y administre sus aplicaciones Spring Boot con una agradable interfaz de usuario sobre los puntos finales de Spring Boot Actuator.

Actuador de arranque de resorte


Actuator es un módulo Spring Boot que agrega puntos finales REST / JMX a su aplicación para que pueda rastrearlo y administrarlo fácilmente en un entorno de producción. Los puntos finales ofrecen comprobaciones de estado, monitoreo métrico, acceso a registros, volcados de subprocesos, volcados de almacenamiento dinámico, información ambiental y más. El autor habló en detalle sobre Actuator en el siguiente artículo:
Actuador: supervisión y gestión de la producción de arranque de primavera
Monitoree y administre su aplicación en ejecución con Spring Boot Actuator 2.x. Recopile métricas o verifique el estado de la aplicación.

Nota del traductor. Hay un artículo similar sobre Habré:
Introducción al actuador Spring Boot

Spring boot admin


Actuator es una herramienta excelente y poderosa, además, sus puntos finales son fáciles y convenientes de usar con otra aplicación: solo usa la llamada de servicio REST. Sin embargo, usar Actuator no es muy conveniente para una persona. Es mucho más fácil para el usuario tener una buena interfaz de usuario que pueda usar para ver todos los datos de monitoreo y administrar su aplicación. Esto es exactamente lo que sirve Spring Boot Admin. Le proporciona una conveniente capa de interfaz de usuario sobre los puntos finales de Actuator con algunas características adicionales además de eso.

Spring Boot Admin no es un módulo proporcionado por el equipo de Spring, fue creado por una compañía llamada Codecentric . Sin embargo, su código está disponible públicamente en Github y es gratuito.

Cliente y servidor


A diferencia de Actuator, Spring Boot Admin en realidad consta de dos partes: cliente y servidor.

La parte del servidor contiene la interfaz de usuario del administrador y funciona independientemente de las aplicaciones monitoreadas. La parte del cliente se encuentra en una aplicación monitoreada que está registrada en la parte del servidor.

Por lo tanto, incluso si nuestra aplicación no funciona o no funciona correctamente, el servidor de supervisión sigue funcionando. Ahora imagine que tiene varias aplicaciones (como los microservicios Spring Boot), y cada una de ellas puede funcionar en varios casos. Con la supervisión tradicional de Actuator, esto es difícil, ya que necesita acceder a cada uno de ellos individualmente, y debe realizar un seguimiento de cuántas instancias y dónde se está ejecutando.

Cuando se usa Spring Boot Admin, cada instancia de la aplicación monitoreada (cliente) se registra en el servidor después de su lanzamiento. Luego tiene un único punto (Servidor de administración) donde puede verificarlos todos.



Código fuente


El código fuente de la aplicación terminada se puede encontrar en este repositorio de Github .

Configuración del servidor


Primero veamos cómo configurar Spring Boot Admin Server. Comencemos con la nueva aplicación Spring Boot. Puede crearlo fácilmente con Spring Initializr . Asegúrese de habilitar el módulo web .

Después de crear el proyecto, lo primero que necesitamos es agregar la dependencia de Spring Boot Admin Server:

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

Tenga en cuenta que aunque Pivotal no creó este proyecto, puede encontrar los módulos de cliente y servidor para Spring Boot Admin en Spring Initializr. A continuación, debemos habilitar el Servidor de administración anotando nuestra clase de aplicación principal mediante la anotación @EnableAdminServer :



Eso es todo Ahora puede iniciar su aplicación y después de abrir la página debería ver una pantalla como esta:



El servidor se está ejecutando, pero los clientes aún no están registrados. Vamos a arreglarlo

Configuración del cliente


Al igual que con la configuración del servidor, el primer paso es agregar la dependencia correcta a una aplicación existente:

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

Luego debe determinar la URL donde se está ejecutando su Servidor de administración. Agregue esta línea a su archivo application.properties :

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

Agregar actuador


Ahora debería poder iniciar tanto el cliente como el servidor. Solo asegúrese de que no haya conflicto de puertos, ya que ambas aplicaciones usan 8080 de manera predeterminada. Para propósitos de prueba, puede configurar server.port = 0 en su application.properties para que su cliente use un puerto aleatorio al inicio. Por lo tanto, puede probar el lanzamiento de varias instancias que se ejecutan en diferentes puertos.

Cuando abra la interfaz de usuario del Servidor de administración, debería ver su aplicación. Cuando hace clic en el nombre de la aplicación, debe aparecer una página con información sobre la aplicación.



Si ve una pantalla similar a la anterior con una cantidad mínima de información, significa que su proyecto no tiene Actuator. Recuerde que Spring Boot Admin utiliza puntos finales de Actuator debajo del capó. Afortunadamente, solo necesita agregar una dependencia simple, y la configuración automática se encarga del resto.

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

Sin embargo, la mayoría de los puntos finales no se muestran por defecto en Actuator. Necesita cambiar su configuración en application.properties para exponerlos:

 management.endpoints.web.exposure.include=* 

Después de proporcionar puntos finales de Actuator, debería ver mucha más información en la interfaz de administración:



Puede encontrar una guía detallada sobre cómo configurar Spring Boot Actuator en este artículo .
Nota del traductor. Y en un artículo sobre Habré .

Seguridad


Ahora que todo funciona, debemos asegurarnos de que nuestros puntos finales Actuator y la interfaz de administración no sean accesibles para todos.

Seguridad del cliente


Si ya está utilizando Spring Security, lo anterior no funcionará para usted, ya que los puntos finales de la unidad están protegidos de forma predeterminada y su servidor administrador no podrá acceder a ellos. Si aún no está utilizando Spring Security, primero debe agregar la dependencia:

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

Para fines de prueba, puede deshabilitar temporalmente la seguridad del punto final de Actuator con management.security.enabled = false . Sin embargo, queremos que la seguridad esté habilitada. Si usa autenticación básica, simplemente puede especificar el nombre de usuario y la contraseña en el archivo de propiedades. El servidor de administración utilizará estas credenciales para la autenticación en los puntos finales de la unidad del cliente:

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

De manera predeterminada, a menos que se configure lo contrario, Spring Boot usa de manera predeterminada el usuario usuario y la contraseña generada automáticamente cada vez que se inicia la aplicación. Puede verificar la contraseña en la consola durante el inicio. Si desea especificar explícitamente el nombre de usuario y la contraseña necesarios para su aplicación, puede especificarlos en sus propiedades:

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

Seguridad del servidor


Al igual que con el cliente, necesitamos agregar una dependencia de Spring Security:

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

Ahora configuremos el nombre de usuario y la contraseña necesarios para iniciar sesión en el Servidor de administración en su aplicación .

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

Ahora en su cliente también necesita agregar estas credenciales, de lo contrario no podrá registrarse en el servidor:

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

Ahora de vuelta al lado del servidor. Lo último que necesitamos es agregar la configuración de Spring Security para proteger la interfaz de usuario de administrador:

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

Esto proporcionará acceso a la interfaz del administrador solo para usuarios autenticados que usen autenticación HTTP básica para iniciar sesión. La página de inicio de sesión y los recursos de la interfaz de usuario estática, incluidos JavaScript, HTML y CSS, están abiertos. De lo contrario, no podrá iniciar sesión. Luego hay protección contra la falsificación de solicitudes entre sitios (CSRF, falsificación de solicitudes entre sitios) basadas en cookies. Puede ver que algunas rutas se ignoran en la protección CSRF; esto se debe a que actualmente el Servidor de administración no tiene el soporte adecuado .

Ahora, después de reiniciar, debería ver una hermosa pantalla de inicio de sesión que protege su Servidor de administración:



Descubrimiento de la nube


El cliente Spring Boot Admin no es la única forma de registrar sus aplicaciones en el servidor. Admin Server también es compatible con Spring Cloud Service Discovery. Puede leer más en la documentación oficial o en el artículo " Spring Cloud Discovery with Spring Boot Admin ".

Notificaciones


Tan pronto como haya comenzado la supervisión, desea recibir una notificación cuando algo salga mal. La buena noticia es que Spring Admin ofrece una amplia gama de opciones de notificación.

Si es la primera vez que visita la página del Servidor de Administración, le pide permiso para mostrar notificaciones push en su computadora. Cada vez que ocurra un problema, recibirá un mensaje emergente.



Otras notificaciones necesitan una configuración fácil. Esto generalmente significa simplemente proporcionar algunas entradas en su aplicación . Actualmente se admiten los siguientes servicios:


Configurar notificaciones por correo electrónico


Si desea habilitar las notificaciones por correo electrónico, debe agregar la dependencia del correo electrónico Spring al lado del servidor:

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

Luego, debe determinar su servidor SMTP, que se utilizará para enviar notificaciones y credenciales por correo electrónico. Actualice sus aplicaciones.propiedades de su Servidor de administración.

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

Luego debe identificar a los destinatarios y remitentes.

 # 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 

Conclusión


Spring Boot Admin ofrece una capa de interfaz de usuario conveniente y útil sobre los puntos finales de Actuator. Además, le permite controlar centralmente múltiples aplicaciones con múltiples instancias, lo cual es invaluable cuando se trabaja en la nube y con microservicios. Sin embargo, asegúrese de proteger suficientemente a su cliente y servidor. Para más información, consulte la documentación oficial .

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


All Articles