Auditoría #261 ciclo 1 — las gráficas de tráfico SNMP vuelven a tener quien las alimente
User value
Las gráficas de Bandwidth e Interface Errors del Observatory llevaban semanas en blanco en organizaciones enteras — el caso más grave, 119 de 126 sondas SNMP del CCIB sin una sola muestra en 30 días — y el diagnóstico inicial (“el Agente no mide tráfico”) era falso: medía, pero cuatro causas encadenadas lo dejaban mudo sin ningún error visible. Este ciclo las corrige de raíz, sin que nadie tenga que tocar nada manualmente: el Local Agent se actualiza solo (v2.21.0) y el servidor deriva mejor la configuración que le envía.
Qué vas a notar
- En un punto de acceso o switch con SNMP ya configurado, las gráficas de Bandwidth e Interface Errors empiezan a pintar en pocos minutos tras la actualización automática del Agente.
- El modal “Add target” ya crea el equipo solo con ping activado — antes nacía con SNMP encendido y sin credenciales (sondeaba en silencio con la comunidad
public). El SNMP se activa después desde la ficha del dispositivo, con su comunidad real.
Implementación
- La interfaz a sondear ya no es “1” por defecto.
pick_snmp_interface(terminal/services.py) elige, cuando el target no la tiene fijada a mano, la interfaz operativa, física y de mayor velocidad de entre las descubiertas (selected_interfaces). En los puntos de acceso Xirrus del CCIB el ifIndex 1 es un enlacewds-bondcaído conifSpeed 0— de ahí que 119 de 126 sondas midieran una interfaz muerta durante 30 días. - Las credenciales SNMP de la ficha del dispositivo rellenan lo que al target le falte.
build_profile_snmp_lookup+merge_profile_snmp_creds(mismo archivo): si un target nace sin comunidad SNMP propia — creado a mano, o enlazado a suDeviceProfiledespués de crearse — toma la de la ficha enlazada; la config propia del target manda siempre que exista. Corrigió 3 targets del CCIB (1251/1252/1253) mudos desde su creación. - Ambos helpers alimentan los DOS caminos por los que el servidor entrega la config de targets al Agente: el REST (
terminal/api/sentinel.py::get_agent_targets) y el WebSocket (terminal/fleet_lifecycle.py). - En el Agente (v2.21.0), el sondeo decide por familia de contadores, no por OID suelto.
classify_counter_families(terminal/agent/sentinel/snmp_bandwidth.py) agrupa los 8 OIDs del GET de bandwidth en 4 parejas (HC, legacy, errores, descartes). Antes, un soloNoSuchInstanceentre los 8 — por ejemplo un equipo sin contador de descartes — descartaba el sondeo COMPLETO y nunca se guardaba una muestra base. Ahora basta con que responda una familia de octetos (HC o legacy) para que haya bandwidth; errores y descartes se omiten solo si su propia familia no responde, sin tirar el resto. /sentinel/startya no pisa la configuración autoritativa del SaaS con el seed del navegador. En el arranque en frío, el lote de targets que mandaba el navegador (sin comunidad, interfaz 1, sin OIDs) se aplicaba DESPUÉS del lote real cargado por WS/REST y lo sobrescribía. Ahora solo se usa si el SaaS no dio ninguno;ObservatorySentinel.js(?v=8) ya no manda targets en absoluto.
Tests
tests/api/test_agent_target_snmp_resolution.py— elección de interfaz (explícita > física operativa > 1), fusión de credenciales (el target manda, la ficha rellena), lookup de ficha enlazada cifrado y sin fuga entre organizaciones.tests/agent/test_snmp_bandwidth_nosuch.py— NoSuch parcial (descartes ausentes → sigue habiendo bandwidth y errores), equipo solo-legacy, sin contadores de octetos (baseline descartado), todo-cero (baseline conservado).
Commits relacionados
a15e327f(2026-08-24) — feat(monitoring): las métricas que faltan · ciclo 1 de la auditoría #261 (cierra #259) · v1.83.0 + Agente 2.21.0 (#429).
Límite honesto
- Pendiente de ciclos siguientes de la misma auditoría: el catálogo de gráficas (
available-metrics) sigue ofreciendo series que un hardware concreto no produce, y un solo perfilxirruscubre dos generaciones con OIDs distintos (ciclo 5, #266). El dial de cadencia no baja de 60 s para OIDs de fabricante (EXTRAS_FLOOR=60, ciclo 3, #264). - Verificación de campo pendiente tras publicar el Agente: confirmar
snmp_bandwidth_in_mbps > 0en la última hora para la organización CCIB.
Véase también
- [[entity—monitoring—api—snmp]]
- [[entity—monitoring—service—snmp-service]]
- [[entity—monitoring—service—provisioning]]
- [[concept—terminal—local-agent]]
- [[crearack-tech—backend—multi-vendor-snmp-guide]]
- [[crearack—monitoring—configurar-snmp]]