[centreon] Ocupación de las LUN vía SNMP en una cabina EMC VNX5300
La NET-SNMP-EXTEND-MIB es una MIB específica que se usa para extender la funcionalidad del agente SNMP; nos va a permitir ejecutar scripts o comandos personalizados en el dispositivo gestionado y recuperar los resultados a través de SNMP.
Esta MIB define varios objetos que se relacionan con una instancia específica del script que hemos configurado. Para saber qué extensiones están disponibles y sus correspondientes OIDs, podemos hacer un snmpwalk específico sobre NET-SNMP-EXTEND-MIB, siendo nsExtendObjects el objeto principal que contiene todas las entradas relacionadas con las extensiones SNMP definidas,
# snmpwalk -v2c -c community ip_cabina NET-SNMP-EXTEND-MIB::nsExtendObjects
...
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 23
NET-SNMP-EXTEND-MIB::nsExtendCommand."NOMBRE_LUN" = STRING: /bin/bash
NET-SNMP-EXTEND-MIB::nsExtendArgs."NOMBRE_LUN" = STRING: /usr/local/bin/check_quota.sh NOMBRE_LUN
NET-SNMP-EXTEND-MIB::nsExtendInput."NOMBRE_LUN" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."NOMBRE_LUN" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."NOMBRE_LUN" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."NOMBRE_LUN" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."NOMBRE_LUN" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."NOMBRE_LUN" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."NOMBRE_LUN" = STRING: 87
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."NOMBRE_LUN" = STRING: 87
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."NOMBRE_LUN" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."NOMBRE_LUN" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."NOMBRE_LUN".1 = STRING: 87
...
Los objetos para la extensión SNMP registrada bajo el nombre "NOMBRE_LUN" en la MIB NET-SNMP-EXTEND-MIB son:
NET-SNMP-EXTEND-MIB::nsExtendCommand."NOMBRE_LUN" = STRING: /bin/bash
El comando configurado es /bin/bash. Esto es, nuestro script se ejecuta en una shell de Bash.
NET-SNMP-EXTEND-MIB::nsExtendArgs."NOMBRE_LUN" = STRING: /usr/local/bin/check_quota.sh NOMBRE_LUN
Aquí se muestra el argumento que se pasa al comando /bin/bash, que es el script /usr/local/bin/check_quota.sh con el parámetro "NOMBRE_LUN".
/bin/bash /usr/local/bin/check_quota.sh NOMBRE_LUN
NET-SNMP-EXTEND-MIB::nsExtendInput."NOMBRE_LUN" = STRING:
Esta línea indica que no se está proporcionando ninguna entrada estándar (input) adicional al script. Es decir, el campo de entrada está vacío.
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."NOMBRE_LUN" = INTEGER: 5
Este valor indica que el resultado del comando/script se almacena en caché durante 5 segundos. Si realizamos otra consulta dentro de los siguientes 5 segundos, obtendremos el resultado almacenado en caché en lugar de ejecutar el script nuevamente.
NET-SNMP-EXTEND-MIB::nsExtendExecType."NOMBRE_LUN" = INTEGER: exec(1)
El tipo de ejecución de esta extensión es exec, por lo que el script se ejecuta como un comando de sistema.
NET-SNMP-EXTEND-MIB::nsExtendRunType."NOMBRE_LUN" = INTEGER: run-on-read(1)
El script se ejecuta cada vez que se lee el OID asociado, en lugar de hacerlo de forma periódica o estar siempre en ejecución.
NET-SNMP-EXTEND-MIB::nsExtendStorage."NOMBRE_LUN" = INTEGER: permanent(4)
La configuración de esta extensión es permanente, es decir, persiste entre reinicios del servicio SNMP.
NET-SNMP-EXTEND-MIB::nsExtendStatus."NOMBRE_LUN" = INTEGER: active(1)
La extensión está activa, por lo que se puede ejecutar y consultar.
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."NOMBRE_LUN" = STRING: 87
Valor de la primera línea de la salida del script.
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."NOMBRE_LUN" = STRING: 87
Salida total del script. Sigue siendo sólo “87”
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."NOMBRE_LUN" = INTEGER: 1
Se ha generado una única línea de salida.
NET-SNMP-EXTEND-MIB::nsExtendResult."NOMBRE_LUN" = INTEGER: 0
Código de retorno. Un valor de 0 generalmente indica que el script se ha ejecutado sin errores.
NET-SNMP-EXTEND-MIB::nsExtendOutLine."NOMBRE_LUN".1 = STRING: 87
Captura cada línea específica de la salida.
Nuestro script check_quota.sh
pregunta a las LUN de la cabina y devuelve el % de ocupación en valor numérico. El siguiente paso es sacar el OID asociado al objeto que nos interesa. Por ejemplo, usaremos nsExtendOutput1Line
.
# snmpwalk -v2c -c community ip_cabina .1.3.6.1.4.1.8072.1.3.2.3.1.1
...
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."NOMBRE_LUN" = STRING: 87
...
.1.3.6.1.4.1.8072.1.3.2.3.1.1 es el OID asociado a nsExtendOutput1Line. Por último, incluiremos el parámetro -0n
para desactivar la traducción de OID a STRING,
# snmpwalk -v2c -On -c community ip_cabina .1.3.6.1.4.1.8072.1.3.2.3.1.1
...
.1.3.6.1.4.1.8072.1.3.2.3.1.1.9.83.83.72.72.79.67.83.48.50 = STRING: 87
...
Tenemos así el OID que buscábamos para monitorizar la ocupación de la LUN “NOMBRE_LUN”, .1.3.6.1.4.1.8072.1.3.2.3.1.1.9.83.83.72.72.79.67.83.48.50
El plugin de centreon que usaremos para montar el chequeo de las LUN es centreon_generic_snmp.pl y necesitaremos acceso a la cabina desde nuestro poller por el puerto UDP/161.
$ ./centreon_generic_snmp.pl --plugin apps::protocols::snmp::plugin --mode numeric-value --hostname ip_cabina --snmp-community community --snmp-version 2c --config-json='[ { "oid": ".1.3.6.1.4.1.8072.1.3.2.3.1.1.9.83.83.72.72.79.67.83.48.50", "perfdata_name": "ocupacion", "warning": "85", "critical": "90", "perfdata_unit": "%","format": "Espacio Ocupado : %s"}]'
WARNING: Espacio Ocupado : 87 | 'ocupacion'=87%;0:85;0:90;;
-- mode numeric-value
Comprueba un valor numérico vía SNMP: puede ser Counter, Integer, Gauge, TimeTicks.
-- config-json
Configuración de nuestro modo en formato JSON
-- oid
Valor OID value a comprobar (el que hemos obtenido en los pasos anteriores).
-- perfdata-name
Métrica que aparecerá en la gráfica de Centreon.
-- perfdata-unit
Unidades en la gráfica.
-- format
Salida del chequeo.
Trabajando con Centreon 20.04.13