Guía de despliegue

Monitorización de VPS con Grafana y Prometheus

Desplegar en un VPS Cloud →

Tutorial

Monitorización de VPS con Grafana y Prometheus

Seguridad y monitorización11 min de lectura8 pasos

Cuando necesita métricas históricas, paneles a medida y alertas afinadas, el dúo Prometheus + Grafana es la referencia de código abierto. Prometheus 3.x recopila y almacena las series temporales, Grafana 13.x las visualiza. Le explicamos cómo desplegar esta stack completa — Node Exporter, cAdvisor, Alertmanager incluidos — en su propio VPS.

Contenido· Por qué auto-alojar Prometheus y Grafana en un VPS1/11
  1. 01Por qué auto-alojar Prometheus y Grafana en un VPS
  2. 02Lo que esta stack aporta a su VPS
  3. 03Requisitos del VPS y recursos a planificar
  4. 04Desplegar la stack con Docker Compose
  5. 05Importar paneles de la comunidad Grafana
  6. 06Configurar las alertas con Alertmanager
  7. 07Prometheus vs InfluxDB vs Zabbix: ¿cuál elegir?
  8. 08Bastionado: nunca exponga Prometheus públicamente
  9. 09Añadir supervisión de contenedores Docker con cAdvisor
  10. 10Resolución de problemas: los errores más frecuentes
  11. 11Para ir más lejos

Por qué auto-alojar Prometheus y Grafana en un VPS

A diferencia de una herramienta todo en uno, la stack Prometheus + Grafana separa con claridad la recopilación (Prometheus hace scrape de las métricas expuestas por los exporters), el almacenamiento (base de series temporales integrada) y la visualización (Grafana). Esa modularidad es precisamente lo que la convierte en un estándar: supervisa el propio VPS con Node Exporter, sus contenedores con cAdvisor, su base PostgreSQL o MySQL con el exporter correspondiente, e instrumenta sus propias aplicaciones en formato Prometheus.

Todo ello en un VPS que usted controla, lo que le evita enviar métricas de infraestructura sensibles a un SaaS facturado por ingesta. Conserva el historial tanto tiempo como se lo permita el disco, construye paneles específicos para su stack y define sus propias reglas de alerta con Alertmanager.

Con el lanzamiento de Prometheus 3.x (última versión estable: v3.15.0, septiembre de 2026), el motor de almacenamiento TSDB se ha optimizado para reducir el consumo de memoria entre un 15 y un 20%. Grafana 13.x (v13.2.3, finales de septiembre de 2026) trae un compositor de paneles renovado y un sistema de alertas unificado. Es el enfoque recomendado cuando va más allá del simple «¿responde el sitio?».

Lo que esta stack aporta a su VPS

  • Métricas de sistema detalladas (CPU, RAM, E/S de disco, red) con Node Exporter v1.12.1, con historial a largo plazo.
  • Supervisión de los contenedores Docker con cAdvisor: consumo por contenedor en tiempo real.
  • Paneles Grafana a medida, importables desde una biblioteca comunitaria de miles de plantillas.
  • Alertas potentes con Alertmanager v0.34.1: umbrales, agrupación, silencios y enrutado multicanal (correo, Slack, PagerDuty...).
  • Supervisión de disponibilidad HTTP/TCP con Blackbox Exporter: detección de tiempos de respuesta y caducidad de certificados TLS.
  • Recopilación de logs de aplicaciones con Loki (mismo fabricante que Grafana): correlación de logs y métricas en un solo panel.
  • Lenguaje de consulta PromQL para crear indicadores derivados y tasas de evolución.
  • Instrumentación de sus propias aplicaciones en formato Prometheus, sin coste de ingesta externo.

Requisitos del VPS y recursos a planificar

Esta stack es más exigente que un monitor simple, porque Prometheus mantiene las series temporales en memoria antes de escribirlas en disco. Calcule un VPS de 2 vCPU y 2 a 4 GB de RAM para supervisar de uno a varios servidores. Añada Loki y Alertmanager y apunte a 4 GB mínimo.

El almacenamiento es el punto crítico: Prometheus genera aproximadamente 1 a 2 MB por serie temporal al día. Para 500 series en 30 días, planifique entre 15 y 30 GB. Empiece con 40 GB de SSD y ajuste --storage.tsdb.retention.time según sus necesidades.

Requisitos de software: Docker 26+ y Docker Compose v2, un nombre de dominio apuntando a su VPS (para el reverse proxy HTTPS de Grafana), y ufw o equivalente para restringir puertos.

Desplegar la stack con Docker Compose

  1. Crear la estructura de directorios del proyecto

    En su VPS, cree una carpeta dedicada y la estructura de archivos:

    mkdir -p ~/monitoring/{prometheus,alertmanager,loki}
    cd ~/monitoring

    Esta organización aísla cada configuración en su directorio, simplificando las actualizaciones.

  2. Escribir el archivo docker-compose.yml

    Defina los siguientes servicios en un archivo docker-compose.yml: prometheus (imagen prom/prometheus:v3.15.0), grafana (imagen grafana/grafana:13.2.3), node-exporter (imagen prom/node-exporter:v1.12.1), cadvisor (imagen gcr.io/cadvisor/cadvisor:latest), alertmanager (imagen prom/alertmanager:v0.34.1).

    Monte los archivos de configuración como volúmenes bind-mount y cree volúmenes con nombre para persistir los datos: prometheus_data, grafana_data. Ejemplo de bind para node-exporter:

    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro

    Luego ejecute docker compose up -d para arrancar la stack.

  3. Configurar prometheus.yml con todos los jobs de scrape

    En prometheus/prometheus.yml, declare los objetivos en la sección scrape_configs. Cuatro jobs esenciales:

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['node-exporter:9100']
      - job_name: 'cadvisor'
        static_configs:
          - targets: ['cadvisor:8080']
      - job_name: 'alertmanager'
        static_configs:
          - targets: ['alertmanager:9093']
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

    Recargue la configuración sin reiniciar: curl -X POST http://localhost:9090/-/reload.

  4. Configurar Alertmanager (alertmanager.yml)

    Cree alertmanager/alertmanager.yml. Una configuración mínima que enruta las alertas a Slack:

    route:
      receiver: 'slack-notifications'
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 4h
    receivers:
      - name: 'slack-notifications'
        slack_configs:
          - api_url: 'https://hooks.slack.com/services/SU/WEBHOOK'
            channel: '#alertas-vps'
            title: '{{ .CommonAnnotations.summary }}'

    Para correo electrónico, sustituya slack_configs por email_configs con los campos to, from, smarthost, auth_username y auth_password.

  5. Crear las reglas de alerta de Prometheus

    En prometheus/rules.yml, defina sus reglas. Tres imprescindibles para un VPS:

    groups:
      - name: vps
        rules:
          - alert: CPUAlto
            expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
            for: 5m
            annotations:
              summary: 'CPU > 85% durante 5 min'
          - alert: MemoriaBaja
            expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.10
            for: 5m
            annotations:
              summary: 'Memoria disponible < 10%'
          - alert: DiscoLleno
            expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes > 0.85
            for: 10m
            annotations:
              summary: 'Disco > 85%'

    Referencie este archivo en prometheus.yml bajo rule_files: ['rules.yml'].

  6. Conectar Grafana con Prometheus (y Loki)

    Abra Grafana en el puerto 3000. Credenciales predeterminadas: admin / admin — cámbielas de inmediato.

    Añada un origen de datos Prometheus con la URL http://prometheus:9090. Pruebe la conexión: debe devolver 'Data source is working'.

    Si añadió Loki al Compose (imagen grafana/loki:3.3.2), añada un segundo origen de datos Loki con la URL http://loki:3100. Podrá correlacionar picos de CPU en un panel Prometheus con los logs de aplicación en Loki sin cambiar de herramienta.

  7. Exponer Grafana en HTTPS mediante un reverse proxy

    Grafana no debe exponerse nunca en HTTP sin cifrar. Configure Nginx como reverse proxy:

    server {
      listen 443 ssl;
      server_name grafana.mondomaine.com;
      ssl_certificate /etc/letsencrypt/live/grafana.mondomaine.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/grafana.mondomaine.com/privkey.pem;
      location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
      }
    }

    Bloquee los puertos internos en el cortafuegos: ufw deny 9090, ufw deny 9093, ufw deny 3000. Solo el puerto 443 (Nginx) debe estar abierto al público.

  8. Verificar que Prometheus recopila todos los objetivos

    Acceda a http://localhost:9090/targets (por SSH o mediante el reverse proxy). Todos los objetivos declarados deben mostrar el estado UP en verde. Un estado DOWN indica un problema de red Docker (nombre de servicio incorrecto), de puerto o de configuración. Corrija antes de continuar.

Importar paneles de la comunidad Grafana

Grafana ofrece una biblioteca de paneles listos para usar en grafana.com/grafana/dashboards. Dos identificadores imprescindibles para un VPS:

ID 1860 — Node Exporter Full: el panel de referencia para métricas del sistema. Muestra en tiempo real y a largo plazo: carga de CPU por núcleo, uso de memoria (incluyendo buffers/caché), E/S de disco por dispositivo, saturación de red y cola. Filtrable por instancia, lo que permite supervisar varios VPS desde un único Grafana.

ID 893 — cAdvisor: métricas por contenedor Docker — throttling de CPU, uso de memoria, E/S y errores de red. Útil para detectar un contenedor que consume de forma anormal sin ralentizar el VPS en su conjunto.

Para importar un panel: en Grafana, vaya a Dashboards → Import, introduzca el ID, seleccione su origen de datos Prometheus y confirme. El panel se importa en segundos, sin construir nada a mano.

Configurar las alertas con Alertmanager

Alertmanager es el componente que recibe las alertas de Prometheus y decide qué hacer con ellas: agruparlas, silenciarlas durante el mantenimiento, enrutarlas a diferentes canales según la severidad.

Agrupación: varias alertas disparadas al mismo tiempo se agrupan en una sola notificación, no en tres correos separados. Este es el campo group_by: ['alertname', 'instance'] en alertmanager.yml.

Silencios: antes de un mantenimiento planificado, cree un silencio en la interfaz de Alertmanager (http://localhost:9093) o mediante la API: amtool silence add --duration=2h alertname=~'.*'.

Enrutado multicanal: las alertas críticas (CPU > 95%) van a PagerDuty o Slack con mención @channel, las advertencias (CPU > 85%) a un canal de supervisión menos urgente.

Tras cada modificación de alertmanager.yml, recargue sin reiniciar: curl -X POST http://localhost:9093/-/reload.

Prometheus vs InfluxDB vs Zabbix: ¿cuál elegir?

Desplace la tabla

CriterioPrometheusInfluxDBZabbix
Modelo de recopilaciónPull (scrape activo)Push (agentes o API)Agente + SNMP + JMX
AlmacenamientoTSDB integrado, eficiente en VPSInfluxDB OSS o CloudPostgreSQL / MySQL, pesado
Lenguaje de consultaPromQL (potente, curva pronunciada)Flux / InfluxQL (similar a SQL)Macros Zabbix (limitado)
AlertasAlertmanager dedicado, flexibleIntegrado (OSS limitado)Integrado, rico pero complejo
Curva de aprendizajeModerada (PromQL)Baja (similar a SQL)Alta (UI densa, agentes)
Caso de uso idealInfra en contenedores, apps instrumentadasIoT, series temporales de alta frecuenciaRedes empresariales, SNMP

Bastionado: nunca exponga Prometheus públicamente

Prometheus no tiene sistema de autenticación nativo. Su interfaz web expone la lista de todos sus objetivos, sus etiquetas de infraestructura y sus reglas de alerta — información valiosa para un atacante que mapea su infraestructura.

Tres reglas no negociables:
1. Vincule Prometheus en 127.0.0.1:9090 únicamente (--web.listen-address=127.0.0.1:9090 en el Compose).
2. Bloquee los puertos 9090, 9093, 9100 y 8080 en el cortafuegos (ufw deny 9090).
3. Proteja Grafana con una contraseña fuerte y desactive la cuenta anónima (GF_AUTH_ANONYMOUS_ENABLED=false como variable de entorno).

Si necesita acceder a la interfaz de Prometheus desde el exterior para depuración, utilice un túnel SSH (ssh -L 9090:localhost:9090 [email protected]) en lugar de un reverse proxy público.

Añadir supervisión de contenedores Docker con cAdvisor

cAdvisor (Container Advisor) expone métricas por contenedor Docker en formato Prometheus: uso de CPU como proporción de la cuota asignada, consumo de memoria con y sin caché, E/S de red y disco, y reinicios.

En docker-compose.yml, añada el servicio:

cadvisor:
  image: gcr.io/cadvisor/cadvisor:latest
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
  ports:
    - '127.0.0.1:8080:8080'
  restart: unless-stopped

Luego añada el job correspondiente en prometheus.yml. El panel Grafana ID 893 (cAdvisor) mostrará entonces una vista por contenedor, con filtro por nombre de servicio Docker.

Resolución de problemas: los errores más frecuentes

Target DOWN en Prometheus (/targets): compruebe primero el nombre del servicio en docker-compose.yml — Prometheus resuelve los nombres por DNS interno de Docker. Si el servicio se llama node-exporter en el Compose, la URL de scrape debe ser node-exporter:9100, no localhost:9100.

Paneles vacíos tras la importación: la causa más frecuente es un job de scrape cuya etiqueta no coincide con la que espera el panel. Node Exporter Full (ID 1860) espera un job llamado node — si lo nombró node_exporter en prometheus.yml, filtre manualmente en las variables del panel o renombre el job.

Alertmanager no recibe las alertas: verifique que Prometheus puede alcanzar Alertmanager. En prometheus.yml, la sección alerting debe apuntar a alertmanager:9093 (nombre de servicio Docker). Pruebe con: docker compose exec prometheus curl http://alertmanager:9093/-/healthy.

Error 'context deadline exceeded' al recargar: Prometheus tarda más de 30 s en recargar si las reglas son numerosas o un objetivo es lento. Aumente el timeout de scrape en prometheus.yml: scrape_timeout: 20s bajo global.

Para ir más lejos

Esta stack cubre los fundamentos de la monitorización de un VPS. Para necesidades más avanzadas:

Retención a largo plazo: Prometheus almacena datos localmente, ideal para 30 a 90 días. Para un historial de 1 a 2 años sin saturar el disco, conecte Thanos (almacén de objetos compatible con S3) o VictoriaMetrics como reemplazo directo del almacenamiento. VictoriaMetrics es especialmente adecuado para VPS modestos: consume entre 5 y 10 veces menos memoria que Prometheus para el mismo volumen de series.

Supervisión de endpoints HTTP: añada Blackbox Exporter al Compose para probar la disponibilidad de sus URLs, el código HTTP devuelto, la latencia y la fecha de caducidad del certificado TLS.

Logs con Loki: si desea correlacionar métricas con logs de aplicación, añada Loki + Promtail al Compose. Grafana muestra métricas y logs en el mismo panel, reduciendo el tiempo de diagnóstico.

Para todas las opciones de configuración avanzadas, consulte la documentación oficial de Grafana y la documentación de Prometheus. ServOrbit ofrece una plantilla Docker preconfigurada para lanzar esta stack en un clic en un VPS Cloud.

Despliegue su stack de observabilidad

El VPS Cloud ServOrbit ofrece la CPU, la RAM y el SSD necesarios para ejecutar Prometheus, Grafana y sus exporters sin cuellos de botella, con una plantilla Docker lista para configurar.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva