web-dev-qa-db-fra.com

Surveillance des URL avec Nagios

J'essaie de surveiller les URL réelles, et pas seulement les hôtes, avec Nagios, car j'exploite un serveur partagé avec plusieurs sites Web, et je ne pense pas que ce soit suffisant pour surveiller le service HTTP de base bas de cette question une petite explication de ce que j’envisage).

(Remarque: veuillez noter que Nagios est installé et fonctionne à l'intérieur d'un chroot sur un système CentOS. J'ai construit nagios à partir des sources et ai utilisé yum pour installer dans cette racine toutes les dépendances nécessaires, etc.).


J'ai d'abord trouvé check_url , mais après l'avoir installé dans/usr/lib/nagios/libexec, je n'arrivais pas à obtenir un code "Le code de retour de 255 est hors limite". C'est alors que j'ai décidé de commencer à écrire cette question (mais attendez! Il y a un autre plugin que j'ai décidé d'essayer en premier!)

Après avoir examiné Cette question qui avait pratiquement le même problème que moi avec check_url, j’ai décidé de poser une nouvelle question sur le sujet car A) Je n’utilise pas NRPE avec ce chèque. b) J'ai essayé les suggestions faites sur la question précédente à laquelle j'ai lié, mais aucune d'entre elles n'a fonctionné. Par exemple...

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

renvoie "0" (ce qui indique que la vérification a réussi)

J'ai ensuite suivi les instructions de débogage sur Nagios Suppor t pour créer un fichier temporaire appelé debug_check_url, et y ai mis le texte suivant (à appeler par ma définition de commande):

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

En supposant que je ne sois pas en "mode de débogage", ma définition de commande pour exécuter check_url est la suivante (dans command.cfg):

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

(Incidemment, vous pouvez aussi voir ce que j'utilisais dans mon fichier de configuration de service tout en bas de cette question)


Avant de publier cette question, cependant, j’ai décidé de donner un autre coup pour trouver une solution. J'ai trouvé le check_url_status plugin et j'ai décidé de tenter le coup. Pour ce faire, voici ce que j'ai fait:

  1. mkdir/usr/lib/nagios/libexec/check_url_status /
  2. téléchargé à la fois check_url_status et utils.pm
  3. Selon le commentaire/commentaire de l'utilisateur sur la page du plugin check_url_status, j'ai remplacé "lib" par le répertoire approprié de/usr/lib/nagios/libexec /.
  4. Exécutez ce qui suit:

    ./check_user_status -U some-domain.com. Lorsque j'exécutais la commande ci-dessus, le message d'erreur suivant apparaissait:

bash-4.1 # ./check_url_status -U mydomain.com Impossible de localiser utils.pm dans @INC (@INC contient:/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) à ./check_url_status, ligne 34. Échec de l'entrée de BEGIN --compilation interrompue à la ligne 34 ./check_url_status.


Donc, à ce stade, j'abandonne et pose quelques questions:

  1. Lequel de ces deux plugins recommanderiez-vous? check_url ou check_url_status? (Après avoir lu la description de check_url_status, je pense que celui-ci pourrait être le meilleur choix. Vos pensées?)
  2. Maintenant, comment pourrais-je résoudre mon problème avec le plugin que vous avez recommandé?

Au début de cette question, j'ai mentionné que j'inclurais une petite explication de ce que j'envisage. J'ai un fichier appelé services.cfg qui contient toutes les définitions de service (imaginez-le!). 

Voici un extrait de mon fichier de définition de service, que j'ai écrit pour utiliser check_url (car à ce moment-là, je pensais que tout fonctionnait bien). Je construirai un service pour chaque URL que je veux surveiller:

###
# 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
}
12
David W

Je faisais les choses trop compliquées.

Le plugin intégré/installé par défaut, check_http, peut accomplir ce que je voulais et plus encore. Voici comment j'ai accompli ceci:

Ma définition de service:

  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
    }

Ma définition de commande:

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

Le meilleur moyen de surveiller les URL est d'utiliser webinject, qui peut être utilisé avec nagios.

Le problème ci-dessous est dû à la raison pour laquelle vous n'avez pas le paquet Perl utils essayez de l'installer.

bash-4.1 # ./check_url_status -U mydomain.com Impossible de localiser utils.pm dans @INC (@INC contient: 

2
Priya

Vous pouvez créer un plugin de script. C'est facile, il suffit de vérifier l'URL avec quelque chose comme:

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

$ URL est ce que vous transmettez à la commande de script par param.

Vérifiez ensuite le résultat: si vous avez un code supérieur à 399, vous avez un problème, sinon ... tout va bien! Ensuite, un mode de sortie à droite et le message pour Nagios.

1
Eduardo Andrés