¡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.

- ¿Qué es el actuador de primavera?
- ¿Cómo agregar Spring Actuator al proyecto Maven o Gradle?
- Cree un proyecto Spring Boot con una dependencia Spring Actuator.
- 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 ActuatorAvancemos 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 SpringComo dijimos anteriormente, Spring Actuator proporciona varios puntos finales que podemos usar para monitorear el estado de la aplicación.
Habilitación de puntos finalesPor 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 HTTPVayamos 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íficosSi 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 / actuatorComo 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 finalesLas 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 HTTPSi 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 finalesPor 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 resorteAnalicemos algunos de los puntos finales más importantes.
/ saludEl 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 preestablecidosSpring 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 preconfiguradosLos "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 indicadorAlternativamente, 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;
Vayamos al punto final de salud nuevamente y veamos si nuestro indicador se refleja o no.

Vemos nuestro indicador.
Estado de un solo componenteTambié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
/ infoEl 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
/ frijolesEl 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.
/ configpropsEl
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
.
/ envEl punto final
env
proporciona toda la información medioambiental en el siguiente orden:
/ heapdumpEl 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.
/ loggersEl
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étricasEl punto final de
metrics
muestra todas las métricas que puede rastrear para su aplicación.
Comprobación de métricas individualesPuede 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
Referenciasdocs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.htmldocs.spring.io/spring-boot/docs/current/actuator-api/htmlDe 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.