Dynamic SNMP

Con este plugin se pueden hacer escaneos SNMP dinámicos.

Introducción

Ver. 22-05-2025

Este plugin tiene como finalidad hacer escaneos SNMP dinámicos (por ejemplo, interfaces cuya OID cambia entre reinicios).

Ejecutado por defecto, monitoriza el estado de las interfaces y su tráfico de entrada y salida. Entre sus capacidades está el filtrado de interfaces en base al nombre, así como la asignación de umbrales y alertas a los módulos que genera.

Tipo: Plug-in de servidor, Plug-in de agente

Matriz de compatibilidad

Desarrollado y probado en Rocky linux, Fedora 34
Sistemas en los que se espera que funcione Cualquier sistema linux

Pre requisitos

Parámetros

Parámetros requeridos:

-v version
Versión de SNMP
-h IP
IP del dispositivo

Parámetros específicos de SNMP:

-c community
Comunidad (SNMP v1 y v2c)
-u user
Usuario o entidad de seguridad (solo SNMPv3)
-n context
Contexto (solo SNMPv3)
-l securityLevel
Nivel de seguridad (solo SNMPv3). Los posibles valores son "noAuthNoPriv", "authNoPriv" y "authPriv".
-a authProtocol
Protocolo de autenticación (solo SNMPv3). Puede ser "MD5" o "SHA".
-A authKey
Clave de autenticación utilizada en combinación con el protocolo de autenticación especificado (solo SNMPv3).
-x privProtocol
Protocolo de privacidad que se utilizará para cifrar los datos transmitidos (solo SNMPv3). Los posibles valores incluyen "DES" y "AES".
-X privKey
Es la clave de privacidad que se utiliza junto con el protocolo de privacidad para cifrar y descifrar los datos transmitidos (solo SNMPv3).

Parámetros opcionales del plugin:

-agent agentname
Nombre del agente (sólo si se ejecuta como Plugin de servidor). Si se omite este parámetro, el plugin actuará como Plugin de agente.
-only regex
Cadena de texto o expresión regular para filtrar elementos. Sólo se monitorizarán las ramas que contengan esta expresión en su rama de nombre.
-reject regex
Cadena de texto o expresión regular para filtrar elementos. Se excluirán las ramas que contengan esta expresión en su rama de nombre.
-p port Puerto SNMP del dispositivo. Por defecto: 161
-d data_type Tipo de dato (por defecto lo detecta automáticamente)
-o OID OID base para monitorización (de aquí partirán las OIDs de -branches y -names).
-names namesOID
Subrama que se utilizará como nombre para los módulos (parte de la OID indicada en -o)
-branches branches

Esta opción especifica las ramas (branches) que se deben recuperar bajo los OIDs proporcionados (parte de la OID indicada en -o). El formato es Rama1:OID1,Rama2:OID2,... 

Por ejemplo: "OperStatus:.8,AdminStatus:.7"

-wmin wmin
Umbral mínimo de warning para los módulos generados
-wmax wmax
Umbral máximo de warning para los módulos generados
-cmin cmin
Umbral mínimo de crítico para los módulos generados
-cmax cmax
Umbral máximo de crítico para los módulos generados
-alrt alerts
Alertas globales para los módulos generados (ej. "Critical condition")
-group modulegroup
Grupo para los módulos generados.
-nodefaults 1
Desactiva la monitorización por defecto (se usa junto a -o, -names y -branches)
-interval
Define el intervalo del agente (Por defecto 300)

Envío de datos a Pandora (sólo cuando se ejecuta como plugin de servidor):

-m mode
Modo de transferencia, tentacle o localcopy. Por defecto: 'tentacle'
-t_ip tentacleIP
IP de tentacle (sólo con modo de transferencia "tentacle"). Por defecto: 127.0.0.1
-t_port tentaclePort
Puerto de tentacle (sólo con modo de transferencia "tentacle"). Por defecto: 41121
-t_opts tentacleOpts
Opciones extras de tentacle (sólo con modo de transferencia "tentacle")
-t_file_path tentaclePath
Ruta de tentacle (sólo con modo de transferencia "localcopy"). Por defecto: /var/spool/pandora/data_in/

Ejecución manual


El formato de ejecución del plugin es el siguiente:

./dynamic_snmp -agent <agent name> -h <host> -v <version> [-c <comunidad>] [-u <username>] [-a <authProtocol>] [-A <authKey>] [-x <privProtocol>] [-X <privPassword>] [-l <securityLevel>] [-o <base oid>] [-names <instance>] [-branches <branches>] [-nodefaults 1] [-t_ip <tentacleIP>] [-t_port <tentaclePort>] [-t_opts "<tentacleOptions>"] [-t_file_path "<tentaclePath>"] [-m <transferMode>] [-wmin <wmin>] [-wmax <wmax>] [-cmin <cmin>] [-cmax <cmax>] [-alrt <alert_name>] [-group <moduleGroup>] [-debug 1]

 

Ejemplo de monitorización básica con SNMPv2, con todo por defecto y lanzado como plugin de Agente. Generará módulos de OperStatus, ifInOctets y ifOutOctets (ifHCInOctets e ifHCOutOctets si están disponibles):

./dynamic_snmp -h "192.168.51.1" -v "2c" -c "mycommunity"

 

Ejemplo de monitorización básica con SNMPv2, ejecutando como plugin de Servidor y utilizando los filtros de inclusión y exclusión. Se monitorizarán las interfaces cuyo nombre contenga "Ge", pero no para las que contengan "0/3", y se incluirán en el agente cuyo agentname es "Test-agentname":

./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "2c" -c "mycommunity" -only "Ge" -reject "0/3"

 

Mismo ejemplo, pero utilizando SNMPv3:

./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "3" -l "authPriv" -u "snmpv3user" -a "SHA" -A "PASSWORD1" -x "AES" -X "PASSWORD2" -only "Ge" -reject "0/3"

 

Ejemplo de monitorización personalizada con SNMPv2, ejecutando como plugin de Servidor, desactivando la monitorización por defecto y escogiendo manualmente las ramas a monitorizar:

./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "2c" -c "mycommunity"  -o ".1.3.6.1.2.1" -names ".2.2.1.2" -branches "OperStatus:.2.2.1.8,AdminStatus:.2.2.1.7" -nodefaults 1

 

Nota: Las comillas mostradas en los ejemplos anteriores no son necesarias, pero pueden evitar problemas.

Configuración en Pandora FMS

Para configurar esto como plugin de Servidor en PandoraFMS, se deben seguir los siguientes pasos :

1. Subir el plugin a PandoraFMS, por ejemplo en la siguiente ruta:

/usr/share/pandora_server/util/plugin

2. Crear un plugin de servidor en el apartado Plugins:

image.png


    3. Añadir nombre, descripción y timeout:

Este plugin puede tardar un tiempo en ejecutarse, por lo que se recomienda configurar un timeout de al menos 20 segundos. Es posible que el parámetro global "plugin_timeout" del pandora_server.conf deba ser ajustado también.

Captura de pantalla 2025-05-22 a las 13.40.05.png

Descripción utilizada en el ejemplo:

This plugin generates modules dynamically in the agent it's created in. Based on the ifName, it generates modules for:
- ifOperStatus
- ifInOctets (ifHCInOctets, if available)
- ifOutOctets (ifHCOutOctets, if available)
The value returned by the module represents the number of modules generated.


4. Se añade la ruta del plugin en el comando y los parámetros necesarios para la ejecución de este. 

Este ejemplo se configurará para monitorización de interfaces con SNMPv2, indicando filtros para las interfaces y umbrales de estado para los módulos generados. Se utilizarán las macros de servidor _agentname_ y _address_ para no tener que indicar manualmente el nombre de agente y la dirección IP del dispositivo en cada ejecución:

Para cada parámetro se debe configurar una macro, siendo la sintaxis de esta macro la siguiente : _fieldx_, siendo x el numero posicional del parámetro.

Captura de pantalla 2025-05-22 a las 13.43.29.png

Plugin parameters utilzados en el ejemplo:

-agent "_agentname_" -h "_address_" -v "_field1_" -c "_field2_" -only "_field3_" -reject "_field4_" -wmin "_field5_" -wmax "_field6_" -cmin "_field7_" -cmax "_field8_"

5. Se configuran las macros anteriores, añadiendo en cada una el valor del parámetro:

image.png

Campos incluidos en el ejemplo:

6. Una vez configurado se debe crear un módulo en un agente que ejecute el plugin. En el menú de módulos de un agente, crear un módulo de tipo plugin server:

Captura de pantalla 2025-05-22 a las 16.05.33.png

7. En el menú de configuración del módulo, indicar un nombre, seleccionar el plugin y rellenar los campos requeridos:

Captura de pantalla 2025-05-22 a las 15.51.20.png

8. Una vez creado el módulo, el plugin se ejecutará y generará los módulos que coincidan con los filtros indicados:

Captura de pantalla 2025-05-22 a las 15.56.12.png

Agentes y módulos generados por el plugin

El plugin creará los módulos en el agente seleccionado con el parámetro -agent. Si el agentname especificado no se corresponde con el de ningún agente existente, se creará uno nuevo automáticamente.

image.png

Captura de pantalla 2025-05-22 a las 15.56.12.png