Monitor de clusters Hyper-V con seguimiento de Cluster Shared Volumes, alertas de espacio en disco y panel web con historial de métricas.
Un daemon de polling ejecuta PowerShell remoto contra cada cluster y persiste los resultados en SQLite. El panel web muestra el estado en tiempo real y el historial de cada volumen.
pwsh.exe collect_cluster_data.ps1 via Invoke-Command remoto, recibe NDJSON por stdoutLos umbrales se resuelven de lo más específico a lo más general, permitiendo configuración granular por volumen.
Tanto el umbral en porcentaje libre como en GB libres se evalúan independientemente. La alerta salta si cualquiera de los dos se supera.
Columnas warning_threshold_pct / warning_threshold_gb en csv_volumes. Máxima prioridad si no es NULL. Configurable desde Admin → Clusters → Volúmenes.
Columnas warning_threshold_pct / warning_threshold_gb en clusters. Se aplica a todos los volúmenes del cluster sin umbral propio.
thresholds.warning_percent en app-config.json. Fallback global, por defecto 20% warning / 10% crítico. No existe umbral global en GB (NULL = solo aplica %).
Desde Admin → Clusters → Volúmenes se puede editar el umbral warning/crítico en % y GB para cada CSV individualmente. Los campos vacios heredan el valor del cluster. La columna de espacio libre muestra el estado actual con el color correspondiente al nivel de alerta.
| Tabla | Descripción |
|---|---|
clusters | Clusters monitorizados con umbrales por cluster (warning/critical_threshold_pct y _gb) y estado habilitado/deshabilitado |
cluster_nodes | Último estado de cada nodo (upsert por cluster + node_name) |
csv_volumes | Último estado de cada CSV con espacio libre y umbrales individuales por volumen (warning/critical_threshold_pct y _gb) |
csv_history | Serie temporal de métricas de espacio para gráficas de historial |
alerts | Historial de alertas con lifecycle completo (created_at, sent_at, resolved_at) |
poll_log | Log de cada ciclo de polling por cluster (duración, errores) |
settings | Key-value para settings persistentes de la app |
users | Usuarios SSO con flag is_admin |
Cuando un volumen baja del umbral configurado, se envía un POST al endpoint /api/ingest de SisAlerts con deduplicación por external_id.
POST {sisalerts.url}/api/ingest
X-Api-Key: {sisalerts.api_key}
{
"source": "hyperv-monitor",
"sender": "hyperv-monitor",
"priority": "critical" | "high",
"external_id": "hvmon-{cluster_id}-{volume_name}",
"subject": "CSV crítico: {volume_name} — X% libre",
"body": "..."
}El external_id permite deduplicación en SisAlerts. El cooldown (default 4h) evita spam. Se reenvía siempre si la severity empeora de warning a critical. El campo rule_id (opcional) indica a SisAlerts qué regla de enrutamiento aplicar (canales, menciones).
El script collect_cluster_data.ps1 usa Invoke-Command -ComputerName sin credenciales explícitas. La cuenta del servicio Windows debe tener permisos de administrador Hyper-V en todos los clusters.
# Salida NDJSON por stdout:
{"type":"node","name":"HV01","state":"Up","uptime_hours":720}
{"type":"csv","name":"Cluster Disk 1","size_bytes":1099511627776,"free_bytes":549755813888,"state":"Online","owner_node":"HV01"}cd C:\apps\jmfernandez\hypervmonitor
.\deploy.ps1
# git pull + pip install sisapps-ui + restartpolling.enabled | Activar/desactivar polling |
polling.interval_seconds | Intervalo entre ciclos (default 300) |
thresholds.warning_percent | % libre para warning (default 20) |
thresholds.critical_percent | % libre para crítico (default 10) |
sisalerts.url / api_key | Conexión a SisAlerts |
sso.auto_admin | Todos los usuarios SSO son admins |