Dynamic SNMP
Con este plugin se pueden hacer escaneos SNMP dinámicos.
- Introducción
- Matriz de compatibilidad
- Pre requisitos
- Parámetros
- Ejecución manual
- Configuración en Pandora FMS
- Agentes y módulos generados por el plugin
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
- Conectividad hacia el host y la comunidad que se pretende escanear.
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:
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.
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.
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:
Campos incluidos en el ejemplo:
- Field 1
- Description:
SNMP version - Default value:
2c
- Description:
- Field 2
- Description:
SNMP community
- Description:
- Field 3:
- Description:
Filter interfaces by name - Help:
Optional: allows filtering interfaces by name, separated by commas. For example: ‘ge,fe’, will only generate modules for interfaces whose name contains ‘ge’ or ‘fe’.
- Description:
- Field 4:
- Description:
Exclude interfaces by name - Help:
Optional: allows to exclude interfaces by name, separated by comma. For example: ‘ge,fe’ will generate modules for all available interfaces except if their name contains ‘ge’ or ‘fe’.
- Description:
- Field 5:
- Description:
Warning threshold (min) - Help: Optional:
Allows to specify the min threshold for Warning status in the generated modules.
- Description:
- Field 6:
- Description:
Warning threshold (max) - Help: Optional:
Allows to specify the max threshold for Warning status in the generated modules.
- Description:
- Field 7:
- Description:
Critical threshold (min) - Help: Optional:
Allows to specify the min threshold for Critical status in the generated modules.
- Description:
- Field 8:
- Description:
Critical threshold (max) - Help:
Allows to specify the max threshold for Critical status in the generated modules.
- Description:
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:
7. En el menú de configuración del módulo, indicar un nombre, seleccionar el plugin y rellenar los campos requeridos:
8. Una vez creado el módulo, el plugin se ejecutará y generará los módulos que coincidan con los filtros indicados:
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.