Instalación y Configuración de Nagios

Introducción

Metas

Notas

Ejercicios

PARTE IX - Ejercicios Opcionales

1. Compruebe que Nagios está activo

En vez de simplemente comprobar que un servidor está operativo en las PCs virtuales, podríamos tambien comprobar que el servicio de Nagios está disponible, solicitando el camino específico /nagios3/. Esto implica que hay que pasar más opciones al plugin de check_http.

Para ver una descripción de las opciones disponibles, escriba esto:

# /usr/lib/nagios/plugins/check_http                    (ayuda breve)
# /usr/lib/nagios/plugins/check_http --help         (ayuda detallada)

y por supuesto, puede navegar hasta la documentación en línea de Nagios o buscar en Google sobre check_http. Puede incluso ejecutar el plugin a mano para realizar una comprobación única:

# /usr/lib/nagios/plugins/check_http -H localhost -u /nagios3/

Así que la meta es configurar Nagios para ejecutar check_http de esta manera:

{pista, /etc/nagios-plugins/config/http.cfg)

define command{
        command_name    check_http_url
        command_line    /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' -u '$ARG1$'
        }

    (pista, /etc/nagios3/conf.d/services_nagios2.cfg_

define service {
        hostgroup_name                  nagios-servers
        service_description             NAGIOS
        check_command                   check_http_url!/nagios3/
        use                             generic-service
}

y por supuesto, necesitará crear un hostgroup llamado nagios-servers para asignarle este servicio (pista: /etc/nagios3/conf.d/hostgroups_nagios2.cfg)

Una vez hecho esto, compruebe que Nagios le advierte sobre un fallo de autenticación (porque está tratando de bajar la página sin proveer el usuario y la clave). Hay un parámetro extra que se puede pasar a check_http para proveer tal información. Para esto necesitamos definir un nuevo comando con un argumento adicional:

define command{
        command_name    check_http_url_auth
        command_line    /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' -u '$ARG1$' -a '$ARG2$'
        }

y se invoca:

check_command                   check_http_url_auth!/nagios3/!nagiosadmin:password

ADVERTENCIA: en la tradición de "Debian lo sabe todo", la configuración del comando check_http en /etc/nagios-plugins/config/http.cfg NO ES LA MISMA que se recomienda en la documentación de Nagios. Le falta ARG1, así que cualquier parámetro que se pase a check_http es ignorado. Así que usted pensará que está monitorizando /nagios3/, pero en realidad está monitoreando a root!

Por esta razón tuvismo que hacer una nueva definición de comando "check_http_url". Usted podría crear una más específica como "check_nagios", o en su lugar podría modificar la definición de check_http de Ubuntu para ajustarla al uso estándar.

2. Compruebe que SNMP está activo en el servidor NOC

Este ejercicio no funcionará si no completá la instalación de MIBs SNMP adicionales al comienzo de la semana, y si no configuró /etc/snmp/snmp.conf apropiadamente. Por favor, consulte los ejercicios originales de SNMP si no está seguro.

Primero tendrá que agregar un chequeo de servicio para SNMP en el archivo /etc/nagios3/conf.d/services_nagios2.cfg. Aquí es donde Nagios es impresionante. Hay cientos, si no miles, de chequeos de servicio disponibles a través de los diferentes sitios web sobre Nagios. Puede ver cuáles plugins están instalados por Ubuntu via el paquete nagios3, mirando en el siguiente directorio:

# ls /usr/lib/nagios/plugins

Como podrá verificar, ya existe un plugin llamado check_snmp disponible. Si está interesado en las opciones del plugin, puede ejecutarlo desde la línea de comandos así:

# /usr/lib/nagios/plugins/check_snmp                    (ayuda breve)
# /usr/lib/nagios/plugins/check_snmp --help                 (ayuda detallada)

Puede usar el plugin check_snmp junto con Nagios para crear comprobaciones de sistema muy complejas o específicas.

Ahora para ver los chequeos de servicio y host que se han creado con el plugin check_snmp, puede echar un vistazo en /etc/nagios-plugins/config/snmp.cfg. Verá una gran cantidad de chequeos pre-configurados que usan SNMP, incluyendo:

      snmp_load
      snmp_cpustats
      snmp_procname
      snmp_disk
      snmp_mem
      snmp_swap
      snmp_procs
      snmp_users
      snmp_mem2
      snmp_swap2
      snmp_mem3
      snmp_swap3
      snmp_disk2
      snmp_tcpopen
      snmp_tcpstats
      snmp_bgpstate
      check_netapp_uptime
      check_netapp_cupuload
      check_netapp_numdisks
      check_compaq_thermalCondition

Y además, aún mejor, puede crear chequeos de servicio adicionales muy fácilmente. Para el caso de verificar que snmpd (el agente SNMP de Linux) está activo usaremos una solicitud SNMP. Si no recibimos una respuesta, entonces Nagios puede asumir que el servicio SNMP está caído en tal nodo. Al usar chequeos de servicio tales como check_http, check_ssh y check_telnet, ésto es lo que hacen también.

En nuestro caso, vamos a crear un nuevo chequeo de servicio y llamarlo "check_system". Este chequeo se conectará al nodo especificado, usará una comunidad de sólo lectura definida en clase y solicitará via SNMP una variable, en particular la descripción del sistema, o el OID "sysDescr.0".

Para ello, comience por editar el archivo /etc/nagios-plugins/config/snmp.cfg

# editor /etc/nagios-plugins/config/snmp.cfg

Al comienzo (o al final, como quiera) agregue la siguiente entrada al fichero:

# 'check_system' command definition
define command{
       command_name    check_system
       command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o sysDescr.0
        }

CCOPIE Y PEGUE esto. No lo escriba a mano y asegúrese de que la línea "command_line" es una sola línea.

Note que "command_line" es una sola línea. Si lo copia y pega en su editor, la línea probablemente se partirá en dos, y tendrá que unirlas en una.

Ahora necesita editar el fichero /etc/nagios3/conf.d/services_nagios2.cfg y agregar el chequeo de servicio. Haremos esta comprobación a todos los servidores de la clase, o al groupo "debian-servers".

Edite el archivo /etc/nagios3/conf.d/services_nagios2.cfg

# editor /etc/nagios3/conf.d/services_nagios2.cfg

Añada la siguiente definición al final del fichero:

# Comprobar que SNMP está activo en todos los servidores
define service {
        hostgroup_name                  snmp-servers
        service_description             SNMP
        check_command                   check_system!xxxxxx
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

"xxxxxx" es la comunidad definida anteriormente (o que será definida) en clase.

Note que hemos incluído nuestra propia comunidad aquí en lugar de configurarla globalmente en el archivo snmp.cfg. Usted debe cambiar el "xxxxx" por la comunidad SNMP dada en la clase o esta verificación no va a funcionar.

Ahora debemos crear el grupo "snmp-servers" en el fichero hostgroups_nagios2.cfg.

Edite el fichero /etc/nagios3/conf.d/hostgroups_nagios2.cfg y vaya al final. añada la siguiente definición de hostgroup:

# A list of snmp-enabled devices on which we wish to run the snmp service check
define hostgroup {
       hostgroup_name   snmp-servers
               alias    snmp servers
               members  noc,localhost,pc1,pc2,pc3,pc4...pc36,rtr1,rtr2,rtr3...rtr9
      }

Note que en "members" puede agregar todas las PCs y todos los enrutadores, ya que todos deberían tener SNMP activado en este momento. Recuerde EXCLUIR su PC y usar localhost en su lugar.

Ahora verifique que todos los cambios son correctos y reinicie Nagios.

# service nagios3 restart

**** Defecto / Bug en Ubuntu 12.04 LTS ***

El paquete net-snmp 5.6.x no instala una de las mibs de IANA (IANAifType-MIB). Esto va a causar un error de MIB que va a causar que falle el plugin para snmp. Para rectifar la situacion haz lo siguiente (como root):

# cd /usr/share/mibs
# wget http://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib
# mv ianaiftype-mib ianaiftype-mib.my 

Y, ahora puede seguir.

Si oprime el enlace "Service Detail" en el menú, debería ver el chequeo de SNMP para el nodo NOC, y para cualesquiera otros nodos haya colocado en la línea "members" de más arriba.

3. Compruebe otros parámetros usando SNMP

El verdadero propósito de check_snmp es consultar el estado de dispositivos. Se puede usar, por ejemplo, para comprobar que fuentes de alimentación y ventiladores están funcionando con normalidad.

Para hacer esto, necesitará encontrar los OID(s) en los que estés interesado y los valores que harán que se generen estados de emergencia y crítico.

El siguiente ejemplo comprueba el estado de la fuente de alimentación de un switch Netgear de la serie 72xx con doble fuente de alimentación y corriendo firmware versión 8.x. A Nagios no le importa en qué fichero va cada definición, pero se sugieren algunos sitios donde hacerlas.

# Esto puede ir en switches.cfg o en services_nagios2.cfg

define service {
        hostgroup_name                  netgear72xx-8x-switches
        service_description             PSUs
        check_command                   check_netgear72xx_8x_power_dual!<community>
        use                             generic-service
}

# Esto puede ir en /etc/nagios-plugins/config/netgear-8x.cfg

define command{
        command_name    check_netgear72xx_8x_power_dual
        command_line     /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' \
          -o .1.3.6.1.4.1.4526.10.43.1.7.1.3.0,.1.3.6.1.4.1.4526.10.43.1.7.1.3.1 \
          -C '$ARG1$' -u 'PSU1,PSU2' -w @5:5,@5:5 -c @2:2,@2:2 -l "PSU status "
}

También debes crear un hostgroup "netgear72xx-8x-switches" y hacer que los switches formen parte de ese grupo, de forma que Nagios ejecute esta comprobación en esos dispositivos.

Notar que la opción -o contiene los dos OIDs que queremos consultar, y las opcines -w y -c proporcionan los valores a comprobar. Se hace uso de una funcionalidad de check_snmp que no está muy bien documentada:

La MIB (fastpath_boxservices.my) contiene las siguiente definiciones:

    boxServicesPowSupplyItemState OBJECT-TYPE
             SYNTAX      INTEGER {
                                  operational(1),
                                  failed(2),
                                  powering(3),
                                  notpowering(4),
                                  notpresent(5)
                                 }
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
                     "The status of power supply"
         ::= { boxServicesPowSuppliesEntry 3 }

Por lo tanto, obtenemos una alerta (warning) si el estado es notpresent(5), y un error crítico si el estado es failed(2).

Nota: notpowering(4) signifuca que las fuente de alimentación está bien pero el dispositivo se alimenta de otra fuente de alimentación. Esto no es un error.

Debes ser capaz de adaptar este ejemplo o otros tipos de equipos, y para comprobar temeratura y estado de ventiladores, ajustando los OIDs y los valores adecuadamente.

El OID .1.3.6.1.4.1.4526.10.43.1.7.1.3 viene de:

netgear                 OBJECT IDENTIFIER ::= { enterprises 4526 }

ng7000managedswitch     OBJECT IDENTIFIER ::= { netgear 10 }

    fastPathBoxServices MODULE-IDENTITY
           LAST-UPDATED "200802220000Z" -- 22 Feb 2008 12:00:00 GMT
           ORGANIZATION "Netgear"
           CONTACT-INFO
           ""...
      ::= { ng7000managedswitch 43 }

    boxServicesGroup    OBJECT IDENTIFIER ::= { fastPathBoxServices 1 }

    boxServicesPowSuppliesTable OBJECT-TYPE
         SYNTAX SEQUENCE OF BoxServicesPowSuppliesEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
                     "Power supply"
         ::= { boxServicesGroup 7 }

    boxServicesPowSuppliesEntry OBJECT-TYPE
         SYNTAX      BoxServicesPowSuppliesEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
                     "Box Services Power Supply Entry"
         INDEX { boxServicesPowSupplyIndex }
         ::= { boxServicesPowSuppliesTable 1 }

    BoxServicesPowSuppliesEntry ::= SEQUENCE {
          boxServicesPowSupplyIndex
              Integer32,
          boxServicesPowSupplyItemType
              INTEGER,
          boxServicesPowSupplyItemState
              INTEGER
          }

    boxServicesPowSupplyIndex OBJECT-TYPE
         SYNTAX      Integer32 (0..2147483647)
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
                     "Unique index of power supply table entry"
         ::= { boxServicesPowSuppliesEntry 1 }

Un dispositivo con solo una fuente de alimentación conectada informa mediante FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSuppliesTable:

.1.3.6.1.4.1.4526.10.43.1.7.1.1.0 = INTEGER: 0
.1.3.6.1.4.1.4526.10.43.1.7.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.4526.10.43.1.7.1.2.0 = INTEGER: fixed(1)
.1.3.6.1.4.1.4526.10.43.1.7.1.2.1 = INTEGER: removable(2)
.1.3.6.1.4.1.4526.10.43.1.7.1.3.0 = INTEGER: operational(1)
.1.3.6.1.4.1.4526.10.43.1.7.1.3.1 = INTEGER: notpresent(5)

o traduciendo los OIDs:

FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyIndex.0 = INTEGER: 0
FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyIndex.1 = INTEGER: 1
FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyItemType.0 = INTEGER: fixed(1)
FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyItemType.1 = INTEGER: removable(2)
FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyItemState.0 = INTEGER: operational(1)
FASTPATH-BOXSERVICES-PRIVATE-MIB::boxServicesPowSupplyItemState.1 = INTEGER: notpresent(5)