Saltar a contenido

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

  1. Prometheus detecta que una métrica supera el umbral definido en las reglas de alertado
  2. Alertmanager recibe la alerta, la agrupa con otras relacionadas y aplica rutas de notificación
  3. Las notificaciones se envían por dos canales redundantes: ntfy (push al móvil) y Bot Matrix (mensaje en sala #alertas)
  4. 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