Spring Boot Actuator con Prometheus y Grafana

Monitoring

Monitoring


En esta nueva entrada, siguiendo con el artículo que ya vimos sobre Spring Boot Actuator, vamos a ver Métricas de Spring Boot Actuator con Prometheus y Grafana.

Antes de nada, vamos a hablar un poco sobre Prometheus y Grafana.

¿Qué es Prometheus?

Prometheus es un sistema de monitorización open-source, básicamente tiene las siguientes características:

  • Una sencilla e intuitiva interfaz de usuario para visualización y configuración de métricas.
  • Bases de datos time-series (serie de puntos almacenados en el tiempo) para almacenar todas las métricas.
  • Definición de alertas de una manera precisa.
  • Permite la integración haciendo uso de librerías.
  • La información es configurada con un intervalo de tiempo para ser volcada y guardada.

¿Qué es Grafana?

Grafana es un proyecto de software libre que nos permite la visualización y análisis de métricas. Podemos crear cuadros de mando y gráficos partiendo de diferentes fuentes y bases de datos time-series algunos de esos orígnes de datos son Graphite, InfluxDB, OpenTSDB, ElasticSearch o Prometheus,

Configuración de Spring

Añadir dependencia de Prometheus en nuestro Pom.xml

Antes de comenzar a añadir la configuración de Prometheus, debemos asegurarnos tener un proyecto Spring Boot con Actuator correctamente configurado.

Como ya hablamos en nuestra anterior entrada de Spring Boot Actuator, Spring usa micrometer para integrar métricas con sistemas de monitorización externos, para ello vamos a incorporar en nuestro Pom.xml de nuestra aplicación Spring Boot la siguiente dependencia:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
  <version>${micrometer.version}</version>
</dependency>

Una vez que añadimos esta dependencia, se autoconfigurará Prometheus para poder exportar métricas para que puedan ser consumidas por un servidor de Prometheus.

Al añadir esta dependencia se añade y configura PrometheusMeterRegistry y un CollectorRegistry, a partir de este momento, nuestras métricas estarán disponibles mediante Spring Boot Actuator a través del endpoint /actuator/prometheus. Y en el que prometheus hará un scrape constante para recolectar métricas.

Para que este nuevo endpoint funcione se debe de activar de la siguiente manera:

management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true

Si estamos usando Spring Boot 2 debemos de activar los endpoint de actuator en nuestro fichero de properties.

Prometheus endpoint en Spring Boot Actuator

A través del endpoint http://localhost:8080/actuator podemos ver todas las métricas que tenemos:

Spring Boot Actuator
Spring Boot Actuator

La imagen anterior nos muestra todos los endpoint de actuator, para poder visualizarlos, ya que no están todos activos por defecto hay que activarlos de la siguiente manera:

management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*

Y a continuación vamos a activar Prometheus en nuestra aplicación, tal y como hemos comentado en el anterior punto:

management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
Spring Boot Actuator con Prometheus
Spring Boot Actuator con Prometheus

Ahora, al volver a ejecutar el endpoint de /actuator podemos ver como se ha añadido las métricas de Prometheus, a las que vamos a poder acceder a través del enlace http://localhost:8080/actuator/prometheus

Spring Boot Actuator con Prometheus
Spring Boot Actuator con Prometheus

Una vez que ejecutamos el endpoint de actuator para prometheus podemos ver todas las métricas que se van a volvar.

Configurando Prometheus y Grafana con Spring Boot

Configurar Prometheus

Descargar Imagen de Prometheus

Para poder continuar con la configuración de Prometheus con Spring lo primero es descargar una imagen docker:

$ docker pull prom/prometheus

Editar el YML de Prometheus

Vamos a crear un nuevo fichero llamado prometheus.yml, en el que vamos a establecer toda la configuración y para que pueda analizar las métricas de Spring Boot Actuator y cada cuanto tiempo:

global:
  scrape_interval:     15s # El intervalo en el que se traerá las métricas
  evaluation_interval: 15s # Evaluará las reglas cada 15 segundos, por defecto es cada minuto

# Se cargarán las reglas una vez y cada tiempo establecido en evaluation-interval serán analizadas
rule_files:
  # - "rule_A.yml"
  # - "rule_B.yml"


# Una configuración para poder capturar(scrape) las métricas tiene un endpoint:
scrape_configs:
  # El nombre del job se añade como como una etiqueta.
  - job_name: 'prometheus'

    # Sobreescribimos el scrape global por defecto cada 5 segundos.
    scrape_interval: 5s

    static_configs:
      - targets: ['127.0.0.1:9090']

  # Detalles para conectar Prometheus con Spring Boot Actuator y poder capturar las métricas
    - job_name: 'spring-actuator'
   
    # Endpoint de actuator. 
    metrics_path: '/actuator/prometheus'

    #Con que frecuencia se hará scrape
    scrape_interval: 5s

    #el endpoint final, en nuestro caso usamos docker, pero sino usas docker será localhost por ejemplo, o el HOST en el que lo tengas configurado
    #localhost sino se usa DOCKER
    static_configs:
    - targets: ['HOST_IP:8080']

El fichero de arriba lo hemos hecho a partir de la documentación de Prometheus. Como nota importante la que hemos comentado arriba dentro del fichero tener en cuenta y reemplazar el HOST_IP por la IP del host en el que se encuentra la aplicación de Spring.

Arrancanco Prometheus

A continuación vamos a arrancar prometheus con el fichero Prometheus.yml que hemos creado, para ello se lo pasaremos por parámetro.

$ docker run -d --name=prometheus -p 9090:9090  -v <PATH/prometheus.yml>:/etc/prometheus/prometheus.yml  prom/prometheus -- 
config.file=/etc/prometheus/prometheus.yml
Tener en cuenta de eliminar <PATH/prometheus.yml> por tu ruta

Visualizar Métricas en Prometheus

Con la imágen de Prometheus levantada y con nuestra configuración de Prometheus, vamos a nuestra navegador a la url localhost:9090.

Gráfica en Prometheus

Si no consigues ver nada, puede ser por alguna mala configuración, lo mejor será asegurarse en la opción status/target del menú superior y ver que todo esta UP:

Estado de Prometheus

Ya tenemos nuestra aplicación corriendo con Prometheus, ahora vamos a conectar Grafana para que recoja las métricas que estamos volcando a Prometheus.

Configurar Grafana

Descargar Imagen de Prometheus

Vamos a descargarnos la imagen de grafana:

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana

Después de ejecutar nuestro docker podremos ya acceder a grafana escribiendo en un navegador localhost:3000. No olvidemos que la contraseña y el usuario son los típicos admin admin

Configurar Grafana para poder importar métricas de Prometheus

Una vez dentro de Grafana en el panel derecho pulsa sobre Configuration/Data Sources y selecciona Prometheus:

Grafana configurando Prometheus
Grafana configurando Prometheus

Crear Dashboard en Grafana

Pulsamos sobre el botón más del menú derecho y añadimos un dashboard en el que establecemos una query, en nuestro caso hemos añadido process_cpu_usage

Grafana Dashboard
Grafana Dashboard

Salvamos el panel y lo tendremos en la pantalla principal.

Conclusión

Spring Boot Actuator con Prometheus y Grafana es una buena solución para poder visualizar las métricas de una forma fácil intuitiva y dinámica, y como hemos visto en el artículo su configuración no resulta muy complicada.

Todo el código necesario se encuentra en nuestro repositorio de github

Otros artículos que te pueden interesar.

Spring Boot Actuator uso y configuración


1 pensamiento sobre “Spring Boot Actuator con Prometheus y Grafana

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *