# Instalación y Configuración de Nagios

# Introducción

## Metas

- Ejercicios opcionales para Nagios

## Notas

- Los comandos precedidos por “$” implican que debe ejecutar el comando como usuario genérico - no como root
- Los comandos precedidos por “#” implican que debería estar trabajando como usuario root.
- Los comandos con inicios de línea más específicos como “rtrX>” o “mysql>” indican que debe ejecutar los comandos en un equipo remoto, o dentro de otro programa.

# Ejercicios

# PARTE IX - Ejercicios Opcionales

## Comprobar que Nagios está operativo

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 /nagios4/. 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 /nagios4/

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/nagios4/conf.d/services.cfg)

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

y por supuesto, necesitará crear un hostgroup llamado nagios-servers para asignarle este servicio (pista: /etc/nagios4/conf.d/hostgroups.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!/nagios4/!nagiosadmin:password

## 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/nagios4/conf.d/services.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 nagios4, 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
            }

COPIE 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/nagios4/conf.d/services.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/nagios4/conf.d/services.cfg

    # cd /etc/nagios4/conf.d                                (Solo para estar seguro)
    # editor /etc/nagios4/conf.d/services.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.cfg.

Edite el fichero /etc/nagios4/conf.d/hostgroups.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        bdr1-campusY,core1-campusY,dist1-b1-campusY,dist1-b2-campusY, \
                       srv1-campusY,host1-campusY,host2-campusY,host3-campusY, \
                       host4-campusY,host5-campusY,host6-campusY
    }

Note que en “members” puede agregar todas las PCs y todos los enrutadores, ya que todos deberían tener SNMP activado en este momento.

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

    # systemctl restart nagios4

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.

## 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.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 debe 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.

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

- `-w <x>:<y>` da un aviso si el valor no está entre x e y
- `-w @<x>:<y>` da un aviso si el valor está entre x e y

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)` significa que la fuente de alimentación está bien pero el dispositivo se alimenta de otra fuente de alimentación. Esto no es un error.

Debería 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)