Sistema de Observabilidad¶
Visión global del subsistema de observabilidad de SmallCountry: el pipeline completo de métricas, logs y trazas que permite saber qué está pasando en cada rincón del ecosistema, en tiempo real y con historia.
Descripción general¶
La observabilidad en SmallCountry responde al Principio 8 — Observabilidad integral: todo lo que corre emite métricas, todo lo que emite métricas tiene un dashboard, y todo dashboard dispara alertas cuando algo se sale de lo normal.
El stack se basa en el ecosistema Grafana LGTM (Loki/Mimir/Tempo/Metrics) adaptado a infraestructura ligera, más herramientas complementarias para cobertura total.
Pipeline de observabilidad¶
flowchart LR
subgraph Emisores["📡 Emisores"]
LXC["Contenedores LXC<br/>node_exporter"]
Docker["Contenedores Docker<br/>cadvisor"]
Servicios["Servicios<br/>health endpoints"]
IoT["Sensores IoT<br/>ESP32 · Shelly · MQTT"]
end
subgraph Recoleccion["📥 Recolección"]
Alloy["Grafana Alloy<br/>agente OpenTelemetry"]
Prometheus["Prometheus<br/>scraping + Alertmanager"]
Telegraf["Telegraf<br/>métricas de sistema"]
end
subgraph Almacen["💾 Almacenamiento"]
Victoria["VictoriaMetrics<br/>TSDB principal<br/>compatible PromQL"]
VictoriaLogs["Victoria Logs<br/>logs centralizados<br/>compatible LogQL"]
Tempo["Grafana Tempo<br/>trazas distribuidas"]
InfluxDB["InfluxDB<br/>series IoT"]
end
subgraph Visualizacion["📊 Visualización"]
Grafana["Grafana<br/>dashboards unificados"]
Uptime["Uptime Kuma<br/>disponibilidad"]
Alertas["ntfy + Matrix<br/>notificaciones"]
end
Emisores -->|"métricas + logs"| Recoleccion
Recoleccion -->|"write"| Almacen
Almacen -->|"query"| Visualizacion
style Emisores fill:#c8e6c9,stroke:#2e7d32,color:#000
style Recoleccion fill:#bbdefb,stroke:#1565c0,color:#000
style Almacen fill:#f8bbd0,stroke:#c2185b,color:#000
style Visualizacion fill:#ffe082,stroke:#f57f17,color:#000
Componentes del stack¶
| Componente | Función | Ficha |
|---|---|---|
| Grafana | Dashboards unificados. Consulta VictoriaMetrics, Victoria Logs, Tempo e InfluxDB desde una sola interfaz | Ficha |
| VictoriaMetrics | Almacén de métricas de serie temporal. Reemplazo ligero de Prometheus con compatibilidad PromQL (lenguaje de consulta de métricas) | Ficha |
| Victoria Logs | Centralización de logs de todos los servicios. Consultas con LogQL (lenguaje de consulta de logs) | Ficha |
| Prometheus | Recolección de métricas por sondeo (scraping). Incluye Alertmanager para disparar notificaciones | Ficha |
| Grafana Alloy | Agente de observabilidad vía OpenTelemetry (estándar abierto de observabilidad). Reemplaza a Grafana Agent | Ficha |
| Tempo | Backend de trazas distribuidas para seguir una petición a través de múltiples servicios | Ficha |
| InfluxDB | Almacén complementario de series temporales, optimizado para datos de sensores IoT | Ficha |
| Uptime Kuma | Monitor de disponibilidad. Hace ping a cada servicio y avisa si no responde | Ficha |
| ntfy | Sistema de notificaciones push para alertas | Ficha |
| Bot Matrix | Bot que publica alertas en salas de Matrix | Ficha |
Cobertura por servicio¶
| Categoría | Métricas | Logs | Trazas | Healthcheck | Dashboard |
|---|---|---|---|---|---|
| Infraestructura (Proxmox, ZFS) | ✅ | ✅ | — | ✅ | ✅ |
| Seguridad (Authentik, Caddy) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Observabilidad (Grafana, VM) | ✅ | ✅ | ✅ | ✅ | ✅ |
| IoT (Mosquitto, Node-RED) | ✅ | ✅ | — | ✅ | ✅ |
| IA (Ollama, Hermes) | ✅ | ✅ | — | ✅ | ✅ |
| Usuario (Nextcloud, Immich) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Media (Jellyfin, Navidrome) | ✅ | ✅ | — | ✅ | ✅ |
| Empresa (FacturaScripts, Mautic) | ✅ | ✅ | — | ✅ | ✅ |
| Sensores campo (ESP32, Shelly) | ✅ | — | — | ✅ | ✅ |
| Energía (Geb, Victron) | ✅ | — | — | ✅ | ✅ |
Dashboards principales¶
Grafana organiza la visualización en dashboards por dominio. Cada dashboard está versionado en Forgejo como código (JSON exportable):
| Dashboard | Descripción | Actualización |
|---|---|---|
| Infraestructura General | CPU, RAM, disco, red de los 4 nodos + todos los LXC | 15s |
| Servicios Tier A | Healthchecks y métricas clave de los servicios críticos | 15s |
| Modo Isla | Indicadores de autonomía: servicios sin internet, energía solar, VPN | 30s |
| Finca | Sensores de campo agrupados: colmenas, clima, suelo, gallinero | 60s |
| Backups | Estado de PBS, Restic, últimas verificaciones, espacio libre | 5 min |
| IA Local | Uso de GPU, latencia de inferencia, modelos cargados, cola de peticiones | 15s |
| Energía | Producción solar, consumo, batería, histórico de apagones | 30s |
Para el arquitecto
Flujo de una alerta¶
- Prometheus detecta que una métrica supera el umbral definido en las reglas de alertado
- Alertmanager recibe la alerta, la agrupa con otras relacionadas y aplica rutas de notificación
- Las notificaciones se envían por dos canales redundantes: ntfy (push al móvil) y Bot Matrix (mensaje en sala
#alertas) - Si la alerta es de severidad crítica (Tier S o A), se dispara también un avance de runbook automático con el procedimiento a seguir
Retención de datos¶
| Tipo | Retención | Backend |
|---|---|---|
| Métricas alta resolución (15s) | 30 días | VictoriaMetrics |
| Métricas baja resolución (5min) | 1 año | VictoriaMetrics |
| Logs | 90 días | Victoria Logs |
| Trazas | 30 días | Tempo |
| Series IoT | 2 años | InfluxDB |
Fichas relacionadas¶
- Grafana — Dashboards unificados
- VictoriaMetrics — TSDB (base de datos de series temporales) principal
- Victoria Logs — Logs centralizados
- Prometheus Stack — Recolección y alertado
- Grafana Alloy — Agente OpenTelemetry
- Tempo — Trazas distribuidas
- InfluxDB — Series IoT
- Uptime Kuma — Disponibilidad
- ntfy — Notificaciones push
- Bot Matrix — Alertas en Matrix