Introducción al actuador Spring Boot

¡Saludo, Khabrovites! En una semana, las clases comenzarán en el nuevo grupo del curso "Desarrollador en Spring Framework" . En este sentido, compartimos con usted material útil que le dice qué es Spring Actuator y cómo puede ser útil.



  1. ¿Qué es el actuador de primavera?
  2. ¿Cómo agregar Spring Actuator al proyecto Maven o Gradle?
  3. Cree un proyecto Spring Boot con una dependencia Spring Actuator.
  4. Monitoreo de aplicaciones con puntos finales de actuadores de resorte.

¿Qué es el actuador de primavera?

Después de haber desarrollado la aplicación y desplegarla en producción, es muy importante monitorear su rendimiento. Esto es especialmente cierto para aplicaciones de misión crítica, como los sistemas bancarios, en las que la falla de la aplicación afecta directamente al negocio.

Tradicionalmente, antes de Spring Actuator, necesitábamos escribir código para probar el estado de la aplicación, pero con Spring Actuator no necesitábamos escribir código. Spring Actuator proporciona varios puntos finales que pueden ser útiles para monitorear la aplicación.

¿Cómo agregar Spring Actuator al proyecto Maven o Gradle?

Maven

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

Gradle

 dependencies { compile("org.springframework.boot:spring-boot-starter-actuator") } 

Crear un proyecto Spring Boot con Spring Actuator

Avancemos y creemos un proyecto Spring Boot con las dependencias Spring Actuator, Web y DevTools utilizando Spring Initializer .

Tenga en cuenta que en el momento de escribir este artículo, la versión Spring Boot era 2.1.0.



Importe el proyecto a Eclipse o cualquier otro IDE y ejecute SpringActuatorApplication.java .

En la consola, verá lo siguiente:



Puede ver que el Tomcat incorporado se está ejecutando en el puerto 8080 y SpringActuatorApplication ejecutando en Tomcat. También puede ver que los puntos finales del actuador están disponibles en /actuator.

 018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] nbjsSpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823) 2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] osbaeweb.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'. 

Monitoreo de aplicaciones con puntos finales del actuador Spring

Como dijimos anteriormente, Spring Actuator proporciona varios puntos finales que podemos usar para monitorear el estado de la aplicación.

IDDescripción
eventos auditivos
Proporciona información del evento.
auditoría para la aplicación actual.
frijolesMuestra una lista completa de todos
Frijoles de primavera en la aplicación.
cachésInformación de caché.
condicionesMuestra la condición, que
fueron calculados para las clases de configuración
y autoconfiguración, y razones, para
que emparejaron o no
correspondió
configpropsMuestra una lista de todos
@ConfigurationProperties
envMuestra propiedades de
Entorno configurable.
pasarelaMuestra migraciones de bases de datos.
Flyway que se aplicaron.
saludMuestra información de salud.
aplicaciones.
httptraceMuestra información de rastreo
HTTP (por defecto, los últimos 100 HTTP
solicitud-respuesta).
informacionMuestra información adicional.
Sobre la aplicación.
integracionCount Spring Integration.
madererosMuestra y permite
cambiar la configuración de los registradores en
aplicación
liquibaseMuestra migraciones aplicadas
Bases de datos Liquibase
métricasMuestra información de métricas
para la aplicación actual.
mapeosMuestra una lista de todas las rutas.
@RequestMapping.
tareas programadasMuestra tareas programadas
(tareas programadas).
sesionesPermite recuperar y eliminar
sesiones de usuario desde repositorios,
apoyado por la sesión de primavera. No disponible
cuando se usa la sesión de primavera para reactivo
aplicaciones web
apagadoPermite la aplicación correctamente
para completar el trabajo.
roscaMuestra información de la transmisión.

Habilitación de puntos finales

Por defecto, todos los puntos finales están habilitados excepto el shutdown . Para habilitar el punto final, use la siguiente propiedad en el archivo application.properties .

 management.endpoint.<code><</code>id<code>></code>.enabled 

Nota del traductor: por defecto, el acceso a todos los puntos finales es solo a través de JMX, no hay acceso a través de HTTP a todos los puntos finales (ver más abajo).

Un ejemplo:

Para habilitar el punto final de shutdown , debemos realizar la siguiente entrada en el archivo application.properties :

 management.endpoint.shutdown.enabled=true 

Podemos deshabilitar todos los puntos finales y luego incluir solo aquellos que necesitamos. En la siguiente configuración, todos los puntos finales, excepto la info , se desactivarán.

 management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true 

Acceso a puntos finales a través de HTTP

Vayamos a la URL localhost : 8080 / actuator y miremos los puntos finales disponibles.

Nota: uso Postman para las pruebas, ya que muestra JSON en un formato bien estructurado. Puede usar cualquier otra herramienta o simplemente un navegador.



Como ya notó, aquí solo se muestran los puntos finales de health e info . Porque estos son los únicos puntos finales a los que se puede acceder de forma predeterminada a través de http. El acceso a través de http a otros puntos finales está cerrado de forma predeterminada por razones de seguridad, ya que pueden contener información confidencial y, por lo tanto, pueden verse comprometidos.

Acceso a puntos finales específicos

Si deseamos proporcionar acceso vía web (http) a otros puntos finales, entonces debemos realizar las siguientes entradas en el archivo application.properties .

 management.endpoints.web.exposure.include=<    ><a href="http://localhost:8080/actuator"></a> 

Un ejemplo :

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

Ahora, después de agregar la entrada anterior a application.properties , volvamos a http: // localhost: 8080 / actuator

Como vemos en la captura de pantalla a continuación, también se incluye el punto final env .



Acceso a todos los puntos finales.

Si queremos incluir todos los puntos finales, podemos usar el signo * como se muestra a continuación.

 management.endpoints.web.exposure.include=* 



Acceso a todos menos algunos puntos finales

Las dos entradas siguientes activan todos los puntos finales, pero deshabilitan el punto final env.

 management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env 





Deshabilitar todos los puntos finales HTTP

Si no desea proporcionar puntos finales a través de HTTP, puede hacerlo configurando lo siguiente en el archivo application.properties :

 management.server.port=-1 

más o menos:

 management.endpoints.web.exposure.exclude=* 

Configurar URL para acceder a puntos finales

Por defecto, se puede acceder a todos los puntos finales a través de URL /actuator en las direcciones del formulario /actuator/{id} . Sin embargo, puede cambiar la ruta /actuator base utilizando la siguiente propiedad en application.properties .

 management.endpoints.web.base-path 

Por ejemplo, si desea hacer que la URL base sea /monitor lugar de /actuator puede hacer esto de la siguiente manera:

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



En este caso, todos los puntos finales estarán disponibles como /monitor/{id} lugar de /actuator/{id}



Puntos finales Actuador de arranque de resorte

Analicemos algunos de los puntos finales más importantes.

/ salud

El punto final de health proporciona el estado general de la aplicación: si está en funcionamiento o no. Esto es muy importante para monitorear el estado de la aplicación cuando está en producción. Este punto final puede integrarse con aplicaciones de monitoreo y será muy útil para determinar el estado de las aplicaciones en tiempo real.

La cantidad de información proporcionada por el punto final de management.endpoint.health.show-details depende de la propiedad management.endpoint.health.show-details en el archivo application.properties .

Si management.endpoint.health.show-details=never , entonces no se muestra información adicional. En este caso, solo verá lo siguiente (este es el comportamiento predeterminado).



Si management.endpoint.health.show-details=always , se muestra información adicional a todos los usuarios. Como vemos en la respuesta a continuación, tenemos información sobre el espacio en disco (diskSpace). Si su aplicación está conectada a una base de datos, también verá información sobre el estado de la base de datos.



Si management.endpoint.health.show-details=when-authorized , se mostrará información adicional solo a usuarios autorizados. La autorización se puede configurar mediante la propiedad management.endpoint.health.roles .

Indicadores preestablecidos

Spring Boot Actuator tiene muchos "indicadores de salud" configurados automáticamente (HeathIndicators) para probar el estado de varias partes de la aplicación. Por ejemplo, DiskspaceHealthIndicator proporciona información de espacio en disco. Si está utilizando MongoDB, MongoHealthIndicator verificará la base de datos de Mongo (si el servidor se está ejecutando o no) y muestra la información correspondiente. Por defecto, el estado de la aplicación final lo determina el HealthAggregator , que simplemente ordena la lista de estados proporcionada por cada HealthIndicator . El primer estado de la lista ordenada se utiliza como el estado final de la aplicación.

Deshabilitar todos los indicadores preconfigurados

Los "indicadores de salud" descritos anteriormente están habilitados de manera predeterminada, sin embargo, puede desactivarlos utilizando la siguiente propiedad:

 management.health.defaults.enabled=false 

Deshabilitar un solo indicador

Alternativamente, puede deshabilitar un HealthIndicator separado, como se muestra a continuación, por ejemplo, para deshabilitar la comprobación del espacio en disco:

 management.health.diskspace.enabled=false 

Nota: el identificador de cualquier HealthIndicator será el nombre del bean sin el sufijo HealthIndicator .

Por ejemplo :

 DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource 

y así sucesivamente ...

Escribir sus indicadores (HealthIndicator)

Junto con el HealthIndicator proporcionado por Spring Boot Actuator, podemos crear indicadores de estado personalizados. Para hacer esto, debe crear una clase que implemente la interfaz HealthIndicator , implemente su método health() y devuelva Health como respuesta con la información relevante, como se muestra a continuación:

 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code. // int errorCode = performHealthCheck(); if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } } 

Vayamos al punto final de salud nuevamente y veamos si nuestro indicador se refleja o no.



Vemos nuestro indicador.

Estado de un solo componente

También puede verificar el estado de un componente individual. En el ejemplo anterior, vimos el indicador que escribimos y diskSpace.

Si queremos ver solo el estado del disco, podemos usar la siguiente URL:

http: // localhost: 8080 / actuator / health / diskSpace



/ info

El punto final de info proporciona información general sobre la aplicación que recibe de archivos como build-info.properties o git.properties , o de las propiedades especificadas en application.properties .

Como no existe tal archivo en nuestro proyecto, la respuesta estará vacía, como se muestra a continuación:



Spring Boot Actuator muestra información de compilación si META-INF/build-info.properties . Este archivo de información del proyecto se crea en el momento de la build-info mediante el destino de build-info . Aquí también puede agregar un número arbitrario de propiedades adicionales.

pom.xm un objetivo de build-info para spring-boot-maven-plugin a pom.xm l.

 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>UTF-8</encoding.source> <encoding.reporting>UTF-8</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin> 

Ahora, veamos nuevamente el punto final de info y veamos la información del ensamblaje, como se muestra a continuación:



Además, podemos agregar información de la aplicación con la clave de info a application.properties , como se muestra a continuación, y se mostrará en el punto final /info .

 info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT 



/ frijoles

El punto final de beans muestra todos los beans definidos en el contenedor Spring con la siguiente información sobre cada bean:

 aliases :    scope :   type :    resource :  (),     dependencies :    

Por ejemplo, creé un RestController llamado TestController e TestController un componente llamado TestService

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private TestService testService; @GetMapping("/messages") public String getMessage() { return "Hello"; } } import org.springframework.context.annotation.Configuration; @Configuration public class TestService { } 

Puede ver cómo se muestra esto para testController en la siguiente captura de pantalla.



/ configprops
El configProps muestra todos los @ConfigurationProperties anotados por @ConfigurationProperties .



En la captura de pantalla anterior, vemos dos beans que se definen en Spring Framework y se anotan con @ConfigurationProperties y, por lo tanto, se muestran en este punto final.

La captura de pantalla siguiente muestra el código fuente de HttpTraceProperties anotado por @ConfigurationProperties .



/ env

El punto final env proporciona toda la información medioambiental en el siguiente orden:

Propiedades del sistema
JVM dependiente (plataforma independiente)
Entorno del sistema o variables
entorno
depende de la operación
sistema (dependiente de la plataforma)
Configuraciones de nivel de aplicación
definido en
application.properties



/ heapdump

El punto final de heapdump vuelca el montón de la aplicación. Este punto final devuelve datos binarios en formato HPROF. Como generalmente se devuelven muchos datos, debe guardarlos y analizarlos.

/ loggers

El loggers proporciona a los registradores de aplicaciones información sobre su nivel de registro configurado (nivel configurado) y su nivel efectivo (nivel efectivo). Si el nivel configurado no se especifica para el registrador y su padre (nulo), el nivel del registrador raíz será un nivel efectivo.

La propiedad de level indica qué niveles de registro son compatibles con el marco de registro.



Para obtener información para un registrador específico, pase el nombre (id) del registrador en la URL después del /loggers , como se muestra a continuación:

http: // localhost: 8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication



/ métricas

El punto final de metrics muestra todas las métricas que puede rastrear para su aplicación.



Comprobación de métricas individuales

Puede ver una sola métrica pasándola en la url después de /metrics , como se muestra a continuación:

http: // localhost: 8080 / actuator / metrics / jvm.memory.used



Referencias

docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
docs.spring.io/spring-boot/docs/current/actuator-api/html

De acuerdo con la tradición establecida, estamos esperando sus comentarios e invitamos a todos a la jornada de puertas abiertas , que se realizará el 23 de mayo.

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


All Articles