Volver a la wiki

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

Implementación

  1. 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 enlace wds-bond caído con ifSpeed 0 — de ahí que 119 de 126 sondas midieran una interfaz muerta durante 30 días.
  2. 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 su DeviceProfile despué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.
  3. 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).
  4. 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 solo NoSuchInstance entre 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.
  5. /sentinel/start ya 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

Commits relacionados

Límite honesto

Véase también

Subir