Plan2026/02-decision-monitoring.md

13 KiB

Decision: Stack de monitoring para infraestructura Proxmox/PBS (100-500 servidores)

Descartados y por que

Herramienta Motivo de descarte
Checkmk Probado en produccion. Nagios por debajo, consumo de recursos excesivo, version open source limitada. Descartado por experiencia directa.
Nagios/Icinga Misma generacion que Checkmk. Modelo de plugins obsoleto. No merece la pena en 2026.
Datadog/New Relic SaaS. A 100-500 servidores el coste mensual es prohibitivo y dependes de terceros para tu infra critica.

La pregunta clave: Prometheus vs VictoriaMetrics

No son competidores exactos. VictoriaMetrics es la evolucion de Prometheus:

Aspecto Prometheus VictoriaMetrics
Lenguaje de consulta PromQL MetricsQL (superset de PromQL, compatible)
Consumo de RAM Alto (todo en memoria) 5-10x menos RAM
Consumo de disco Alto (TSDB poco eficiente) 7-10x menos disco (compresion agresiva)
Retencion largo plazo Problematico (necesita Thanos/Cortex) Nativo, sin componentes extra
Alta disponibilidad Necesita Thanos o Cortex Nativo en cluster mode
Compatibilidad Es el estandar 100% compatible (scrape, exporters, Grafana, Alertmanager)
Scraping Integrado vmagent (separado, mas eficiente)
Alertas Alertmanager (separado) vmalert (integrado) O Alertmanager (compatible)
Escalabilidad Un Prometheus por ~500 targets Un VictoriaMetrics para miles de targets
Complejidad Simple a escala pequeña Simple a cualquier escala

Recomendacion: VictoriaMetrics (single-node)

A 100-500 servidores, un solo nodo de VictoriaMetrics gestiona todo sin problemas. Si algun dia pasais de 1000, se escala a cluster sin cambiar nada mas.

Toda la comunidad de exporters de Prometheus funciona tal cual. Grafana se conecta igual. Los dashboards existentes de Proxmox/ZFS funcionan sin cambiar nada.


Stack propuesto: 4 capas

                    ┌─────────────────────────────┐
                    │        GRAFANA               │
                    │   Dashboards + Alertas UI    │
                    └──────────┬──────────────────┘
                               │ consulta
                    ┌──────────▼──────────────────┐
                    │    VICTORIA METRICS           │
                    │  Almacen de metricas          │
                    │  (retencion 1 año+)           │
                    └──────────┬──────────────────┘
                               │ recibe
                    ┌──────────▼──────────────────┐
                    │       VMAGENT                 │
                    │  Scraping de todos los        │
                    │  exporters (reemplaza         │
                    │  Prometheus server)            │
                    └──────────┬──────────────────┘
                               │ scrape
          ┌────────────────────┼────────────────────┐
          │                    │                     │
   ┌──────▼──────┐    ┌───────▼───────┐    ┌───────▼───────┐
   │ node_exporter│    │  pve_exporter │    │ pbs-exporter  │
   │ (cada server)│    │ (cada PVE)    │    │ (natrontech)  │
   │              │    │               │    │ multi-target   │
   │ CPU, RAM,    │    │ VMs, nodos,   │    │ datastores,   │
   │ disco, red,  │    │ storage,      │    │ snapshots/VM, │
   │ ZFS pools    │    │ cluster       │    │ ultimo backup,│
   │              │    │               │    │ + script jobs │
   │              │    │               │    │ (GC/verify/   │
   │              │    │               │    │  sync)        │
   └──────────────┘    └───────────────┘    └───────────────┘

   + Uptime Kuma (aparte, para checks binarios de disponibilidad)

Capa 1: Recoleccion (exporters en cada servidor)

node_exporter (obligatorio en todos los servidores)

  • Metricas de sistema: CPU, RAM, disco, red, load, filesystem
  • Incluye metricas de ZFS automaticamente (pool health, space, IO, ARC)
  • 5MB de RAM, impacto nulo en rendimiento
  • Despliegue: un playbook de Ansible, 2 minutos por servidor

pve_exporter (uno por cluster Proxmox)

  • Metricas de la API de Proxmox: estado de VMs, nodos, storage, replicacion
  • No necesita instalarse en cada nodo, consulta la API del cluster
  • Una instancia por cluster PVE

pbs-exporter (natrontech) - centralizado, multi-target

  • Exporter comunitario en Go: https://github.com/natrontech/pbs-exporter
  • Modo multi-target: una sola instancia para N servidores PBS (no instalar en cada PBS)
  • Cubre: datastores (espacio), snapshots por VM, ultimo backup por VM, host metrics
  • Complementado con script de ~40 lineas via textfile collector para GC/verify/sync jobs
  • Detalle completo en decision-monitoring-pbs.md
  • Un unico backend: VictoriaMetrics. Sin InfluxDB.

Capa 2: Almacenamiento (VictoriaMetrics)

Despliegue single-node

  • Una VM con 2-4 vCPU, 4-8GB RAM, 100-200GB disco
  • Retencion de 1 año de metricas con compresion agresiva
  • Parametros clave:
    • -retentionPeriod=12m (12 meses)
    • -storageDataPath=/data/victoria-metrics
    • -httpListenAddr=:8428
  • Recibe metricas de vmagent via remote_write
  • Compatible con todas las consultas PromQL/MetricsQL de Grafana

vmagent (scraper)

  • Reemplaza al Prometheus server para la funcion de scraping
  • Configuracion identica a Prometheus (mismo YAML de scrape_configs)
  • Descubrimiento de targets: desde Netbox (via HTTP SD) o fichero estatico
  • Envia todo a VictoriaMetrics via remote_write
  • Puede correr en la misma VM o separado

Capa 3: Alertas (vmalert + Alertmanager)

vmalert

  • Evalua reglas de alerta contra VictoriaMetrics
  • Misma sintaxis de reglas que Prometheus alerting rules
  • Envia a Alertmanager para routing y notificacion

Alertmanager

  • Routing: que alerta va a quien
  • Agrupacion: no enviar 100 alertas individuales si hay un fallo general
  • Silenciado: mantenimientos programados sin spam de alertas
  • Integraciones de notificacion:
    • Telegram (recomendado para alertas criticas, llega al movil)
    • Email (para alertas informativas)
    • Webhook (para integrar con ICSManager, Mattermost, etc.)

Alertas minimas obligatorias

# DISCO
- alert: DiskSpaceWarning
  expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.20
  for: 10m
  labels: { severity: warning }
  annotations: { summary: "Menos del 20% libre en {{ $labels.instance }}" }

- alert: DiskSpaceCritical
  expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.10
  for: 5m
  labels: { severity: critical }

# ZFS
- alert: ZFSPoolDegraded
  expr: node_zfs_zpool_state{state!="online"} > 0
  for: 1m
  labels: { severity: critical }
  annotations: { summary: "ZFS pool degradado en {{ $labels.instance }}" }

- alert: ZFSPoolSpaceHigh
  expr: (node_zfs_zpool_allocated / node_zfs_zpool_size) > 0.85
  for: 30m
  labels: { severity: warning }

# PBS
- alert: PBSDatastoreNoBackup48h
  expr: (time() - pbs_datastore_last_backup_timestamp) > 172800
  for: 1h
  labels: { severity: critical }
  annotations: { summary: "Sin backup en 48h: {{ $labels.datastore }}" }

- alert: PBSGCNotRunning
  expr: (time() - pbs_gc_last_run_timestamp) > 259200
  for: 1h
  labels: { severity: warning }
  annotations: { summary: "GC no ejecutado en 3 dias: {{ $labels.datastore }}" }

- alert: PBSVerifyErrors
  expr: pbs_verify_errors_total > 0
  for: 5m
  labels: { severity: warning }

- alert: PBSDatastoreQuota90
  expr: (pbs_datastore_used_bytes / pbs_datastore_quota_bytes) > 0.90
  for: 30m
  labels: { severity: warning }

# NODO
- alert: NodeDown
  expr: up == 0
  for: 3m
  labels: { severity: critical }

- alert: HighCPU
  expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
  for: 15m
  labels: { severity: warning }

- alert: HighMemory
  expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.90
  for: 10m
  labels: { severity: warning }

# SEGURIDAD (basado en lo aprendido)
- alert: SuspiciousFileChange
  expr: node_textfile_mtime_seconds{file="pam_integrity"} != node_textfile_mtime_seconds{file="pam_integrity"} offset 5m
  for: 1m
  labels: { severity: critical }
  annotations: { summary: "Cambio detectado en ficheros PAM en {{ $labels.instance }}" }

Capa 4: Visualizacion (Grafana)

Dashboards recomendados

Dashboard Fuente Uso
Panorama general VictoriaMetrics Mapa de todos los servidores, estado global, alertas activas
Nodo Proxmox pve_exporter VMs corriendo, CPU/RAM/storage por nodo, estado del cluster
ZFS por pool node_exporter Espacio, health, scrub status, IO, ARC hit rate
PBS por servidor pbs-exporter (natrontech) + script jobs Datastores, ocupacion vs quota, jobs GC/verify/sync
Cliente individual Custom exporter Vista para un cliente: espacio usado, ultimo backup, tendencia de crecimiento
Capacidad global VictoriaMetrics Tendencias de crecimiento, prediccion de cuando se llena cada pool, planificacion de compras

Grafana alerting (alternativa simple a vmalert)

  • Grafana 10+ tiene alerting integrado potente
  • Si no quereis gestionar vmalert + Alertmanager por separado, Grafana puede evaluar alertas directamente y enviar a Telegram/email
  • Mas simple, menos potente en routing, pero suficiente para empezar

Uptime Kuma: donde encaja

Uptime Kuma NO reemplaza al stack de metricas. Es complementario:

Stack metricas (VictoriaMetrics) Uptime Kuma
Metricas continuas (CPU al 73.4%) Vivo o muerto (si/no)
Alertas por umbral (disco > 80%) Alerta si no responde
Historico de rendimiento Historico de disponibilidad (uptime %)
Requiere exporter en cada servidor No requiere nada en el servidor
Complejo Muy simple, 5 minutos

Donde usar Uptime Kuma:

  • Check externo de que PBS:8007 responde desde fuera
  • Check de que el DNS (VM 135241) resuelve correctamente
  • Check de que los paneles web (Proxmox GUI, PowerDNS Admin) estan accesibles
  • Check de certificados SSL (avisa X dias antes de expirar)
  • Pagina de status publica para clientes (opcional)

Donde NO usar Uptime Kuma:

  • Para metricas de rendimiento (eso es VictoriaMetrics)
  • Para alertas de disco/ZFS/jobs (eso es vmalert/Grafana)
  • Como monitoring principal (es complementario)

Zabbix: por que no lo recomiendo para vuestro caso

Zabbix es muy bueno, pero:

Zabbix Stack propuesto
Todo en uno (metricas + alertas + dashboards + discovery) Componentes separados especializados
UI propia (potente pero anticuada) Grafana (moderna, extensible, estandar)
Lenguaje de templates propio PromQL/MetricsQL (estandar de la industria)
Agente propio Exporters de Prometheus (ecosistema enorme)
Base de datos relacional (PostgreSQL/MySQL) TSDB optimizada (VictoriaMetrics)
Comunidad Proxmox: templates disponibles Comunidad Proxmox: exporters maduros
Bueno si ya lo conoces Mejor inversion de aprendizaje a futuro

Zabbix funciona bien si el equipo ya lo domina. Si estais empezando de cero, invertir en aprender el ecosistema Prometheus/VictoriaMetrics os da mas flexibilidad y es el estandar hacia el que se mueve toda la industria.

Si el equipo no tiene experiencia con ninguno y quiere algo rapido, Zabbix es mas facil de poner a funcionar el primer dia. Pero a medio plazo, el stack propuesto es mas potente y consume menos recursos.


Resumen del punto 1.2 revisado

Componente Herramienta Funcion
Metricas VictoriaMetrics (single-node) Almacen de todas las metricas, retencion 1 año
Scraping vmagent Recolecta de todos los exporters
Exporters node_exporter + pve_exporter + pbs-exporter (natrontech) + script jobs Generan metricas en cada servidor
Alertas Grafana alerting (fase 1) o vmalert + Alertmanager (fase 2) Notificaciones Telegram/email
Dashboards Grafana Visualizacion de todo
Disponibilidad Uptime Kuma Checks binarios externos (vivo/muerto)

Recursos totales estimados

  • VM VictoriaMetrics + vmagent + Grafana: 4 vCPU, 8GB RAM, 200GB disco
  • VM Uptime Kuma: 1 vCPU, 512MB RAM, 10GB disco (o contenedor Docker en VM existente)
  • node_exporter por servidor: 5MB RAM, impacto nulo
  • pve_exporter por cluster: 50MB RAM