Ir al contenido

Conexión por SNMP

SNMP es la forma en que CORE-M ingiere desde equipos que nunca ejecutarán un agente de CORE-M — switches, routers, SAIs, PDUs y controladores industriales. A diferencia de los otros protocolos, el dispositivo no envía datos a CORE-M. En su lugar, CORE-M sondea (poll) el dispositivo en busca de valores de OID según una programación y, opcionalmente, recibe traps que el dispositivo emite. Ambos se normalizan: los sondeos se convierten en telemetry, los traps se convierten en eventos de dispositivo.

ModeloDirecciónPuertoSe convierte en
PollingCORE-M → dispositivo (GET)161Telemetry (TelemetryPoint)
TrapsDispositivo → CORE-M162Eventos de dispositivo
  • Polling es la ruta principal. El adaptador ejecuta una goroutine de polling por objetivo habilitado, emite GETs de SNMP para los OIDs configurados en el intervalo del objetivo y publica los resultados como telemetry. Cada ciclo registra la latencia y el estado del sondeo.
  • Traps es la ruta asíncrona. Cuando el dispositivo genera un evento (caída de enlace, superación de umbral), envía un trap al receptor en 162, que lo normaliza en un evento de dispositivo.

Se admiten tanto SNMP v2c como v3 por objetivo.

v2c se autentica con una community string. Configúrala en el objetivo:

CampoValor
versionv2c
communitytu community de lectura (se mantiene secreta, nunca se registra en logs)

v2c no tiene cifrado — úsalo solo en redes de gestión de confianza.

El device profile mapea cada OID sondeado a un nombre de métrica de CORE-M. Los valores numéricos de OID aterrizan en numeric_values; todo lo demás aterriza en string_values. La respuesta del OID se usa solo para el valor — la identidad del dispositivo y del tenant siempre proviene de la configuración del objetivo, nunca del cable.

OIDSignificadoMétrica de CORE-M
.1.3.6.1.2.1.1.3.0sysUpTimesys_uptime
.1.3.6.1.2.1.2.2.1.10.1ifInOctets (if 1)if1_in_octets
.1.3.6.1.2.1.2.2.1.16.1ifOutOctets (if 1)if1_out_octets
.1.3.6.1.4.1.318.1.1.1.2.2.1.0capacidad de batería del SAIups_battery_pct

Por ejemplo, sondear .1.3.6.1.2.1.1.3.0 en un intervalo de 60 segundos y mapearlo a sys_uptime publica un TelemetryPoint con numeric_values.sys_uptime cada minuto.

sequenceDiagram
    participant DL as poller SNMP de device-link
    participant Dev as Dispositivo de red :161
    participant RP as Redpanda telemetry.raw.{tenant}

    loop cada intervalo de sondeo
        DL->>Dev: SNMP GET (OIDs configurados)
        Dev-->>DL: Valores de OID
        DL->>DL: Mapear OIDs → métricas (identidad desde el objetivo)
        DL->>RP: Publicar TelemetryPoint
        DL->>DL: Registrar latencia + estado del sondeo
    end

Cuando llega un trap desde un dispositivo conocido, el receptor de traps lo normaliza en un evento de dispositivo y publica device.event.{tenant_id}.{device_id}. Así es como las condiciones asíncronas (la caída de un puerto, un evento de energía) afloran en CORE-M sin esperar al siguiente ciclo de sondeo.

Un trap desde una fuente que no coincide con ninguna credencial de objetivo ni mapeo de gateway se rechaza — no se convierte en un evento. Se incrementa la métrica de fallo de autenticación corem_protocol_auth_failures_total{protocol="snmp"}. Esto evita que traps no solicitados o falsificados inyecten eventos para dispositivos que CORE-M no reconoce.

Recurre a SNMP cuando…

  • El dispositivo es equipo de red o industrial que ya habla SNMP y no puede ejecutar un agente personalizado.
  • Quieres un polling centralizado y programado en lugar de envíos iniciados por el dispositivo.
  • Necesitas notificación asíncrona de fallos vía traps junto al polling de métricas.
  • Las MIBs que te interesan son estándar y estables (interfaces, sistema, SAI).

Para dispositivos que controlas de extremo a extremo, un protocolo de push por agente — MQTT, HTTP, o CoAP — da un control más fino y menor latencia.