3. Degradación Independiente del Orquestador¶
Cuando los recursos escasean, el sistema apaga servicios en orden: primero los Tier D y 5, luego el Tier C, y solo en emergencia extrema partes del Tier B. Normalmente esa decisión la toma n8n. Pero ¿y si el propio n8n es el que se queda sin recursos?
Este mecanismo garantiza que la degradación funciona incluso cuando quien debería ordenarla está fuera de combate.
En condiciones normales: n8n¶
- Recibe métricas desde Victoria Metrics: RAM, CPU, temperatura, espacio en disco
- Detecta superación de umbrales definidos en
degradation_policy.yml - Apaga servicios por tier, verificando entre pasos
- Genera una sola alerta por paso en ntfy y Matrix
- Cuando la presión baja, reactiva en orden inverso (opcional, configurable)
En emergencia: watchdog externo¶
Un script bash puro combinado con un systemd timer que se ejecuta cada minuto:
- Verifica si n8n responde en su healthcheck
- Si no responde, lee directamente
degradation_policy.ymldesde Forgejo - Aplica la misma cadena de apagado usando la API (interfaz de programación) de Proxmox VE
- En último caso: comandos
pct stopdirectamente
El watchdog es deliberadamente simple: sin dependencias, sin bases de datos. Si el sistema operativo arranca, el watchdog funciona.
La cadena de degradación¶
El orden está versionado en Forgejo en degradation_policy.yml:
degradation_order:
- tier: 5, label: "Efímeros", services: [qbittorrent, sonarr, radarr]
- tier: 4, label: "Degradables", services: [jellyfin, kavita, audiobookshelf]
- tier: 3, label: "Productivos", services: [searxng, pinry, freshrss]
- tier: 2, label: "Importantes", services: [immich, nextcloud, n8n]
Lo que NUNCA se degrada¶
- Tier A completo: NetBird, Authentik, Pi-hole, Caddy, Node-RED, Mosquitto
- Dispositivos físicos: Shelly (bomba pozo), ESP32 (climatización, riego)
- Infraestructura de emergencia: SSH emergencia, watchdog
La bomba del pozo es el ejemplo canónico: su Shelly (actuador eléctrico WiFi) está en modo power on default: ON. Si Ra (servidor principal de SmallCountry), n8n, Node-RED y la red completa caen simultáneamente, la bomba sigue funcionando.
Relaciones con otros mecanismos¶
- Modo de Emergencia: el watchdog es una forma de Modo de Emergencia automatizado
- Perfiles Dinámicos de Energía: dos cadenas de degradación independientes (recursos vs energía)
- Contratos de Datos: los umbrales de
degradation_policy.ymlson un contrato de datos
La degradación no es un fallo: es una función diseñada. Cuando los recursos escasean, SmallCountry no colapsa — se encoge protegiendo siempre lo esencial, incluso cuando el propio protector está herido.
Resiliencia en el borde: bufferización y tolerancia a desconexión¶
La finca puede perder internet durante horas. Los colectores de observabilidad en el edge —Grafana Alloy— deben sobrevivir a estos cortes sin perder datos:
- Bufferizar: almacenar métricas y logs localmente mientras no haya conexión
- Reintentar: enviar los datos acumulados cuando la conexión se restablece, con backoff exponencial
- Tolerar desconexión: seguir recolectando aunque el backend central (VictoriaMetrics, Loki) no sea accesible
Esta capacidad es crítica para mantener la integridad de los datos de campo. Sin bufferización, un corte de red de 4 horas perdería 4 horas de métricas de suelo, colmenas y energía. Con bufferización, los datos llegan completos en cuanto la red vuelve. Alloy se configura con buffers en disco dimensionados para la ventana máxima de desconexión esperada.