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.
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.
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:
-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 yLa 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)