Sistema de Monitoreo Prometheus: Guía Completa de Configuración para Monitoreo de Infraestructura y Aplicaciones
A medida que la infraestructura moderna crece en complejidad — abarcando microservicios, contenedores y sistemas distribuidos — la monitorización robusta ya no es opcional. Es un requisito fundamental para mantener el rendimiento, la fiabilidad y la escalabilidad. Prometheus, un conjunto de herramientas de monitorización y alertas de código abierto, se ha consolidado como una de las soluciones más ampliamente adoptadas para recopilar y visualizar métricas de series temporales en entornos diversos.
Desarrollado originalmente por SoundCloud y ahora un proyecto graduado de la Cloud Native Computing Foundation (CNCF), Prometheus es de confianza para equipos de ingeniería en todo el mundo. Esta guía completa cubre todo lo que necesitas saber: qué es Prometheus, cómo funciona, sus componentes principales y un proceso de configuración completo paso a paso — incluyendo Node Exporter, paneles de Grafana y configuración de alertas.
¿Qué es Prometheus?
Prometheus es un potente sistema de monitorización de código abierto diseñado para recopilar, almacenar y consultar datos de series temporales — mediciones o eventos rastreados a lo largo del tiempo con marcas de tiempo de alta resolución. Permite a los equipos visualizar el estado del sistema, analizar tendencias y activar alertas inteligentes antes de que pequeños problemas escalen hasta convertirse en interrupciones críticas.
Características principales de Prometheus
| Característica | Descripción |
|---|---|
| Modelo de datos de series temporales | Las métricas se almacenan como secuencias con marcas de tiempo, lo que permite el análisis de tendencias y comparaciones históricas |
| Monitorización basada en extracción (Pull) | Prometheus extrae activamente métricas de los endpoints de destino en lugar de esperar a que los sistemas envíen datos |
| PromQL | Un lenguaje de consulta flexible y expresivo para filtrar, agregar y analizar métricas en tiempo real |
| Integración con Alertmanager | Define reglas basadas en umbrales y enruta notificaciones a correo electrónico, Slack, PagerDuty y más |
| Descubrimiento de servicios | Descubre y extrae automáticamente métricas de destinos en entornos dinámicos como clústeres de Kubernetes |
| Datos multidimensionales | Las etiquetas permiten segmentar métricas a través de dimensiones como región, instancia o nombre de servicio |
Estas capacidades hacen de Prometheus una opción ideal para equipos que ejecutan cargas de trabajo en Hosting VPS, infraestructura bare-metal o plataformas en contenedores.
Cómo funciona Prometheus
Prometheus sigue una arquitectura limpia y bien definida construida en torno a la recopilación y almacenamiento de datos de series temporales. Comprender esta arquitectura es esencial antes de desplegarlo en producción.
Flujo de trabajo principal
- Recopilación de métricas (Scraping): Prometheus envía periódicamente solicitudes HTTP a los endpoints de destino configurados — conocidos como *exporters* — para recopilar métricas. El intervalo de extracción es totalmente configurable.
- Almacenamiento de series temporales: Las métricas recopiladas se persisten en la base de datos de series temporales (TSDB) integrada de Prometheus. Cada punto de datos lleva una marca de tiempo Unix y un conjunto de etiquetas clave-valor para su identificación.
- Consultas con PromQL: Los ingenieros utilizan PromQL para consultar métricas almacenadas, generar gráficos, construir paneles o definir condiciones de alerta basadas en datos en tiempo real e históricos.
- Pipeline de alertas: Cuando una métrica supera un umbral predefinido, Prometheus envía una alerta al Alertmanager, que deduplica, agrupa y enruta las notificaciones a los canales apropiados.
El modelo basado en extracción (pull) es una elección arquitectónica deliberada. Simplifica la seguridad de red (los destinos no necesitan acceso saliente a un servidor central), hace que la configuración sea transparente y escala bien en entornos distribuidos.
Componentes principales de Prometheus
Prometheus es un ecosistema modular. Cada componente cumple una función específica:
1. Servidor Prometheus
El motor central responsable de extraer métricas de los destinos, almacenarlas en el TSDB, evaluar reglas de alertas y servir la API PromQL y la interfaz web.
2. Exporters
Los exporters son agentes o adaptadores ligeros que exponen métricas en un formato compatible con Prometheus. Los exporters principales incluyen:
- Node Exporter — Recopila métricas de hardware y a nivel de sistema operativo: CPU, memoria, E/S de disco, rendimiento de red, uso del sistema de archivos
- Blackbox Exporter — Sondea endpoints externos a través de HTTP, HTTPS, DNS, TCP e ICMP para disponibilidad y latencia
- Exporters de bases de datos — Existen exporters dedicados para PostgreSQL, MySQL, Redis, MongoDB y muchos otros
- Exporters específicos de aplicaciones — La mayoría de las aplicaciones y frameworks modernos exponen un endpoint
/metricsde forma nativa
3. Alertmanager
Gestiona el ciclo de vida completo de las alertas: recibe alertas de Prometheus, las deduplica y agrupa, aplica reglas de silencio e inhibición, y enruta notificaciones a receptores como Slack, correo electrónico, PagerDuty u OpsGenie.
4. PromQL (Lenguaje de consulta de Prometheus)
Un lenguaje de consulta funcional diseñado específicamente para datos de series temporales. PromQL admite vectores instantáneos, vectores de rango, operadores de agregación, funciones matemáticas y subconsultas — brindándote un profundo poder analítico sobre tus métricas.
5. Pushgateway
Diseñado para trabajos efímeros o por lotes que no pueden ser extraídos directamente (por ejemplo, un trabajo cron que se ejecuta durante 30 segundos). Estos trabajos envían sus métricas al Pushgateway, que Prometheus extrae en su intervalo regular.
6. Grafana
Aunque no forma parte de Prometheus en sí, Grafana es la capa de visualización de facto para los datos de Prometheus. Se conecta a Prometheus como fuente de datos y permite la creación de paneles interactivos y enriquecidos con paneles, variables y anotaciones.
Configuración de Prometheus paso a paso en Linux
La siguiente guía te lleva a través de un despliegue completo de Prometheus en un servidor Linux, incluyendo Node Exporter para métricas del sistema, Grafana para visualización y Alertmanager para notificaciones.
> Requisitos previos: Un servidor Linux (Ubuntu 20.04/22.04 o CentOS/RHEL 8+), acceso sudo o root, y familiaridad básica con la línea de comandos. Si necesitas un entorno de servidor fiable, considera AlexHost VPS Hosting como base de alto rendimiento y baja latencia.
Paso 1: Instalar Prometheus
Descarga y extrae la última versión de Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64> Consejo: Consulta siempre la página oficial de versiones de Prometheus para obtener la última versión estable antes de descargar.
Crea un usuario del sistema dedicado y la estructura de directorios:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheusCrea un servicio systemd para Prometheus:
sudo nano /etc/systemd/system/prometheus.servicePega el siguiente contenido:
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus
--config.file=/etc/prometheus/prometheus.yml
--storage.tsdb.path=/var/lib/prometheus/
--web.console.templates=/etc/prometheus/consoles
--web.console.libraries=/etc/prometheus/console_libraries
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.targetHabilita e inicia Prometheus:
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheusPrometheus ahora estará accesible en http://your-server-ip:9090.
Paso 2: Configurar Prometheus
El archivo de configuración principal es /etc/prometheus/prometheus.yml. Este archivo define la configuración global y los destinos de extracción que Prometheus monitoriza.
Ejemplo de configuración básica:
global:
scrape_interval: 15s # Default scrape frequency
evaluation_interval: 15s # How often alerting rules are evaluated
scrape_timeout: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "/etc/prometheus/rules/*.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]Después de modificar este archivo, valida siempre la configuración antes de reiniciar:
promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheusPaso 3: Instalar Node Exporter para métricas del sistema
Node Exporter expone métricas detalladas de hardware y sistema operativo del host — esencial para monitorizar la carga de CPU, la presión de memoria, la utilización del disco y el rendimiento de la red.
Descarga e instala Node Exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporterCrea un servicio systemd para Node Exporter:
sudo nano /etc/systemd/system/node_exporter.service[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporterNode Exporter ahora expone métricas en http://your-server-ip:9100/metrics.
Añade Node Exporter como destino de extracción en prometheus.yml:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["localhost:9100"]Reinicia Prometheus y verifica que el destino aparece como UP en la interfaz de Prometheus en Status → Targets.
Paso 4: Visualizar métricas con Grafana
Grafana transforma las métricas brutas de Prometheus en paneles visualmente enriquecidos y accionables. Es la capa de visualización estándar para los despliegues de Prometheus.
Instala Grafana en Ubuntu/Debian:
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-serverConecta Prometheus como fuente de datos:
- Abre Grafana en
http://your-server-ip:3000(credenciales predeterminadas:admin/admin) - Navega a Configuration → Data Sources → Add data source
- Selecciona Prometheus
- Establece la URL en
http://localhost:9090 - Haz clic en Save & Test
Importa un panel prediseñado:
- Ve a Dashboards → Import
- Introduce el ID de panel 1860 (Node Exporter Full) del marketplace de Grafana
- Selecciona tu fuente de datos de Prometheus y haz clic en Import
Tendrás inmediatamente una vista completa del uso de CPU, consumo de memoria, E/S de disco, estadísticas de red y carga del sistema — todo en un único panel interactivo.
Paso 5: Configurar reglas de alertas y Alertmanager
Las alertas de Prometheus constan de dos partes: las reglas de alertas definidas en Prometheus y el Alertmanager que gestiona el enrutamiento y la entrega.
Crea un archivo de reglas de alertas:
sudo mkdir -p /etc/prometheus/rules
sudo nano /etc/prometheus/rules/system_alerts.ymlgroups:
- name: system_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage has exceeded 80% for more than 5 minutes. Current value: {{ $value }}%"
- alert: LowDiskSpace
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 10m
labels:
severity: critical
annotations:
summary: "Low disk space on {{ $labels.instance }}"
description: "Available disk space on / is below 15%. Immediate action required."
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage has exceeded 85% for more than 5 minutes."
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} is down"
description: "Prometheus target {{ $labels.instance }} has been unreachable for more than 1 minute."Valida el archivo de reglas:
promtool check rules /etc/prometheus/rules/system_alerts.ymlInstala y configura Alertmanager:
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz
sudo cp alertmanager-0.26.0.linux-amd64/alertmanager /usr/local/bin/
sudo mkdir /etc/alertmanagerCrea la configuración de Alertmanager:
sudo nano /etc/alertmanager/alertmanager.ymlglobal:
smtp_smarthost: 'smtp.yourdomain.com:587'
smtp_from: 'alerts@yourdomain.com'
smtp_auth_username: 'alerts@yourdomain.com'
smtp_auth_password: 'your_password'
route:
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@yourdomain.com'
send_resolved: true> Nota: Para la entrega profesional de correo electrónico en tu pipeline de alertas, considera combinar Prometheus con AlexHost Email Hosting para una infraestructura SMTP fiable.
Configuración avanzada: Descubrimiento de servicios
Para entornos dinámicos — como clústeres de Kubernetes o flotas de servidores con escalado automático — las listas de destinos estáticos se vuelven rápidamente inmanejables. Prometheus admite múltiples mecanismos de descubrimiento de servicios de forma nativa:
scrape_configs:
- job_name: "kubernetes-pods"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: trueLos backends de descubrimiento de servicios compatibles incluyen Kubernetes, Consul, EC2, Azure, GCE, descubrimiento basado en DNS y descubrimiento basado en archivos — haciendo que Prometheus sea adaptable a prácticamente cualquier topología de infraestructura.
Casos de uso de Prometheus
Prometheus destaca en una amplia gama de escenarios de monitorización:
Monitorización de infraestructura
Recopila métricas a nivel de servidor — CPU, memoria, disco, red — de cada nodo de tu flota. Ya sea que estés ejecutando un único Servidor Dedicado o un gran clúster, Prometheus proporciona visibilidad unificada en todos los hosts.
Monitorización del rendimiento de aplicaciones (APM)
Rastrea tasas de solicitudes, tasas de errores, latencias de respuesta (el método RED) y consumo de recursos para aplicaciones web y APIs. Las bibliotecas cliente de Prometheus están disponibles para Go, Python, Java, Ruby, Node.js y más.
Monitorización de Kubernetes y contenedores
Prometheus se integra de forma nativa con Kubernetes a través de los exporters kube-state-metrics y cAdvisor, proporcionando visibilidad profunda sobre el estado de los pods, cuotas de recursos, estado de los despliegues y métricas a nivel de clúster.
Monitorización de bases de datos
Monitoriza el rendimiento de las consultas, la utilización del pool de conexiones, el retraso de replicación y las tasas de aciertos de caché para bases de datos como PostgreSQL, MySQL y Redis utilizando exporters dedicados.
Métricas de negocio personalizadas
Instrumenta tus propias aplicaciones para exponer métricas específicas del dominio — como pedidos procesados por segundo, sesiones de usuario activas o tasas de transacciones de pago — habilitando la observabilidad a nivel de negocio junto con las métricas técnicas.
Monitorización de cargas de trabajo GPU
Para equipos que ejecutan cargas de trabajo de aprendizaje automático o computación de alto rendimiento, Prometheus puede integrarse con exporters DCGM para monitorizar la utilización de GPU, memoria y temperatura. Esto se complementa bien con AlexHost GPU Hosting para infraestructura de IA y ML.
Prometheus frente a soluciones de monitorización alternativas
| Característica | Prometheus | Nagios | Zabbix | Datadog |
|---|---|---|---|---|
| Modelo de datos | Series temporales con etiquetas | Basado en comprobaciones | Basado en elementos | Series temporales con etiquetas |
| Modelo de recopilación | Pull (+ Pushgateway) | Comprobaciones activas/pasivas | Basado en agente | Basado en agente |
| Lenguaje de consulta | PromQL | Ninguno | Personalizado | Personalizado |
| Nativo de Kubernetes | Sí (primera clase) | Limitado | Limitado | Sí (de pago) |
| Coste | Gratuito / Código abierto | Gratuito / Código abierto | Gratuito / Código abierto | SaaS comercial |
| Escalabilidad | Alta (con Thanos/Cortex) | Moderada | Moderada | Alta |
Mejores prácticas en producción
Desplegar Prometheus en producción requiere atención a varios aspectos operativos:
- Retención de datos: El período de retención predeterminado es de 15 días. Ajusta
--storage.tsdb.retention.timesegún tu capacidad de almacenamiento y los requisitos de cumplimiento. Para almacenamiento a largo plazo, considera Thanos o Cortex. - Seguridad: Restringe el acceso a la interfaz web y la API de Prometheus utilizando un proxy inverso (Nginx o Caddy) con autenticación. Prometheus no incluye autenticación integrada.
- Alta disponibilidad: Ejecuta múltiples instancias de Prometheus extrayendo métricas de los mismos destinos para redundancia. Utiliza la función de clustering de Alertmanager para evitar notificaciones duplicadas.
- Gestión de cardinalidad: Evita etiquetas de alta cardinalidad (por ejemplo, IDs de usuario, IDs de solicitud) en los nombres de métricas, ya que pueden causar problemas de memoria y rendimiento.
- Cifrado TLS: Habilita TLS para los endpoints de extracción y la API de Prometheus. Combina esto con un Certificado SSL para asegurar todas las comunicaciones entre los componentes de Prometheus.
- Planificación de recursos: Prometheus consume mucha memoria. Asigna suficiente RAM en función del número de series temporales activas. Una regla general es aproximadamente 1–2 bytes por muestra en memoria.
Preguntas frecuentes
P: ¿Cuál es la diferencia entre Prometheus y Grafana?
Prometheus es el backend de monitorización y alertas — recopila, almacena y consulta métricas. Grafana es un frontend de visualización que se conecta a Prometheus (y otras fuentes de datos) para renderizar paneles. Son herramientas complementarias, no alternativas.
P: ¿Puede Prometheus monitorizar servidores Windows?
Sí. El Windows Exporter (anteriormente WMI Exporter) expone métricas del sistema Windows en un formato compatible con Prometheus, cubriendo CPU, memoria, disco, red, IIS y más.
P: ¿Cómo gestiona Prometheus la alta disponibilidad?
Prometheus está diseñado para ejecutarse como una única instancia por clúster. Para alta disponibilidad, se ejecutan dos servidores Prometheus idénticos extrayendo métricas de los mismos destinos. Alertmanager admite clustering nativo para deduplicar alertas entre múltiples instancias de Prometheus.
P: ¿Para qué se utiliza PromQL?
PromQL (Lenguaje de consulta de Prometheus) se utiliza para consultar datos de series temporales almacenados en Prometheus. Admite consultas instantáneas, consultas de rango, agregaciones, operaciones matemáticas y funciones — habilitando desde simples búsquedas de métricas hasta complejas expresiones de detección de anomalías.
Conclusión
Prometheus es una solución de monitorización probada en batalla y de nivel de producción que proporciona visibilidad profunda y en tiempo real sobre el estado y el rendimiento de toda tu pila de infraestructura. Su arquitectura basada en extracción, su modelo de datos multidimensional, el potente lenguaje de consulta PromQL y sus integraciones fluidas con herramientas como Grafana y Alertmanager lo convierten en el estándar de oro para la observabilidad moderna.
Ya sea que estés monitorizando un único servidor Linux, una flota de Servidores Dedicados, un clúster de Kubernetes o una aplicación de microservicios compleja, Prometheus escala para satisfacer tus necesidades. Siguiendo los pasos de esta guía — instalando Prometheus, desplegando Node Exporter, configurando paneles de Grafana y estableciendo reglas de alertas inteligentes — tendrás una base de monitorización robusta que te ayudará a detectar anomalías de forma temprana, responder a incidentes más rápidamente y mejorar continuamente la fiabilidad del sistema.
Comienza con lo básico, itera en tus paneles y umbrales de alerta a medida que aprendes el comportamiento normal de tu sistema, y amplía progresivamente la cobertura a cada capa de tu pila. Prometheus no es solo una herramienta de monitorización — es una piedra angular de la ingeniería de fiabilidad del sitio moderna.
