CodeGym /Cursos /Módulo 5. Spring /Lección 257: Introducción a Prometheus para la monitoriza...

Lección 257: Introducción a Prometheus para la monitorización de métricas

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

Imagina que estás vigilando un restaurante enorme, donde cada cocina tiene su propio menú, su propia vajilla y sus propios pedidos. Quieres saberlo todo: quién y cuánto ha pedido, quién prepara los pedidos más rápido, dónde han ocurrido retrasos. Prometheus es como el camarero que corre por todas las cocinas, recoge toda la información, la procesa y te la trae en una bandeja bonita.

Prometheus es un sistema de monitorización y recolección de métricas de código abierto. Fue desarrollado en SoundCloud y se ha convertido en uno de los sistemas más populares para el monitoring y alerting de microservicios. Prometheus nos ayuda a recolectar, almacenar y analizar métricas, y luego usarlas para monitorizar el rendimiento, detectar cuellos de botella y prevenir problemas.


Características principales de Prometheus

Prometheus se diseñó pensando en los requisitos modernos de monitorización. Estas son sus principales "ventajas":

  1. Modelo pull — Prometheus solicita activamente métricas a las aplicaciones o servicios. Esto da más control que el modelo pasivo push.
  2. Lenguaje de consultas PromQL — para procesar y analizar métricas. Con PromQL puedes escribir consultas complejas y hacer cálculos agregados.
  3. Almacenamiento de datos — Prometheus almacena por sí mismo las series temporales (time series) y las organiza en su propia base de datos.
  4. Exporter de métricas — Prometheus permite añadir fácilmente nuevas métricas para monitorizar aplicaciones, servicios del sistema o hardware.
  5. Integración con herramientas de visualización — por ejemplo, Grafana para crear dashboards espectaculares.

Un chiste para relajar: "¿por qué a Prometheus no le gusta el modelo push? Porque la aplicación puede pensar: '¡Uy, no llegué a tiempo!'"


Arquitectura de Prometheus

Prometheus se basa en una arquitectura simple e intuitiva:


┌───────────┐   ┌───────────────┐
│   Target  │   │   Exporter    │
└───────────┘   └───────────────┘
       ▲                 ▲
       │ Pull Metrics    │
       │                 │
       ▼                 ▼
┌───────────────────────────┐
│       Prometheus Server   │
│ ┌───────────────────────┐ │
│ │Time Series Database   │ │
│ │(TSDB)                 │ │
│ └───────────────────────┘ │
└───────────────────────────┘
        │
        │ Query Data
        ▼
┌─────────────────────────┐
│     Visualization Tool  │
│   (e.g., Grafana)       │
└─────────────────────────┘
  1. Target (sistema objetivo) — son tus aplicaciones, a las que Prometheus hace peticiones HTTP para obtener métricas.
  2. Exporter (Exporter) — aplicación que convierte las métricas a un formato que Prometheus entiende. Por ejemplo, node_exporter para obtener métricas del sistema del servidor.
  3. Prometheus Server — el componente más importante, que recopila métricas, las almacena y ofrece una API para consultas.
  4. Visualization Tool — herramientas para visualizar datos. El propio Prometheus tiene una interfaz web básica, pero normalmente se usa Grafana.

¿Por qué Prometheus es tan popular?

Prometheus ganó popularidad por su simplicidad y potencia. Aquí tienes algunas razones por las que lo eligen:

  1. Open Source — sin coste por uso.
  2. Flexibilidad — puedes personalizar métricas para cualquier necesidad.
  3. Comunidad y plugins — hay muchas integraciones para Prometheus, incluyendo Spring Boot, Docker, Kubernetes y más. Incluso puedes encontrar un exporter para monitorizar tu cafetera favorita (sí, existen).
  4. Apto para microservicios — especialmente cuando los servicios cambian frecuentemente o aparecen nuevos.

Ejemplos de escenarios de uso

  • Quieres saber cuántas peticiones tu REST API procesa por minuto.
  • Necesitas monitorizar el uso de memoria o CPU en tiempo real.
  • Tienes que comprobar el tiempo de respuesta de microservicios y detectar cuellos de botella antes de que los usuarios empiecen a quejarse.

Conceptos básicos del funcionamiento de Prometheus

Antes de pasar a la práctica, vamos a aclarar los conceptos clave de Prometheus:

  1. Métricas (Metrics) — datos que se recopilan y analizan. Por ejemplo, "número de conexiones activas" o "tiempo de procesamiento de una petición".
  2. Series temporales (Time Series) — registros secuenciales de valores de métricas durante un periodo de tiempo.
  3. Labels (etiquetas) — datos adicionales sobre las métricas. Por ejemplo, una "etiqueta" para cada microservicio.
  4. Exporters (Exporters) — programas que preparan los datos para Prometheus.

Ejercicio práctico: Instalación y configuración de Prometheus

Preparar el entorno

  1. Asegúrate de que Docker está instalado (si no — es un buen momento para instalarlo).
  2. Descarga la imagen de Prometheus desde Docker Hub:
    docker pull prom/prometheus
    
  3. Arranca Prometheus:
    docker run -d -p 9090:9090 --name=prometheus prom/prometheus
    
  4. Abre el navegador y ve a http://localhost:9090. ¡Enhorabuena, Prometheus está funcionando!


Integración de Spring Boot con Prometheus

Ahora vamos a conectar nuestros microservicios a Prometheus. Para eso configuramos Spring Boot Actuator, que ya incluye métricas.

  1. Añade las dependencias en pom.xml:
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    
  2. Configura application.yml:
    management:
      endpoints:
        web:
          exposure:
            include: "*"
      metrics:
        export:
          prometheus:
            enabled: true
    
  3. Arranca tu aplicación Spring Boot. Ve a http://localhost:8080/actuator/prometheus. ¡Verás un montón de métricas!


Configurar Prometheus para recoger métricas de Spring Boot

  1. Crea el archivo de configuración prometheus.yml:
    
    global:
    scrape_interval: 15s
    
    scrape_configs:
    - job_name: "spring-boot-app"
    static_configs:
    - targets: ["host.docker.internal:8080"]
    
    Ten cuidado con la dirección host.docker.internal — eso funciona para Docker en Windows y macOS. En Linux usa localhost.
  2. Reinicia Prometheus:
    docker stop prometheus
    docker rm prometheus
    docker run -d -p 9090:9090 \
    -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
    --name=prometheus prom/prometheus
    
  3. Ve a la UI de Prometheus y ejecuta la consulta:
    http_server_requests_seconds_sum
    

    ¡Verás las métricas de tu aplicación!


En la siguiente lección veremos cómo complementar la monitorización con visualización usando Grafana, para convertir esos números secos en dashboards bonitos.

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