Hace poco configuré Nagios en el trabajo. La idea es tener un sistema que envíe alertas cuando algún servidor se cae o deja de ser accesible. Pero también me interesa saber que maquinas están encendidas en cualquier momento para, por ejemplo, no olvidar que deben apagarse al final del día (ya un par de veces alguna se ha quedado encendida toda la noche ¬¬)
Bien, Nagios es un sistema que permite hacer todo eso y más. Sin embargo su manera (por defecto) de revisar si un host esta vivo o no, es haciéndole ping una determinada cantidad de veces para luego ver cuantas responde. El problema es que algunas máquinas que quiero monitorear no responden al ping y Nagios las detecta como apagadas cuando en realidad no lo están :(
Por ello me puse a buscar plugins para resolver mi problema y al no encontrar uno que me gustara lo suficiente tuve que programarlo yo mismo xD
El código que pondré a continuación es un sencillo script bash que utiliza la técnica de escaneo por ARP, es decir, realiza una solicitud ARP al host en cuestión y si responde con su MAC entonces está vivo en caso contrario no lo está. El problema con esta técnica es evidente, solo funcionará con hosts del mismo segmento. Pero, para mi caso, eso es suficiente.
#!/bin/bash # Name: check_pingarp.sh v.0.1 # Programado por: Cesar Neira <csar.1603@gmail.com> # Fecha: 22/05/2011 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nagios status STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4 # Verify parameters if test $# != 1 then echo "Use: $0 <IP_ADDRESS>" exit $STATE_UNKNOWN fi ip=$1 ping -c 1 -w 1 $ip > /dev/null; # send ARP request sleep 5; # wait for 5 seconds arp=$(ip neigh show); # get the ARP table IFS=$'\x0a'; for line in $arp do ipaddr=$(echo $line | cut -d " " -f 1) if test "$ipaddr" == "$ip" then dev=$(echo $line | cut -d " " -f 3) tmp=$(echo $line | cut -d " " -f 4) if test "$tmp" == "lladdr" then lladdr=$(echo $line | cut -d " " -f 5) state=$(echo $line | cut -d " " -f 6) echo "$ip is UP ($dev / $lladdr / $state)" exit $STATE_OK else state=$(echo $line | cut -d " " -f 5) echo "$ip is DOWN ($dev / / $state)" exit $STATE_CRITICAL fi fi done echo "The address $ip is not in the local network." exit $STATE_UNKNOWN
Instalación
Guardar el código en un fichero con el nombre "check_pingarp.sh" dentro de "/usr/local/nagios/libexec"
Asignar permisos de ejecucion al script
# chmod +x /usr/local/nagios/libexec/check_pingarp.sh
Definir un nuevo commando en Nagios
# vim /usr/local/nagios/etc/objects/commands.cfg
define command {
command_name check_pingarp
command_line $USER1$/check_pingarp.sh $HOSTADDRESS$
}
Luego, en la definición de un host, colocamos el nuevo comando como "check_command".
define host {
use linux-server
host_name servidor-web
alias Servidor web
address 192.168.1.101
check_command check_pingarp
}
Eso es todo. Así se verá la respuesta del script en la interfaz web de Nagios.
![]() |
| Fig. 1 - Reporte del script. |
Un saludo.


cuando empezaste a instalar que medidas tomaste, para que vaya conforme !!! tengo muchos problemas en mi red !!
ResponderEliminarHola Javier, te sugiero que revises esta guía:
ResponderEliminarhttp://sanmarcux.org/howto/152-instalar-nagios-en-ubuntu.html
A mi me funcionó.
Un saludo.