Integrar Prometheus para métricas de nodos

Integración de Prometheus para Métricas de Nodos

En el ecosistema de monitoreo de infraestructura, Prometheus se ha convertido en el estándar de facto para recopilar, almacenar y consultar métricas de sistemas distribuidos. En este artículo detallado exploraremos cómo integrar Prometheus para la obtención y el análisis de métricas de nodos (servidores físicos o virtuales), así como las mejores prácticas, seguridad y escalabilidad.

1. Arquitectura General

Antes de profundizar en la configuración, es crucial entender los componentes clave:

  • Prometheus Server: Se encarga de hacer scrape a los endpoints expuestos por los agentes y almacenar las métricas en una base de datos de series temporales.
  • Node Exporter: Agente ligero para Linux/Windows que expone métricas de sistema (CPU, memoria, disco, red).
  • Alertmanager: Gestiona las alertas generadas por las reglas definidas en Prometheus.
  • Grafana: Dashboard de visualización y análisis de métricas.

2. Instalación y Configuración de Node Exporter

Node Exporter es el componente que extrae métricas del sistema operativo. Los pasos básicos para instalarlo en un servidor Linux son:

  1. Descargar la última versión:
    wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-.linux-amd64.tar.gz
  2. Extraer y mover el binario:
    tar xzf node_exporter-.tar.gz
    sudo mv node_exporter-/node_exporter /usr/local/bin/
  3. Crear servicio systemd:
    sudo tee /etc/systemd/system/node_exporter.service ltltEOF
    [Unit]
    Description=Node Exporter
    After=network.target
    
    [Service]
    User=nodeusr
    ExecStart=/usr/local/bin/node_exporter
    
    [Install]
    WantedBy=default.target
    EOF
    
  4. Iniciar y habilitar:
    sudo systemctl daemon-reload
    sudo systemctl enable --now node_exporter

Por defecto, Node Exporter escucha en el puerto 9100 y expone métricas en /metrics.

3. Configuración de Prometheus Server

En el servidor Prometheus (Documentación oficial), edita el prometheus.yml para añadir un job que haga scrape a tus nodos:

scrape_configs:
  - job_name: node_exporters
    static_configs:
      - targets:
        - node1.example.com:9100
        - node2.example.com:9100
        - 10.0.0.5:9100

Luego, reinicia Prometheus:

sudo systemctl restart prometheus

3.1. Configuración Dinámica con file_sd

Para entornos dinámicos (Kubernetes, autoescalado), usa file_sd:

scrape_configs:
  - job_name: dynamic_nodes
    file_sd_configs:
      - files:
        - /etc/prometheus/targets/.json

Cada JSON en /etc/prometheus/targets/ define un array de targets:

[
  {labels: {env:prod}, targets: [node-prod-1:9100, node-prod-2:9100]}
]

4. Métricas Clave y Consultas PromQL

Entre las métricas más relevantes expuestas por Node Exporter:

Métrica Descripción
node_cpu_seconds_total Tiempo de CPU por modo (user, system, idle).
node_memory_MemAvailable_bytes Memoria disponible en bytes.
node_disk_io_time_seconds_total Tiempo de I/O de disco en segundos.
node_network_receive_bytes_total Bytes recibidos por interfaz de red.

4.1 Ejemplos de Consultas PromQL

  • Uso de CPU (porcentaje):
    100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=idle}[5m]))  100)
  • Memoria disponible en GB:
    node_memory_MemAvailable_bytes / 1024 / 1024 / 1024
  • Throughput de disco:
    sum by (instance) (rate(node_disk_read_bytes_total[5m])   rate(node_disk_written_bytes_total[5m]))

5. Visualización con Grafana

Grafana permite crear dashboards ricos y personalizados. Pasos básicos:

  1. Agregar fuente de datos Prometheus (Configuration gt Data Sources).
  2. Importar dashboard oficial de Node Exporter: ID 1860 en Grafana.com (Enlace).
  3. Personalizar paneles (colores, thresholds, alertas).

6. Alertas y Alertmanager

Define reglas de alerta en prometheus.yml o en archivos .rules:

groups:
- name: node_alerts
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=idle}[5m]))  100) gt 85
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: CPU alta en {{ labels.instance }}
      description: Uso de CPU gt 85% por más de 5 minutos.

Alertmanager se encarga del envío a email, Slack o webhooks. Más info en Documentación Alertmanager.

7. Seguridad y Buenas Prácticas

  • TLS y Autenticación: Protege los endpoints con HTTPS y Basic Auth o mutual TLS.
  • Firewall: Permite acceso solo desde el servidor de Prometheus al puerto 9100.
  • Etiquetado: Usa --labels en Node Exporter para añadir metadatos (zona, entorno, rol).
  • Rotación de Logs: Configura journald o un archivo de logs para Node Exporter.
  • Monitoreo Interno: Vigila el uso de memoria y CPU de Prometheus mismo (Self-Monitoring).

8. Escalabilidad y Rendimiento

Para infraestructuras con cientos o miles de nodos:

  • Sharding: Divide la carga de scraping entre múltiples instancias de Prometheus.
  • Long-term Storage: Usa soluciones como Thanos o Cortex para almacenar datos a largo plazo.
  • Rechazo de Targets: Configura honor_labels y límites de concurrencia (scrape_interval adecuado).
  • Compresión y Retención: Ajusta --storage.tsdb.retention.time y --storage.tsdb.max-block-duration.

9. Conclusiones

Integrar Prometheus con Node Exporter ofrece una visibilidad de nivel profundo en el rendimiento de tus servidores. Con una configuración bien diseñada y siguiendo las mejores prácticas de seguridad y escalabilidad, obtendrás un sistema de monitoreo robusto y fiable. La combinación con Grafana y Alertmanager completa el stack, permitiendo visualizar, alertar y actuar rápidamente ante cualquier incidencia en tu infraestructura.

Este enfoque es esencial en entornos de alta demanda, especialmente en sectores como cripto y fintech, donde la latencia y la disponibilidad son críticas.

© 2024 – Artículo elaborado con las mejores prácticas de Prometheus y Node Exporter


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *