Spiga

Monitorizar puertos de un switch con Nagios

Hola!

Durante esta semana pasada, en mis clases del curso Seguridad y Alta Disponibilidad del CFGS Administración de Sistemas en Red hemos estado trasteando con Nagios y con SNMP para monitorizar el estado de los servidores,  los servicios y de los dispositivos de red de nuestra infraestructura.


Nagios es un proyecto maduro y del que existe gran cantidad de información, por lo que tan sólo me voy a centrar en esta entrada en explicar una de las características que nos ha costado algo de trabajo configurar, que es la de monitorizar el estado de los puertos de un switch por SNMP.

El primer paso consiste en identificar los OIDs soportados por tu switch, para conocer qué tipo de parámetros vas a poder monitorizar. Para esta tarea, si la documentación del fabricante no es muy detallada, puede utilizarse la orden snmpwalk, cuya salida consiste en el valor de cada uno de los objetos gestionados del dispositivo junto con su OID:

$ snmpwalk -v1 -c public 172.22.100.6 -m ALL .1 > oids.txt
$ more oids.txt
[...]
iso.0.8802.1.1.2.1.3.1.0 = INTEGER: 4
iso.0.8802.1.1.2.1.3.2.0 = Hex-STRING: B8 A3 86 72 A5 A3
iso.0.8802.1.1.2.1.3.3.0 = STRING: "swdlinkcab"
iso.0.8802.1.1.2.1.3.4.0 = STRING: "DGS-1500-52 1.00.015"
iso.0.8802.1.1.2.1.3.7.1.2.1 = INTEGER: 1
iso.0.8802.1.1.2.1.3.7.1.2.2 = INTEGER: 1
iso.0.8802.1.1.2.1.3.7.1.2.3 = INTEGER: 1
iso.0.8802.1.1.2.1.3.7.1.2.4 = INTEGER: 1
iso.0.8802.1.1.2.1.3.7.1.2.5 = INTEGER: 1
iso.0.8802.1.1.2.1.3.7.1.2.6 = INTEGER: 1

[...]

En mi caso, el switch dlink 1500DGS con el que estábamos trabajando permite ofrecer gran cantidad de información al NMS, y navegando por el archivo oids.txt encontramos el OID iso.0.8802.1.1.2.1.5.4623.1.2.1.1.1, que informa del estado de cada uno de los puertos del switch y que se representa por un entero que puede tomar los siguientes valores: 

1 : up
2 : down
3 : testing
4 : unknown
5 : dormant
6 : notPresent
7 : lowerLayerDown


Por ejemplo, para conocer el estado operacional del puerto 48 podríamos usar el plugin check_snmp (que utiliza la orden getsnmp) con las siguientes opciones:

$ /usr/lib/nagios/plugins/check_snmp -H 172.22.100.6 -c public -o 1.0.8802.1.1.2.1.5.4623.1.2.1.1.1.48
SNMP OK - 1 | iso.0.8802.1.1.2.1.5.4623.1.2.1.1.1.48=1


Por tanto, lo único que tendríamos que realizar a continuación es añadir un nuevo servicio para realizar esta comprobación, y asegurarnos de que el plugin check_snmp está configurado.

En el fichero /etc/nagios3/conf.d/servicios-switches.cfg se añade el servicio para monitorizar el puerto deseado:
#Monitorización del estado del puerto 48
define service{
       use generic-service
       host_name swdlinkcab
       service_description P.48
       check_command check_snmp!1!public!1.0.8802.1.1.2.1.5.4623.1.2.1.1.1.48
}


En el fichero /etc/nagios3/conf.d/comandos.cfg se configura el plugin check_snmp:
#'check_snmp' command definition
define command{
       command_name check_snmp
       command_line /usr/lib/nagios/plugins/check_snmp -P '$ARG1$' -H '$HOSTADDRESS$' -C '$ARG2$' -o '$ARG3$'
}

Y en el fichero /etc/nagios3/conf.d/switchs.cfg se encuentra la definición del switch:
 define host{
        use  generic-switch
        host_name  swdlinkcab
        alias  swdlinkcab
        address  172.22.100.6
        hostgroups  switches
        parents  macaco
        icon_image cook/network_switch.png
        icon_image_alt  Switch Dlink DGS-1500
        vrml_image  network_switch.png
        statusmap_image cook/network_switch.gd2

}

En la imagen podemos ver el estado actual de este switch en el que se están monitorizando los puertos utilizados, el Uptime y la conexión con el NMS.


Si se desea, porque alguno de estos puertos es especialmente importante, puede configurarse Nagios para que muestre un error crítico si el estado del puerto es down. Para ello se utiliza la opción -r regex. Por tanto, habría que añadir este cuarto parámetro tanto en el servicio como en la configuración de la orden check_snmp.

/etc/nagios3/conf.d/servicios-swithes.cfg
#Monitorización del estado del puerto 48
define service{
       use generic-service
       host_name swdlinkcab
       service_description P.48
       check_command check_snmp!1!public!1.0.8802.1.1.2.1.5.4623.1.2.1.1.1.48!1
}


/etc/nagios3/conf.d/comandos.cfg
#'check_snmp' command definition
define command{
       command_name check_snmp
       command_line /usr/lib/nagios/plugins/check_snmp -P '$ARG1$' -H '$HOSTADDRESS$' -C '$ARG2$' -o '$ARG3$' -r '$ARG4$' 
}


Con esta nueva configuración, si el estado del puerto es up (1), Nagios muestra un OK, ya que coincide con la expresión regular que el administrador ha configurado con la opción -r. Si el estado del puerto monitorizado es down (2), o cualquier otro valor que no sea 1, Nagios mostrará un error crítico.

Un saludo!

1 comentarios:

  Esteban Andre Leon Carrasco

4 de febrero de 2015, 14:34

Amigo,

Me podria Ayudar con el OID de mi switch, ya realice el proceso de snmpwalk