Nagios: host no pingable

Hoy toca hablar de Nagios, el conocido sistema de monitorización. Nagios, nos ayuda a conocer el estado de nuestra red, monitorizando los servidores y sus servicios, así como todo un seguido de parámetros configurables, tanto a nivel de servidor, como a nivel de elemento de red (routers, switches, impresoras de red, etc.).

Por defecto, Nagios utiliza el parámetro “check-host-alive” para verificar si una máquina está o no funcionando. Este parámetro en realidad, únicamente lanza un ping a dicha máquina. El resultado del ping, determinará si la máquina está o no caída.

Sin embargo, el ping es un elemento 100% fiable para determinar la disponibilidad de una máquina. Si, como en mi caso, te has encontrado con alguna máquina que no es pingable (por ejemplo porqué se trata de un firewall en modo stealth, o símplemente porqué la máquina tiene iptables activado y está denegando los pings), ésta aparecerá en Nagios como caída, lo cual dará una falsa sensación de alarma.

Afortunadamente, alguien ya ha pensado en la solución. Ésta pasa por crear un método que únicamente determinará si un determinado servicio está o no disponible en la máquina (por ejemplo, si el servidor no pingable es un servidor web, podremos aprovecharnos de ésto para verificar la disponibilidad del puerto 80). Si el servicio está disponible, entonces la máquina estará disponible. Si no lo está, o tenemos un problema con el servicio, o tenemos un problema con el servidor, pero en cualquier caso, tendremos un problema, así que Nagios hará bien de indicárnoslo.

Se podrá crear un nuevo comando para (en este caso) verificar el servicio web, añadiéndolo en el fichero commands.cfg:

# ‘check-host-alive-by-http’ command definition
define command {
command_name check-host-alive-by-http
command_line $USER1$/check_http -H $HOSTADDRESS
}

Posteriormente, únicamente será necesario modificar en el archivo hosts.cfg, para que el host no pingable use el nuevo comando:

check_command check-host-alive-by-http

Después de reiniciar el servicio de Nagios, ya tendremos solucionada la monitorización de la disponibilidad del servidor no pingable.

12 respuestas a «Nagios: host no pingable»

  1. Buen aporte, uan duda, yo tengo el siguiente error, Return code of 127 is out of bounds , tendras dato , segun la web es a falta de un plugin pero no ecuentor cual, si me pudieras ayudar

  2. Muy buen apunte, pero una duda, sabrías como decirme para comprobar si un puerto esta activo? tu lo has probado con el 80, que es el web, si por ejemplo quisiera saber si el puerto 5900 vnc esta vivo?

    Mi idea es comprobar que si unas máquinas remotas estan activas, i lo quiero hacer comprobando el puerto 5900, si responde, todo OK, si no es que esta caido. sabrias decirme como hacerlo?

    No quiero probar servicios, solo que responda.

    Gracias.

    1. Buenas Jonathan,
      Me alegro que te haya sido de ayuda el post.

      Para saber los puertos activos puedes usar «netstat -nat» ejecutado en la terminal. El resultado serán los puertos activos. Puedes usarlo junto con «grep» para saber sobre un puerto determinado, del estilo:

      netstat -nat | grep 5900

      Si además quieres saber qué programa usa qué puerto, puedes añadir el parámetro «p» a netstat, estándo logueado como root:

      netstat -natp

      Un saludo,
      Adri

    2. Ups Jonathan,
      No te entendí. Tu querías monitorizar un puerto determinado con Nagios.

      Te recomendaría pasarte por Nagios Exchange para primero buscar que no exista ya un plugin para monitorizar el proceso que quieras monitorizar (en este caso VNC), pero si no existiera, tienes otros plugins que monitorizan puertos.

      Te pongo algún ejemplo:
      http://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Processes-and-Ports/details

      Por cierto, sí que existen plugins para monitorizar VNC:
      http://exchange.nagios.org/directory/Plugins/Remote-Access/Check-VNC-(perl)/details

      Suerte,
      Adri

  3. Hola, muchas gracias, sobre todo por la rapidez, al final lo conseguí:
    http://www.esdebian.org/wiki/monitorizar-dispositivos-red-usando-nagios-debian

    Creo un nuevo comando y asi puedo monitorizar el puerto que quiera.

    # para comprobar el servicio VNC (Virtual Network Computing), en el puerto 5900

    define command {
    command_name check_vnc
    command_line /usr/lib/nagios/plugins/check_tcp -H $HOSTADDRESS$ -p 5900
    }

    Por cierto, tienes una web muy interesante, seguiré leyendo tus artículos! gracias por todo!

  4. Hola Adrian, he seguido tus pasos pero no me resulta que podrá ser? me puedes enviar mostrar un ejemplo de la configuración por favor.
    Gracias.
    Karo.

  5. Hola Karo,
    Tienes el ejemplo en el mismo POST.

    Yo quizá empezaría por entrar en la terminal del server Nagios. Una vez ahí, dirígete a la carpeta de plugins (en mi caso /usr/local/nagios/libexec) y ejecuta el plugin check_http tal y como sigue:

    check_http -H IP_OTRO_SERVER

    Donde pone IP_OTRO_SERVER pon la IP del servidor que quieres monitorizar por HTTP. Verás si te devuelve algún error o si por el contrario te devuelve OK. Si te devuelve OK entonces sabemos que el plugin y el comando en sí, funcionan.

    Asegúrate de haber configurado el nuevo comando en commands.cfg y de que el host que quieres monitorizar lo use, en la sección «define host», tal que así:

    define host{
    use linux-server
    host_name myserver
    alias Server MyServer
    address 80.80.80.81
    check_command check-host-alive-by-http
    parents MyParent
    notes Some Notes
    icon_image base/centos.gif
    icon_image_alt CentOS release 5.7 (Final)
    statusmap_image base/centos.gd2
    }

    ¡Suerte!

  6. Me gustaría que en horas de la mañana tipo 5am me llegara una alerta vía correo en la que me indique que el servicios nagios esta up ,trabajando, disponible esta para saber en la disposición que se encuentra nagios.
    Gracias

  7. Hola, revisando tu post en mi casi mi pagina no responde el ping ya que es publica y lo tengo bloqueado. Pero la revision de la url si funciona.
    Tu command como lo agregas, entiendo que lo escribes en commands.cfg pero si lo ejecuto en mi host que lo mando a llamar me manda error.
    Me puedes indicar como darlo de alta y tambien que yo tengo otro puerto no el 80 por default.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.