2012-02-12 37 views
10

Estoy tratando de monitorear URLs reales, y no solo hosts, con Nagios, ya que opero un servidor compartido con varios sitios web, y no creo que sea suficiente solo para monitorear el servicio HTTP básico (Estoy incluyendo al final de esta pregunta una pequeña explicación de lo que estoy imaginando).Monitoreo de URLs con Nagios

(Nota al margen: tenga en cuenta que tengo Nagios instalado y ejecutándose dentro de un chroot en un sistema CentOS. Construí nagios desde el código fuente y usé yum para instalar en esta raíz todas las dependencias necesarias, etc.)


me encontró por primera vez check_url, pero después de instalarlo en/usr/lib/nagios/libexec, seguí recibiendo un "código de retorno 255 está fuera de límites" error. Fue entonces cuando decidí comenzar a escribir esta pregunta (¡pero espere! ¡Hay otro complemento que decidí probar primero!)

Después de revisar This Question que tenía prácticamente el mismo problema que estoy teniendo con check_url, decidí abrir un nueva pregunta sobre el tema porque a) No estoy utilizando NRPE con esta verificación b) Intenté las sugerencias hechas en la pregunta anterior a la que me vinculé, pero ninguna de ellas funcionó. Por ejemplo ...

./check_url some-domain.com | echo $0 

devuelve "0" (lo que indica que el cheque fue exitosa)

entonces he seguido las instrucciones de depuración en Nagios Suppor t para crear un archivo temporal denominado debug_check_url, y poner el siguiente en él (que se llamará a continuación, por mi definición de comandos):

#!/bin/sh 
echo `date` >> /tmp/debug_check_url_plugin 
echo $* /tmp/debug_check_url_plugin 
/usr/local/nagios/libexec/check_url $* 

Suponiendo que no estoy en "modo de depuración", mi definición de comandos para ejecutar check_url es el siguiente (en el interior command.cfg):

'check_url' command definition 
define command{ 
     command_name check_url 
     command_line $USER1$/check_url $url$ 
} 

(Por cierto, también se puede ver lo que estaba utilizando en mi archivo de configuración de servicio en la parte inferior de esta pregunta)


Antes de la publicación de esta cuestión, sin embargo, decidí dar 1 tiro más al descubrir una solución. Encontré el complemento check_url_status, y decidí darle una oportunidad. Para hacer eso, esto es lo que hice:

  1. mkdir/usr/lib/nagios/libexec/check_url_status/
  2. descargado tanto check_url_status y utils.pm
  3. por el comentario de usuario/revisión en el plugin check_url_status página, cambié "lib" al directorio apropiado de/usr/lib/nagios/libexec /.
  4. ejecute el siguiente:

    ./check_user_status -U some-domain.com. Cuando ejecuto el comando anterior, seguí recibiendo el siguiente error:

bash-4.1# ./check_url_status -U mydomain.com Can't locate utils.pm in @INC (@INC contains: /usr/lib/nagios/libexec/ /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5) at ./check_url_status line 34. BEGIN failed--compilation aborted at ./check_url_status line 34.


Así que en este punto, darse por vencido, y tienen un par de preguntas:

  1. ¿Cuál de estos dos complementos recomendaría? check_url o check_url_status? (Después de leer la descripción de check_url_status, creo que esta podría ser la mejor opción. Sus pensamientos?)
  2. Ahora, ¿cómo puedo solucionar mi problema con el complemento que recomiende?

A principios de esta pregunta, he mencionado me gustaría incluir una pequeña explicación de lo que estoy imaginando. Tengo un archivo llamado services.cfg que es donde tengo ubicadas todas mis definiciones de servicio (¡imagínenlo!).

Lo siguiente es un fragmento de mi archivo de definición de servicio, que escribí para usar check_url (porque en ese momento, creía que todo funcionaba). Construiré un servicio para cada URL que deseo monitorear:

### 
# Monitoring Individual URLs... 
# 
### 
define service{ 
     host_name      {my-shared-web-server} 
     service_description    URL: somedomain.com 
     check_command     check_url!somedomain.com 
     max_check_attempts    5 
     check_interval     3 
     retry_interval     1 
     check_period     24x7 
     notification_interval   30 
     notification_period    workhours 
} 

Respuesta

23

Estaba haciendo las cosas DE MANERA demasiado complicada.

El plugin incorporado/instalado por defecto, check_http, puede lograr lo que yo quería y más. Así es como he logrado esto:

Mi servicio Definición:

define service{ 
      host_name      myers 
      service_description    URL: my-url.com 
      check_command     check_http_url!http://my-url.com 
      max_check_attempts    5 
      check_interval     3 
      retry_interval     1 
      check_period     24x7 
      notification_interval   30 
      notification_period    workhours 
    } 

mi comando Definición:

define command{ 
     command_name check_http_url 
     command_line $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$ 
} 
2

La mejor manera de controlar las URL es mediante el uso WebInject que se puede utilizar con Nagios.

El siguiente problema se debe a la razón por la que no tiene los utilitarios del paquete perl intente instalarlo.

bash-4.1 # ./check_url_status -U mydomain.com No se puede encontrar en utils.pm @INC (@INC contiene:.

1

Puede hacer un plugin de secuencia de comandos Es fácil, sólo tiene que compruebe la URL con algo como:

`curl -Is $URL -k| grep HTTP | cut -d ' ' -f2` 

$ URL es lo que se pasa al comando guión de parámetro

a continuación, comprobar el resultado:. Si usted tiene un código mayor que 399 tiene un problema, de lo contrario ... todo está bien! THEN un modo de salida a la derecha y el mensaje para Nagios.