Volver a la wiki

Guard de frescura en MonitoringTarget — Prevenir sobrescritura de estado por replays históricos

Problema

El Agente Local re-envía automáticamente 24 horas de métricas históricas en cada reconexión del WebSocket para asegurar que las gráficas (VictoriaMetrics) tengan historia completa. Esto es correcto para deduplicación temporal en VM, pero causaba que los replays viejos sobrescribieran el estado actual de los targets en la UI.

Incidente capturado (2026-07-17, organización 1):

Root cause: receive_bulk_metrics() aplicaba last_status/last_check de CUALQUIER lote sin validar timestamp.


Decisión

Implementar un guard de frescura en el servidor que separa escrituras a gráficas (VM) de escrituras a estado vivo (MonitoringTarget):

Constante: _TARGET_STATE_FRESHNESS = 120 segundos.

Por qué 120s: Cubre la cadencia mínima de ping real (15-30s interval) + margen de re-entrega WS (~60-90s en peor caso). Una métrica >2min es claramente histórica.


Ventajas

  1. ✅ Server-side: no requiere cambios en el Agente (.exe). Se activa inmediatamente en prod.
  2. ✅ Gráficas completas: VM sigue recibiendo todo. Los dashboards no pierden historia.
  3. ✅ Sin falsos positivos: solo afecta a la UI de estado (lista de targets, widgets). Los datos crudos quedan intactos.
  4. ✅ Recuperable: si el WS flapea de verdad, el Agente re-reconecta y envía la realidad actual en el siguiente lote fresco.

Limitaciones


Implementación

Archivo: terminal/api/sentinel_ingest.py

_TARGET_STATE_FRESHNESS = 120  # segundos

def receive_bulk_metrics(request, payload: BulkMetricsIn):
    now = int(time.time())
    state_freshness_floor = now - _TARGET_STATE_FRESHNESS
    
    latest_ping = {}
    for m in payload.metrics:
        if m.timestamp < state_freshness_floor:
            continue  # VictoriaMetrics SÍ, MonitoringTarget NO
        # ... actualizar target

Test: test_stale_replay_does_not_touch_live_state — verifica que un replay de 1h atrás entra a VM pero NO cambia el estado del target.


Timeline


Monitoreo

Métricas a seguir en alertas:


Referencias


Véase también

Subir