Spring Boot Actuator con Prometheus y Grafana
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
Prometheus endpoint en Spring Boot Actuator
A través del endpoint http://localhost:8080/actuator podemos ver todas las métricas que tenemos:
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
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
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.
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:
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:
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
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”