En este artículo, te mostraré cómo monitorear una aplicación Spring Boot exponiendo métricas de la aplicación, recopilándolas con Prometheus y visualizándolas en Grafana.
Imagina una aplicación crítica con un gran número de usuarios diarios. Es importante comprender el estado de la aplicación, ya que esto puede ayudarte a identificar y abordar de manera proactiva posibles problemas de rendimiento. Sin un monitoreo adecuado, no tendrías visibilidad sobre la salud, las métricas o el estado general de la aplicación. Aquí es donde el monitoreo se vuelve crucial.
Spring Boot proporciona un conjunto de herramientas listas para producción que permiten monitorear nuestra aplicación, como Spring Boot Actuator y Micrometer. Micrometer nos ayuda a recopilar métricas de manera sencilla y se integra perfectamente con Actuator.
Una vez que nuestra aplicación esté lista para exponer sus métricas, hay algunas herramientas que pueden ayudarnos a recopilar y mostrar estos datos:
Si deseas seguir este tutorial, necesitarás los siguientes requisitos previos:
Necesitas agregar las siguientes dependencias al archivo `pom.xml` de tu aplicación:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.13.6</version> </dependency>
Después de agregar estas dependencias, debes especificar en el archivo application.properties
qué endpoints deseas exponer:
management.metrics.tags.application=${spring.application.name} management.endpoints.web.exposure.include=info,health,prometheus
Una vez que hayas configurado las propiedades de la aplicación y agregado las dependencias, tu aplicación expondrá algunos endpoints con estas métricas. Puedes verlos en la siguiente URL: http://localhost:8080/actuator
Tambié puedes acceder a las métricas de Prometheus en la siguiente URL, http://localhost:8080/actuator/prometheus
Estas métricas están en un formato que Prometheus puede entender y utilizar.
Para configurar fácilmente Grafana y Prometheus, utilizaremos Docker Compose para gestionar estas herramientas.
docker-compose.yml
Contenido del docker-compose.yml
:
services: prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana:latest ports: - "3000:3000" environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin
prometheus.yml
Recuerda modificar la configuración del volumen para que apunte a la ruta relativa donde guardaste el archivo
prometheus.yml
. En este ejemplo, se encuentra en ./config/prometheus/prometheus.yml
.
Prometheus.yml
:
scrape_configs: - job_name: 'spring-boot-monitoring-app' metrics_path: '/actuator/prometheus' static_configs: - targets: ['host.docker.internal:8080']
Este archivo define un trabajo (job) de Prometheus que apunta a nuestra aplicación Spring Boot ejecutándose en http://localhost:8080. Este trabajo es responsable de recopilar las métricas en http://localhost:8080/actuator/prometheus.
Finalmente, para usar Grafana y Prometheus, ejecuta el siguiente comando en el directorio donde se encuentra el archivo docker-compose.yml
:
docker compose up
Una vez que ejecutes el comando, puedes acceder a Prometheus en http://localhost:9090/targets. En este endpoint, verás los targets configurados en Prometheus. Los targets son fuentes de datos que Prometheus puede consultar para recopilar métricas.
Como puedes ver en la última imagen, un target está apuntando a nuestro ejemplo de aplicación Spring Boot ejecutándose en http://localhost:8080, y su estado es "UP".
La primera vez que accedemos a Grafana, necesitamos usar las credenciales definidas en el archivo docker-compose.yml
. Nuestras credenciales son admin/admin. Más adelante, será necesario cambiar la contraseña, pero inicialmente puedes ingresar con la misma.
En Grafana, puedes configurar diversas fuentes de datos (datasources), incluyendo bases de datos de series temporales como Prometheus, bases de datos relacionales, bases de datos de logs y más. Grafana te permite realizar consultas a estas fuentes de datos y extraer información relevante.
En Grafana, puedes configurar diversas fuentes de datos (datasources), incluyendo bases de datos de series temporales como Prometheus, bases de datos relacionales, bases de datos de logs y más. Grafana te permite realizar consultas a estas fuentes de datos y extraer información relevante.
http://prometheus:9090
.Es bien conocido que Grafana es una herramienta madura que ya ha sido explorada para muchas soluciones. Por esa razón, podemos encontrar tableros preconstruidos para diferentes aplicaciones en Grafana Dashboards. Aquí, podemos encontrar tableros para todo tipo de herramientas como Jira, bases de datos como MongoDB y aplicaciones como Spring Boot. En este tutorial, utilizaremos el tablero Spring Boot 2.1 System Monitor. Podemos descargar este tablero como un archivo JSON e importarlo en Grafana.
¡Felicidades! 🎉 Este es el final de este artículo. Ahora tienes el conocimiento para monitorear tu aplicación Spring Boot con Grafana y Prometheus. ¡Recuerda seguir explorando estas poderosas herramientas para mejorar tus capacidades de visualización de datos y monitoreo!