Dentro de las múltiples apis incluidas en el modelo de
desarrollo Spring Boot / Spring Cloud disponemos del starter actuator.
Este starter provee de una herramienta sencilla, y
“out-of-the-box” (lista para usarse) de monitorización. También expone
información de ejecución de nuestra app via api rest para ser invocada en
cualquier navegador o a través del comando curl.
Habilita algunos endpoints que permiten extraer información
en runtime que puede ser valiosa en según que situaciones.
Pasemos a la configuración (se puede descargar el código completo de "https://gitlab.com/gincol-blog/actuator-example")
pom.xml
Debemos incluir, como cualquier otra app Springboot la
referencia al “spring-boot-starter-parent”:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
Además, hemos de includ las siguientes dependencias:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
application.yml
Podemos tener un fichero por entorno, pero en todo caso, el contenido básico en lo que se refiere al actuator sería el siguiente:
management:
endpoints:
web:
exposure:
include: '*'
Hemos puesto ‘*’ para que nos incluya todos los endpoints.
Si no ponemos la configuración anterior, sólo estarán activos dos endpoints:
- /health
- /info
En el “include” podríamos añadir uno a uno aquellos que nos
interesen. Al poner ‘*’ activamos todos, a saber, los antes citados y además
- /auditevents
- /beans
- /conditions
- /configprops
- /env
- /env/{toMatch}
- /loggers
- /loggers/{name}
- /heapdump
- /threaddump
- /metrics
- /metrics/{requiredMetricName}
- /scheduledtasks
- /httptrace
- /mappings
- /refresh
- ....
java
En la clase main de Spring boot pondremos la habitual
anotación “@SpringBootApplication”.
De entrada, esto es todo.
Pruebas
Para verlo en acción pongamos en un navegador la url http://localhost:8080/actuator. Esta
url debe customizarse a la que nosotros tengamos en la aplicación, es decir, si
hubiésemos definido otro puerto o contexto, etc… En nuestro caso, con puerto
estándar y sin contexto es la indicada. Observaremos la siguiente salida:
La
pantalla en realidad es mucho más grande. Contiene la lista de endpoints
activos, que son más de los que la captura muestra.
Detalle
Customicemos uno de los endpoints, en concreto el “/info”.
Si lo invocamos tal cual nos devolverá una salida vacía (http://localhost:8080/actuator/info).
Esto es así porque no hemos indicado que información queremos ver.
Probemos ahora en nuestro aplicación.yml la siguiente
configuración:
info:
app:
name: '@project.artifactId@'
description: 'Ejemplo actuator'
version: '@project.version@'
java-vendor: ${java.specification.vendor}
java-version: ${java.specification.version}
pepe: jose *
pepe: jose *
(*) Como muestra de que "cabe" cualquier atributo/valor hemos puesto "pepe: jose" a modo de verificación de la versatilidad de esta configuración.
Tras el reinicio de nuestra app veremos:
Miscelanea
Activemos el endpoint “/shutdown”, lo cual permitirá parar
nuestra app vía url. Será útil si tenemos procesos main arrancados realizando
alguna tarea y queremos pararlos en algún momento sin hacer un “kill”.
Para ello, añadimos a nuestro application.yml la siguiente configuración
management:
endpoint:
shutdown:
enabled:
true
y ahora invocamos la url “http://
localhost:8080/actuator/shutdown” vía curl
curl -X POST
http:// localhost:8080/actuator/shutdown
Veremos que la aplicación se para
y deja de responder. El log que deja la respuesta al curl es esta:
{"message":"Shutting
down, bye..."}
Más info
Se pueden consultar los siguientes enlaces
https://spring.io/guides/gs/actuator-service/
http://www.baeldung.com/spring-boot-actuators
No hay comentarios:
Publicar un comentario