lunes, 11 de junio de 2018

Actuator

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 
  • ....
Como nota, el endpoint "/refresh" será importante en otro post donde hablaremos de la externalización de configuraciones vía "Config Server".

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 *

    (*) 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