CodeGym /Cursos /Módulo 5. Spring /Lección 258: Práctica: configuración del monitoreo de mét...

Lección 258: Práctica: configuración del monitoreo de métricas con Prometheus

Módulo 5. Spring
Nivel 20 , Lección 7
Disponible

En las lecciones anteriores nos familiarizamos con el concepto Observability (observabilidad) en sistemas de microservicios, aprendimos lo importante que es la capacidad de observar el sistema para su funcionamiento estable y escalabilidad. Entendimos que el trazado distribuido y el logging centralizado son herramientas clave para analizar el comportamiento del sistema. Vimos Spring Cloud Sleuth y Zipkin para rastrear peticiones a través de microservicios, y también estudiamos el ELK-stack para logging. Ahora es momento de pasar a la recolección y el monitoreo de métricas del sistema usando la herramienta popular Prometheus.

Imagina un servidor como un deportista. Las métricas son su pulso, presión y nivel de oxígeno. Si no sigues esos indicadores, ¿cómo vas a saber que está cerca de "correr hasta el fallo"? El monitoreo de métricas permite:

  • Saber cómo funciona la aplicación en tiempo real.
  • Detectar fallos con antelación, antes de que los usuarios empiecen a quejarse.
  • Encontrar cuellos de botella en el rendimiento.
  • Aumentar la estabilidad general del sistema.

Prometheus es el "médico" que recoge las métricas de tu aplicación y te ayuda a mantenerla "saludable".


Configuración práctica de Prometheus

Paso 1: Instalación de Prometheus

Prometheus es un servicio que recopila datos vía HTTP. Las métricas son publicadas por los microservicios en un formato que Prometheus "entiende". Para instalar Prometheus usamos la máquina local o un contenedor Docker.

Instalación usando Docker

  1. Asegúrate de tener instalado Docker.
  2. Arranca Prometheus con el comando:
    docker run --name prometheus -d -p 9090:9090 prom/prometheus
    
  3. Abre el navegador y ve a http://localhost:9090 para comprobar si Prometheus está funcionando.

Configuración del archivo de Prometheus

Prometheus usa el archivo prometheus.yml para su configuración. Indicaremos a Prometheus dónde buscar nuestros microservicios (u otras fuentes de métricas).

Crea el archivo prometheus.yml con el siguiente contenido:


global:
  scrape_interval: 15s  # Con qué frecuencia recopilar datos

scrape_configs:
  - job_name: 'spring-boot-app'
    static_configs:
      - targets: ['localhost:8080']  # Dirección de tu aplicación

Si ejecutas Prometheus con Docker, monta la configuración:

docker run --name prometheus -d -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Paso 2: Configurar la aplicación Spring Boot

Agregar la dependencia Actuator

Spring Boot Actuator permite que tu aplicación publique métricas compatibles con Prometheus. Añade la dependencia en el pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

También añadiremos la dependencia para la integración con Prometheus:


<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Configurar Actuator en application.yml

Habilita Actuator y configúralo para publicar métricas:


management:
  endpoints:
    web:
      exposure:
        include: '*'  # Habilitar todos los endpoints de Actuator
  endpoint:
    metrics:
      enabled: true  # Activar métricas
  metrics:
    export:
      prometheus:
        enabled: true  # Habilitar exportación para Prometheus

Tras esto, en tu aplicación aparecerá el endpoint /actuator/prometheus, que devolverá métricas en formato Prometheus.

Comprobar la conexión

Arranca la aplicación Spring Boot (por ejemplo, en el puerto 8080), luego abre http://localhost:8080/actuator/prometheus. Deberías ver una lista de métricas con un formato similar a este:


# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area.
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 1.23456E7
jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 6.789E7
...

Si ves la salida de métricas, ¡todo funciona correctamente!

Paso 3: Integración Prometheus y Spring Boot

Ahora hay que decirle a Prometheus dónde encontrar nuestra aplicación. Abre el archivo prometheus.yml y añade la siguiente configuración:


scrape_configs:
  - job_name: 'spring-boot-app'
    static_configs:
      - targets: ['host.docker.internal:8080']  # O simplemente 'localhost:8080' fuera de Docker

Después de guardar los cambios reinicia el contenedor de Prometheus:

docker restart prometheus

En la interfaz de Prometheus (http://localhost:9090) podrás ver el job spring-boot-app y empezar a consultar métricas.

Paso 4: Visualización de métricas (un poco de magia)

Aunque Prometheus es genial para recopilar datos, para analizar y visualizar es mejor usar Grafana. La configuración de Grafana será tema de la siguiente lección, pero echemos un vistazo rápido a cómo se ven las métricas de Prometheus en Grafana.

  1. Instala Grafana:
    docker run -d --name=grafana -p 3000:3000 grafana/grafana
    
  2. Abre la interfaz de Grafana en http://localhost:3000 y añade Prometheus como data source.
  3. Crea un dashboard y añade gráficos de métricas como http_server_requests_seconds_count (cantidad de peticiones HTTP) o jvm_memory_used_bytes.

¿Qué hacer si algo sale mal?

A veces puedes encontrarte con problemas. Por ejemplo:

  • Prometheus no muestra métricas. Revisa el archivo prometheus.yml y asegúrate de que la dirección indicada (por ejemplo, localhost:8080) sea accesible.
  • El endpoint /actuator/prometheus no genera métricas. Asegúrate de que las dependencias Actuator y Micrometer están añadidas al proyecto y que la configuración en application.yml es correcta.
  • Prometheus no arrancó. Comprueba que el puerto 9090 esté libre, o cambia el puerto en la configuración de Docker.

Aplicación real en el trabajo

Esta técnica de monitoreo se usa ampliamente en producción. Por ejemplo:

  • Puedes monitorizar la cantidad de peticiones HTTP y el tiempo de procesamiento para encontrar cuellos de botella en el rendimiento.
  • Monitorizar la memoria y los threads de la JVM permite prevenir situaciones críticas como OutOfMemoryError.
  • Prometheus y Grafana pueden usarse para configurar "alerts" (notificaciones) y reaccionar instantáneamente ante problemas.

Ahora sabes cómo integrar Prometheus con aplicaciones Spring Boot y empezarás a entender por qué logging y métricas son los ojos y oídos de tu sistema.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION