📈 Prometheus Cheatsheet Completo 📈

Prometheus es una solución de monitoreo de código abierto y sistema de alertado. Se especializa en recolectar métricas de “series de tiempo” (time series data) y ofrece un modelo de datos multidimensional, un lenguaje de consulta flexible (PromQL) y capacidades de alertado.


1. 🌟 Conceptos Clave


2. 🛠️ Arquitectura de Prometheus

  1. Prometheus Server:
    • Retriever: Scrapea métricas de los targets.
    • Time Series Database (TSDB): Almacena las métricas scrapeadas.
    • HTTP Server: Para la UI, el API y los Pushgateway.
    • Rule Manager: Evalúa reglas de grabación y reglas de alerta.
  2. Exporters: Aplicaciones o librerías que exponen métricas en el formato Prometheus desde sistemas que no lo hacen nativamente (ej. Node Exporter para métricas de host, JMX Exporter para JVMs).
  3. Pushgateway (Opcional): Para métricas de trabajos de corta duración que no pueden ser scrapeadas directamente. Los jobs envían sus métricas al Pushgateway, y Prometheus las scrapea del Pushgateway.
  4. Alertmanager: Recibe alertas de Prometheus, las agrupa, silencia y las envía a los destinatarios.
  5. Service Discovery: Prometheus puede descubrir Targets dinámicamente de sistemas como Kubernetes, Consúl, EC2, etc.

3. ⚙️ Instalación y Configuración Básica

3.1. Con Docker (Recomendado para Desarrollo/Pruebas)

docker run -d --name prometheus -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:v2.48.0 # Usar la versión específica

3.2. Archivo de Configuración (prometheus.yml)

Define cómo Prometheus scrapea los targets, evalúa las reglas y almacena los datos.

# prometheus.yml
global:
  scrape_interval: 15s # Intervalo por defecto para raspar targets
  evaluation_interval: 15s # Intervalo por defecto para evaluar reglas

# Reglas de alerta
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093'] # Dirección del Alertmanager

rule_files: # Archivos que contienen reglas de grabación y alerta
  - "alert.rules.yml" # Ejemplo

scrape_configs: # Cómo Prometheus encuentra y scrapea los targets
  - job_name: "prometheus" # Monitorear el propio Prometheus
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node_exporter" # Monitorear hosts (si tienes node_exporter ejecutándose)
    static_configs:
      - targets: ["localhost:9100"] # Puerto por defecto de Node Exporter

  - job_name: "my_java_app" # Monitorear tu aplicación Java (ej. Spring Boot Actuator)
    metrics_path: "/actuator/prometheus" # Endpoint de métricas de Actuator
    static_configs:
      - targets: ["localhost:8080"] # Dirección de tu aplicación
        labels:
          application: "my-app-service" # Etiquetas personalizadas para este job

3.3. Acceder a la UI de Prometheus


4. 📈 PromQL (Prometheus Query Language) Cheatsheet

Lenguaje funcional potente para consultar métricas.

4.1. Tipos de Datos

4.2. Selectores de Métricas y Etiquetas

4.3. Operadores de Rango

4.4. Operadores de Agregación (Agregadores)

Operan sobre un vector instantáneo. Agregan sobre dimensiones de etiquetas.

4.5. Operadores de Vector a Vector / Vector a Escalar

4.6. Funciones Comunes


5. 🔔 Alerting (Alertmanager)

Prometheus evalúa reglas de alerta y envía alertas a Alertmanager. Alertmanager luego las agrupa, silencia y las enruta.

5.1. Archivo de Reglas (alert.rules.yml)

# alert.rules.yml
groups:
  - name: my_app_alerts
    rules:
      - alert: HighRequestLatency # Nombre de la alerta
        expr: rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m]) > 0.5 # Latencia promedio > 0.5s
        for: 1m # La condición debe ser verdadera durante 1 minuto
        labels: # Etiquetas adicionales para la alerta
          severity: critical
        annotations: # Anotaciones para la alerta
          summary: "Alta latencia de solicitud en servicio {{ $labels.service_name }}"
          description: "La latencia promedio para el servicio {{ $labels.service_name }} ha excedido 0.5 segundos por más de 1 minuto."

      - alert: ServiceDown # Alerta si un servicio está inactivo
        expr: up{job="my_java_app"} == 0 # 'up' es una métrica de Prometheus que es 1 si el target está UP, 0 si está DOWN
        for: 30s
        labels:
          severity: major
        annotations:
          summary: "Servicio {{ $labels.job }} está inactivo"
          description: "El servicio {{ $labels.job }} en instancia {{ $labels.instance }} está inactivo por más de 30 segundos."

5.2. Configuración de Alertmanager (alertmanager.yml)

# alertmanager.yml
global:
  resolve_timeout: 5m

route:
  receiver: 'default-receiver' # Receptor por defecto
  group_by: ['alertname', 'instance'] # Agrupar alertas por nombre de alerta e instancia
  group_wait: 30s # Esperar 30s para más alertas antes de enviar
  group_interval: 5m # Intervalo para enviar nuevas alertas en un grupo
  repeat_interval: 3h # Intervalo para reenviar alertas resueltas

receivers:
  - name: 'default-receiver'
    email_configs: # Configuración de email
      - to: 'your-email@example.com'
        send_resolved: true # Enviar notificación cuando la alerta se resuelve
  - name: 'slack-receiver'
    slack_configs: # Configuración de Slack
      - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXX'
        channel: '#alerts'
        send_resolved: true
        title: '[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.instance }}'
        text: '{{ .CommonAnnotations.description }}'

6. 📊 Integración con Grafana (Visualización)

Grafana es la herramienta de visualización de dashboards más popular para Prometheus.

  1. Instalar Grafana: Sigue las instrucciones de Grafana.
    docker run -d -p 3000:3000 grafana/grafana:latest
    # Accede a http://localhost:3000 (admin/admin)
    ```2.  **Añadir Fuente de Datos**: En Grafana UI, ve a "Configuration" -> "Data Sources" -> "Add data source" -> "Prometheus". Configura la URL de tu Prometheus (ej. `http://localhost:9090`).
  2. Crear Dashboards: Crea paneles en Grafana y usa PromQL para consultar tus métricas de Prometheus.

7. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una referencia completa de Prometheus, cubriendo sus conceptos esenciales, arquitectura, cómo configurarlo, el potente lenguaje de consulta PromQL, el sistema de alertado y las mejores prácticas para construir un sistema de monitoreo robusto y escalable.