IT-Admin.tech

Monitorización de Proxmox con Prometheus y Grafana: exportadores, paneles y alertas

Architekturdiagramm: Prometheus scrapt node_exporter und pve_exporter von Proxmox-Knoten; Alertmanager und Grafana sind...
Topologie: Proxmox-Knoten mit node_exporter und pve_exporter, zentrale Prometheus-Instanz, Alertmanager für Routing und Grafana für Dashboards. Fokus auf Datenfluss und...

El monitoreo de Proxmox con Prometheus y Grafana es, en muchas operaciones de TI, la solución preferida para hacer medibles, históricas y alertables las máquinas host, las máquinas virtuales (VM) y el estado del clúster. Este dossier está dirigido a administradores, ingenieros de sistemas y operadores y explica de forma práctica qué exporters necesita, cómo escalar Prometheus, cómo operacionalizar alertas y qué estrategias de comprobación y contingencia han demostrado su eficacia en entornos de producción reales.

Monitoring Proxmox mit Prometheus und Grafana: Kurze Voraussetzungen und Begriffscheck

Antes de empezar: Prometheus es una base de datos de métricas basada en series temporales (TSDB) con mecanismo pull; Grafana es el frontend de visualización; Alertmanager gestiona notificaciones, agrupamiento y silenciamientos. Los exporters son pequeños servicios que exponen métricas en formato Prometheus: node_exporter ofrece métricas del SO, pve_exporter consulta la Proxmox-REST-API. Relojes sincronizados (NTP/Chrony), reglas de firewall y tokens seguros son obligatorios.

Architektur- und Skalierungsentscheidungen

Empiece con una separación clara entre Hot-Store (retención corta, consultas rápidas) y Long-Term-Store (datos históricos). Para entornos pequeños basta un único Prometheus; cuando aumentan los requisitos de cardinalidad y el número de VMs se recomienda un patrón Edge/Central: instancias Prometheus locales raspando nodos, y remote_write enviando datos a una TSDB central y escalable como VictoriaMetrics, Thanos o Cortex.

Warum Edge-Prometheus?

Un Edge-Prometheus reduce la carga de red, limita las llamadas a la API de Proxmox y mantiene los fallos localizados. La federación o remote_write sólo agrega lo que se necesita centralmente. Eso minimiza el riesgo de que una consulta global única sobrecargue toda su infraestructura.

Exporter im Detail: node_exporter und pve_exporter richtig betreiben

node_exporter: Betriebshinweise

node_exporter debería ejecutarse como servicio systemd, con collectors limitados (desactivar módulos no necesarios) y con textfile-collector para comprobaciones locales de estado (p. ej., resultados de backups). Los permisos de archivos y contextos de usuario (usuario dedicado sin privilegios) son importantes, ya que node_exporter lee métricas del sistema.

Shell
# Systemd-Unit-Auszug für node_exporter
[Service]
User=nodeusr
Group=nodeusr
ExecStart=/usr/local/bin/node_exporter 
  --no-collector.wifi 
  --no-collector.mdadm 
  --collector.textfile.directory=/var/lib/node_exporter/textfile_collector

# Verzeichnisrechte
chown -R nodeusr:nodeusr /var/lib/node_exporter
chmod 750 /var/lib/node_exporter

pve_exporter: Auth, Cache und API-Rate-Limits

pve_exporter utiliza la Proxmox-REST-API y por tanto depende de la estabilidad de la API y de los permisos del token. Defina una duración de caché (p. ej., 30–60s) en el exporter para evitar carga innecesaria sobre la API; los endpoints de la proxmox-api pueden responder con lentitud o bloquearse temporalmente si reciben demasiadas solicitudes.

Shell
# systemd-Umgebung mit sicherer Token-Datei
[Service]
User=pveexport
EnvironmentFile=/etc/pve_exporter/env
ExecStart=/usr/local/bin/pve_exporter --listen-address=127.0.0.1:9273 --cache-duration=60s

# /etc/pve_exporter/env (richtig setzen mit 600)
PROXMOX_API_TOKEN_ID=exporter@pve!id
PROXMOX_API_TOKEN_SECRET=longsecret

Importante: cree tokens con los derechos mínimos y almacene los secretos en un Vault, o al menos en ficheros con permisos restrictivos (chmod 600). Pruebe el acceso a la API de forma independiente antes de conectar Prometheus.

Cardinality kontrollieren: Label-Strategie und Relabeling

La cardinalidad se refiere al número de series temporales únicas; aumenta rápidamente si incorpora metadatos dinámicos como etiquetas (p. ej., notas libres de VM). Esto incrementa el consumo de almacenamiento, la CPU y la latencia de las consultas. Medidas:

  • Defina una lista de etiquetas permitidas por job.
  • Descarten etiquetas volátiles ya mediante relabel_configs.
  • Genere etiquetas de service o role mediante normalización por regex en lugar de usar el nombre completo de la VM.
Yaml
relabel_configs:
  - source_labels: [vm_description]
    regex: '.*'
    action: drop
  - source_labels: [vm_name]
    regex: '^(web|db|cache)-.*'
    target_label: service
    replacement: '${1}'

Operación de Prometheus: retención, compactación y recursos

Prometheus almacena datos en bloques. Se recomiendan configuraciones con una retención en caliente de 15–30 días y remote_write para almacenamiento a largo plazo. Observe el TSDB-I/O: latencias de disco provocan aumentos en la duración de los scrapes y errores.

Shell
# Prometheus Startflags (Beispiel)
prometheus --storage.tsdb.path=/var/lib/prometheus 
  --storage.tsdb.retention.time=30d 
  --storage.tsdb.no-lockfile

En caso de alta carga, escale horizontalmente con Thanos o VictoriaMetrics; además revise el tamaño de bloque y los ajustes del WAL si observa picos frecuentes de escritura.

Ejemplos de PromQL útiles en el día a día

Consultas prácticas para diagnóstico y paneles:

Promql
# Aktive VMs pro Node
count by (instance) (pve_vm_info{state="running"})

# Storage-Usage pro Storage-Pool
sum by (storage) (pve_storage_used_bytes) / sum by (storage) (pve_storage_total_bytes)

# Disk-IO-Latenz pro VM (wenn Exporter Metrik liefert)
avg by (vm) (rate(pve_vm_disk_io_time_seconds_total[5m]))

Alerting: bewährte Patterns und Alertmanager-Integration

Utilice Alertmanager como control central para routing, agrupamiento, inhibition (supresión) y silences. Las alertas deben ser orientadas a la acción: un resumen breve, una causa precisa (si es posible) y un runbook enlazado.

Agrupamiento, inhibición y ejemplo

El agrupamiento reduce el aluvión de notificaciones; la inhibición evita alarmas duplicadas (p. ej., cuando la caída de un storage desencadena una serie de alertas de VM).

Yaml
# Beispiel: Inhibit-Regel in alertmanager.yml
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['instance']

Alert-Regel: Storage-Füllstand mit For-Delay

Yaml
- alert: ProxmoxStorageHighUsage
  expr: (pve_storage_used_bytes / pve_storage_total_bytes) > 0.9
  for: 30m
  labels:
    severity: warning
    team: storage
  annotations:
    summary: "Storage fast voll auf {{ $labels.storage }}"
    runbook: "https://intranet/runbooks/proxmox-storage-full"

Con un valor for más largo retrasa las alertas frente a picos transitorios (p. ej., snapshots temporales).

Pasos prácticos de prueba y validación

Antes del despliegue a producción verifique de forma estandarizada:

  1. Endpoint del exporter:
    Shell
    curl -s http://pve-node1:9273/metrics | head
  2. Prometheus /targets: todos los targets relevantes aparecen UP y con baja duración de scrape.
  3. Paneles de Grafana: validar los análisis clave (CPU, memoria, almacenamiento).
  4. Pruebas de alertas: activar una regla de prueba con umbral bajo, verificar la ruta en Alertmanager.
  5. Ensayo de playbook: los destinatarios ejecutan los pasos definidos y reportan el punto de restablecimiento.

Integración en herramientas de gestión de incidentes

Alertmanager admite muchas integraciones (Webhook, PagerDuty, Opsgenie, Microsoft Teams, Slack). Para Slack/Webhook defina un Receiver con la URL correspondiente y estructure los Labels para el enrutamiento (team, severity).

Yaml
receivers:
- name: 'slack-main'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX'
    channel: '#infra-alerts'
    title: '{{ template "slack.title" . }}'

Evite almacenar URLs sensibles en repositorios en texto claro; utilice gestión de secretos.

Riesgos de seguridad y operación

Los endpoints de los Exporter insuficientemente protegidos constituyen una superficie de ataque. Proteja las siguientes capas:

  • Red: permitir únicamente el tráfico entre Prometheus y los Exporter mediante firewall.
  • Transporte: TLS o mTLS a través de un reverse proxy si los segmentos de red no son seguros.
  • Accesos a la API: tokens con permisos mínimos, rotación y uso de Vault.

Notas de actualización y migración

Las versiones de Exporter y de la API pueden volverse incompatibles. Procedimiento:

  • Version pinning: pruebe las nuevas versiones de Exporter en staging.
  • Smoke-Tests: después de la actualización, verifique los endpoints de Exporter, los targets de Prometheus y los dashboards de Grafana.
  • Rollback: mantener control de versiones para configuraciones (Git) y scripts de revert para las unidades systemd.

Estrategia de contingencia ante avalancha de alertas o fallo del sistema

Si los alerts se disparan de forma incontrolada o Prometheus causa problemas, existen medidas rápidas:

  1. Establecer silence vía la API de Alertmanager para los grupos de alertas afectados.
  2. Identificar las consultas de Prometheus más costosas y desactivarlas temporalmente (revertir configuración).
  3. Reactivar Prometheus en el edge o separar la carga de la instancia central.
Shell
# Silence per API anlegen (Beispiel)
curl -XPOST -H "Content-Type: application/json" http://alertmanager.example.local/api/v2/silences -d '{
  "matchers": [{"name":"team","value":"storage"}],
  "startsAt":"2026-07-28T10:00:00Z",
  "endsAt":"2026-07-28T10:30:00Z",
  "createdBy":"ops",
  "comment":"Emergency mute while investigating"
}'

Grafana: dashboards, estructura y reproducibilidad

Un buen diseño de dashboards es más que gráficos estéticos: utilice variables para entorno/node, guarde los dashboards como JSON en Git (export/import) y enlace los runbooks directamente en las anotaciones de los paneles. Configure permisos de carpeta para limitar la edición a un equipo reducido.

Lista de verificación práctica para el despliegue

  • Verificar tokens, firewall y sincronización horaria.
  • Configurar Node- y PVE-Exporter como servicios; almacenar los secrets de forma segura.
  • Definir relabeling de Prometheus; activar reportes de cardinalidad.
  • Probar routing de Alertmanager, silences y reglas de inhibición.
  • Proveer dashboards de Grafana con variables, enlaces a runbooks y versionado.

Conclusión

Monitorizar Proxmox con Prometheus y Grafana ofrece visibilidad profunda si introduce el sistema de forma iterativa: un conjunto reducido de Exporter (node_exporter, pve_exporter), una estrategia de Labels RESTrictiva para limitar la cardinalidad, alertas comprobables con runbooks y una estrategia de persistencia escalable son los componentes clave. Asegure los accesos a la API, automatice pruebas y mantenga rutas de contingencia claras — así operará su clúster Proxmox de forma estable, trazable y escalable.

Puntos de comprobación adicionales (Breve)

  • Verificar la rotación automática de tokens.
  • Documentar backups de TSDB y los procesos de RESTore.
  • Realizar periódicamente simulacros de alertas y procesos de postmortem.

Seguridad operativa, recuperación ante desastres y «monitorización que supervisa»

Además de la funcionalidad base es decisivo que su monitorización sea en sí misma robusta, comprobable y recuperable. No considere a Prometheus, Alertmanager y Grafana como herramientas cualquiera, sino como servicios críticos para la operación: necesitan SLOs propios, procedimientos de copia de seguridad, planificación de capacidad y una supervisión que detecte con antelación fallos en la canalización de monitorización.

Métricas para supervisar la monitorización

Capture de forma dirigida las métricas internas de sus instancias de monitorización, por ejemplo la duración del scrape (scrape_duration_seconds), scrapes fallidos (scrape_samples_post_metric_relabeling), WAL-Lag y la ocupación de almacenamiento de la TSDB. Defina alertas cuando estos indicadores superen umbrales — un alto WAL-Lag suele señalar cuellos de botella de E/S, un rápido aumento de scrapes faltantes indica problemas de red o de API.

Recording Rules y agregaciones para la optimización del rendimiento

Las Recording Rules almacenan series temporales preagregadas como nuevas métricas y alivian las consultas PromQL costosas y recurrentes. Defina reglas para indicadores de uso frecuente (p. ej. ocupación media de memoria por nodo en 5m), en lugar de recalcular los datos sin procesar en cada consulta del dashboard.

Yaml
groups:
- name: recording_rules
  rules:
  - record: job:node_memory_used_bytes:avg5m
    expr: avg_over_time(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes[5m])

Por qué funciona: las consultas contra series ya calculadas son claramente más rápidas y reducen la carga de CPU en la instancia central de Prometheus. Cuándo falla: con una cardinalidad muy alta también hay que limitar y diseñar con cuidado las Recording Rules.

TSDB-Backup y recuperación

Prometheus ofrece una API de snapshot que genera un bloque consistente. Cree snapshots periódicos y archive estos fuera del almacenamiento primario (p. ej. Object-Storage). Ejemplo: genere un snapshot antes de modificar parámetros de retention o compaction y pruebe la RESTauración en un entorno de staging.

Shell
# Snapshot per API auslösen und anschließend sichern
curl -s -XPOST http://prometheus.local:9090/api/v1/admin/tsdb/snapshot 
  | jq -r '.data.name' 
  | xargs -I{} tar -C /var/lib/prometheus/snapshots -czf /backup/prom_snap_{}.tar.gz {}

Documente explícitamente los pasos de RESTauración (qué versión, qué archivos de configuración) y pruebe las RESTauraciones al menos trimestralmente.

Canary-Scrapes y comprobaciones sintéticas

Disponga un pequeño conjunto de máquinas virtuales o servicios “canary” que se comprueben de forma sintética (Blackbox- o HTTP-Exporter). Estos aportan señales tempranas cuando cambios en la API, segmentos de red o problemas de autenticación afectan a grupos enteros de targets.

Multi-Tenancy, control de acceso y cumplimiento

Si varios equipos utilizan Grafana o usted ofrece métricas de Proxmox como servicio a terceros, pRESTe atención a un RBAC de grano fino. Utilice organizaciones de Grafana, permisos por carpetas y consultas basadas en variables para lograr aislamiento de datos. Revise además si las métricas contienen datos personales (p. ej. nombres de usuario en los metadatos de VM) y elimínelos o anonimícelos para evitar riesgos de cumplimiento.

Planificación de costes y reducción de costes operativos

El almacenamiento a largo plazo de alta cardinalidad es caro. Establezca una política de retención de datos que equilibre la necesidad operativa y los costes: retención corta en Hot-Store, agregación gradual en Long-Term-Store (VictoriaMetrics, Thanos). Utilice muestreo y downsampling para los datos históricos.

Automatización: Provisioning und Config-as-Code

Versione el Provisioning de Prometheus, Alertmanager y Grafana (Dashboards, Alerts, Datasources) en Git. Automatice los despliegues mediante CI/CD, pruebe los cambios de configuración contra una instancia de prueba de Prometheus (promtool check rules) y asegúrese de que los rollbacks sean reproducibles mediante Git-Revert.

Rutas rápidas de reversión y escalado

Defina niveles de escalado claros en Alertmanager (p. ej., Team → On-call → Management) y disponga de runbooks documentados. Si el propio sistema de monitorización falla: aplique Silences temporales, desactive queries costosas y cambie a instancias Edge-Prometheus para reducir el tiempo de recuperación.

Verificación rápida (operativa): activar métricas de monitor, crear Recording Rules, automatizar Snapshot-Backups, configurar Canary-Scrapes, revisar RBAC y anonimización de datos, versionar Dashboards y Alerts en Git. Con estas medidas adicionales opere su Proxmox-Monitoring de forma resistente, verificable y conforme a la normativa — requisitos para una gestión operativa sostenible y para integraciones en software empresarial a medida y procesos operativos centrales.

Service Discovery, Laufzeitisolierung und mTLS-Härtung

Prácticamente importantes son dos aspectos complementarios: descubrimiento automático de servicios para pools dinámicos de Proxmox y un aislamiento de tiempo de ejecución limpio para Prometheus. Genere Targets mediante file_sd desde su herramienta de inventario (Ansible/CMDB), en lugar de mantenerlos estáticos – eso reduce las configuraciones erróneas al escalar.

Yaml
# file_sd example
- targets: ['pve1:9273','pve2:9273']
  labels:
    cluster: 'prod'
    role: 'hypervisor'

Ejecute Prometheus preferentemente en un contexto de ejecución dedicado (Container o VM) con Block-Storage directo y de alto rendimiento; revise cgroup e I/O-QoS para evitar fallos de WAL y de Compaction. Para Exporter-Endpunkte se recomienda mTLS vía Reverse-Proxy (Envoy/Nginx) y una CA interna para facilitar la rotación de certificados. Así protege la integridad de los datos, reduce la superficie de ataque y facilita la integración en software empresarial a medida mediante webhooks asegurados.

En este tema son también relevantes Proxmox Monitoring y Prometheus Alerting. El texto sitúa estos aspectos de forma comprensible y muestra en qué hay que centrarse en la operativa diaria.