CreaRack-SL

Ancho de banda por interfaz SNMP · Agente 2.22.0 cierra A10 y A47 de la auditoría #261

User value

Decisión de Edu (25-08): además de la interfaz principal de cada sonda SNMP (que no cambia), ahora se puede seguir el ancho de banda de hasta 8 interfaces adicionales del mismo equipo — cada una con su propia gráfica de tráfico, errores y descartes, sin datos inventados en las que están caídas o sin velocidad. De paso, el Agente local 2.22.0 cierra dos deudas técnicas que habían quedado documentadas como pendientes en ciclos anteriores de la auditoría del monitoraje (task #261): un sweep de descubrimiento profundo sobre un solo punto de acceso ya no interfiere con el contador de un sweep de toda la flota en curso, y la cadencia de sondeo por defecto deja de tener dos valores distintos según el archivo.

Qué vas a notar

  • En un equipo con varias interfaces detectadas, se puede elegir alguna adicional a la principal y aparece con su propia serie de Bandwidth / Interface Errors / Discards.
  • Una interfaz caída o sin velocidad (los wds-bond de los Xirrus del CCIB, por ejemplo) no ocupa una de las 8 plazas ni pinta ceros falsos.
  • Lanzar el análisis profundo de un solo AP ya no adelanta el “Complete” de un sweep de flota entera que esté corriendo a la vez (y viceversa).
  • La gráfica “por interfaz” dentro del Observatory todavía no existe — este cambio entrega el dato; la visualización va en el PR siguiente.

Implementación

  1. SaaS → Agente, qué interfaces sondear (terminal/services.py::extra_snmp_interfaces): de selected_interfaces del target descarta la principal, las que están down y las de ifSpeed 0, hasta un máximo de 8. Se cuelga del target en el lote WebSocket (terminal/fleet_lifecycle.py) y en el REST (terminal/api/sentinel.py).
  2. Agente, dataclass del target (terminal/agent/sentinel/scheduler.py): SentinelTarget.snmp_interfaces nuevo campo; _drop_prev_counters(tid) limpia la línea base de la interfaz principal (clave tid) y las de las adicionales (claves "tid:ifIndex") cuando el target se reconfigura o se borra.
  3. Agente, sondeo (terminal/agent/sentinel/snmp_bandwidth.py): extra_interfaces(target) calcula qué ifIndex adicionales tocan; snmp_poll_bandwidth acepta un iface_index opcional y usa la clave compuesta "tid:idx" en el diccionario de líneas base cuando sondea una interfaz que no es la principal; interface_metric_name(base, ifindex) nombra la métrica snmp_if_<in|out|errors|discards>_<ifIndex>.
  4. Ingest (terminal/api/sentinel_ingest.py::map_interface_metric): traduce esas métricas a las series de VictoriaMetrics snmp_if_bandwidth_in/out_mbps y snmp_if_errors/discards_per_min, con etiquetas interface/ifdescr (el nombre sale de ifdescr_lookup sobre selected_interfaces del target). Los nombres son DISTINTOS de los de la interfaz principal (snmp_bandwidth_*) — las gráficas actuales no cambian.
  5. A10 — job_key del deep discovery (terminal/api/sentinel_ingest.py::job_keys_for): con job_key que devuelve el Agente 2.22.0+, un resultado solo avanza ESE job; sin él (Agente antiguo), las 4 claves candidatas de siempre (comportamiento previo intacto). monitoring/services/deep_discover_service.py y network/api/discovery.py ahora mandan el job_key en la tarea que despachan al Agente. Esto era la deuda que el ciclo 4 de la auditoría había dejado explícitamente para “el PR del Agente” (ver [[feature—monitoring—auditoria-261-ciclo-4-cableado-observatory]]).
  6. A47 — un solo default de cadencia: DEFAULT_TARGET_INTERVAL sustituye los dos valores que convivían (30 en el dataclass del scheduler del Agente, 60 en la config del store) por una única constante, en scheduler.py y terminal/agent/core/store.py.
  7. Columna snmp_interfaces nueva en el SQLite del Agente (terminal/agent/core/store.py).

Tests

  • tests/agent/test_bandwidth_per_interface.py (11 tests) — extra_interfaces, interface_metric_name, snmp_poll_bandwidth con clave compuesta por interfaz, y la limpieza de líneas base de _drop_prev_counters.

Commits relacionados

  • ff59f8ce (2026-08-25) — feat(agent): 2.22.0 - ancho de banda por interfaz + job_key del deep discovery (A10) + cadencia por defecto única (A47) - v1.85.0 (#437).
  • a15e327f (2026-08-24) — ciclo 1 de la auditoría #261 (métricas SNMP), predecesor directo de este cambio — ver [[feature—monitoring—auditoria-261-ciclo-1-metricas-snmp]].
  • 579c3d06 (2026-08-25) — ciclo 4 de la auditoría #261, donde A10 quedó documentado como pendiente para este PR del Agente — ver [[feature—monitoring—auditoria-261-ciclo-4-cableado-observatory]].

Límite honesto

  • Verificado solo contra el Xirrus de la oficina: interfaz principal gig1 (0,73/0,15 Mb/s), interfaz 3 (bridge) con serie propia, interfaz 7 (contadores a cero) sin datos inventados. Sin verificar en la red del CCIB hasta septiembre.
  • La gráfica “por interfaz” del Observatory no existe todavía — este commit entrega el dato (Agente + ingest); la visualización queda para el PR siguiente.

Véase también

  • [[feature—monitoring—auditoria-261-ciclo-1-metricas-snmp]]
  • [[feature—monitoring—auditoria-261-ciclo-4-cableado-observatory]]
  • [[entity—monitoring—service—snmp-service]]
  • [[entity—monitoring—api—snmp]]
  • [[concept—terminal—local-agent]]
  • [[crearack—monitoring—configurar-snmp]]
  • [[feature—wireless—deep-discovery-timestamp]]