View Full Version : check_disk_smb : fonctionne en ligne de commande mais pas en Web
David31
5th February 2007, 17:25
Bonjour,
Un problème avec le plugin check_disk_smb. Elle fonctionne très bien en ligne de commande et en tant qu'utilisateur nagios :
./check_disk_smb -H monserveur -s monpartage -w 80 -c 90 -W MONDOMAINE -u utilisateur -p mdp
donne le résultat suivant :
Domaine=[MONDOMAINE] OS=[Unix] Server=[Samba ...]
WARNING: Only 6.77 Go (6 %) free on \\monserveur\monpartage
Je modifie donc les fichiers services.cfg et commands.cfg. Je reload le service nagios et attends sur l'interface Web (après un F5) le résultat, pour l'hôte indiqué dans services.cfg.
Le résultat indique ceci, sur la page Service detail :
**ePN failed to compile /usr/lib/nagios/plugins/check_disk_smb: "Can't locate utils.pm in @INC (@INC contains: nagios/plugins /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site" at /usr/
J'ai bien sûr un fichier utils.pm sous nagios/pugins, et l'utilisateur nagios en est le propriétaire ! De pus, J'ai d'autres plugins qui fonctionnenet très bien (check_ping, tcp, http, etc.).
Par contre, le check_disk_smb ET check_ntp me donnent le même résultat !
Merci de votre aide.
DonKiShoot
5th February 2007, 19:17
Ta commande est trés certainement mal défini ou tu n'as pas installé la totalité du package nagios-plugins.
Apparemment le plugin cherche utils.pm dans /usr/nagios/plugins
surcouf
5th February 2007, 19:29
Bonjour,
Un problème avec le plugin check_disk_smb. Elle fonctionne très bien en ligne de commande et en tant qu'utilisateur nagios :
./check_disk_smb -H monserveur -s monpartage -w 80 -c 90 -W MONDOMAINE -u utilisateur -p mdp
donne le résultat suivant :
Domaine=[MONDOMAINE] OS=[Unix] Server=[Samba ...]
WARNING: Only 6.77 Go (6 %) free on \\monserveur\monpartage
Pour tester correctement un plugin écrit en Perl avec un Nagios compilé avec le support de l'interpréteur embarqué, je te conseille de suivre la recommandation de la documentation pour tester ton plugin : http://nagios.sourceforge.net/docs/2_0/embeddedperl.html
Je modifie donc les fichiers services.cfg et commands.cfg. Je reload le service nagios et attends sur l'interface Web (après un F5) le résultat, pour l'hôte indiqué dans services.cfg.
Le résultat indique ceci, sur la page Service detail :
**ePN failed to compile /usr/lib/nagios/plugins/check_disk_smb: "Can't locate utils.pm in @INC (@INC contains: nagios/plugins /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site" at /usr/
J'ai bien sûr un fichier utils.pm sous nagios/pugins, et l'utilisateur nagios en est le propriétaire !
Ce chemin relatif est plutôt étrange. Peux-tu nous dire quelle est la distribution Linux utilisée, comment as-tu installé Nagios et ses plugins (paquets binaires, compilation manuelle) ?
De pus, J'ai d'autres plugins qui fonctionnenet très bien (check_ping, tcp, http, etc.).
Par contre, le check_disk_smb ET check_ntp me donnent le même résultat !
C'est normal, ils sont tous deux écrits en Perl. La plupart des autres sont écrits en C et compilés : ils ne dépendent donc que de bibliothèques partagées externes en C.
David31
6th February 2007, 09:30
DonKiShoot : Ta commande est très certainement mal défini ou tu n'as pas installé la totalité du package nagios-plugins.
Apparemment le plugin cherche utils.pm dans /usr/nagios/plugins
J'ai bien un fichier utils.pm sous /usr/nagios/plugins, et j'ai beau vérifier, je ne vois pas où ma commande foire. Surtout qu'elle fonctionne en ligne de commande.
surcouf : Ce chemin relatif est plutôt étrange. Peux-tu nous dire quelle est la distribution Linux utilisée, comment as-tu installé Nagios et ses plugins (paquets binaires, compilation manuelle) ?
J'ai utilisé sur une RedHat Entreprise 4 (core 4), le RPM 2.5-1. Les plugins étaient dedans. Je n'ai rien installé de plus (il faut le faire ?)
Le plugin check_disk_smb a la version 1.8.2.1 (nagios-plugin 1.3.1). Check_ntp a la version 1.14.2.3 (nagios-plugin 1.3.1).
surcouf : Pour tester correctement un plugin écrit en Perl avec un Nagios compilé avec le support de l'interpréteur embarqué, je te conseille de suivre la recommandation de la documentation pour tester ton plugin : http://nagios.sourceforge.net/docs/2...eddedperl.html
J'ai regarder la doc. mais j'ai du mal à saisir. Est-ce que cela veux dire que mon Nagios n'est pas compilé avec un interpréteur Perl ?
surcouf
6th February 2007, 19:25
J'ai bien un fichier utils.pm sous /usr/nagios/plugins, et j'ai beau vérifier, je ne vois pas où ma commande foire. Surtout qu'elle fonctionne en ligne de commande.
C'est un emplacement peu commun qui explique sans doute pourquoi l'interpréteur Perl a tant de mal à trouver le module. Il faut se méfier des plugins qui "fonctionnent" en ligne de commande : avec l'interpréteur Perl actif, il faut ajouter quelques lignes pour pouvoir simuler cet interpréteur. Tu es certain qu'il s'agisse de "/usr/nagios/plugins" et non pas de "/usr/lib/nagios/plugins" ?
J'ai utilisé sur une RedHat Entreprise 4 (core 4), le RPM 2.5-1. Les plugins étaient dedans. Je n'ai rien installé de plus (il faut le faire ?)
Le plugin check_disk_smb a la version 1.8.2.1 (nagios-plugin 1.3.1). Check_ntp a la version 1.14.2.3 (nagios-plugin 1.3.1).
J'ai regarder la doc. mais j'ai du mal à saisir. Est-ce que cela veux dire que mon Nagios n'est pas compilé avec un interpréteur Perl ?
Non, le message est assez explicite : l'interpréteur embarqué est bien présent.
Comme solution de contournement, je te propose de précéder les définitions de tes commandes de la redéfinition d'une variable d'environnement :
Si tu as :
$USER1$/check_disk_smb ... ou /usr/nagios/plugins/check_disk_smb ...
Tu remplaces par :
PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb
ou
PERL5LIB=$PERL5LIB:/usr/nagios/plugins /usr/nagios/plugins/check_disk_smb
Je conseille de plutôt redéfinir la macro $USER1$ directement car cette variable n'affecte que les scripts Perl et, ainsi, tous les plugins en Perl sauraient automatiquement où trouver utils.pm si besoin.
David31
8th February 2007, 09:08
Pour Surcouf :
C'est un emplacement peu commun qui explique sans doute pourquoi l'interpréteur Perl a tant de mal à trouver le module. Il faut se méfier des plugins qui "fonctionnent" en ligne de commande : avec l'interpréteur Perl actif, il faut ajouter quelques lignes pour pouvoir simuler cet interpréteur. Tu es certain qu'il s'agisse de "/usr/nagios/plugins" et non pas de "/usr/lib/nagios/plugins" ?
Tu as raison, c'est une coquille, il s'agit effectivement de /usr/lib/nagios/plugins. Il y a toutes les commandes check_... et le fichier utils.pm
Comme solution de contournement, je te propose de précéder les définitions de tes commandes de la redéfinition d'une variable d'environnement :
Si tu as :
$USER1$/check_disk_smb ... ou /usr/nagios/plugins/check_disk_smb ...
Tu remplaces par :
PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb
ou
PERL5LIB=$PERL5LIB:/usr/nagios/plugins /usr/nagios/plugins/check_disk_smb
Je conseille de plutôt redéfinir la macro $USER1$ directement car cette variable n'affecte que les scripts Perl et, ainsi, tous les plugins en Perl sauraient automatiquement où trouver utils.pm si besoin.
Cette redéfinition de la variable $USER1$ est à faire dans le fichier commands.conf, non ? Sous /etc/nagios, donc.
Allez je teste ...
Pour info, la variable $USER1$ est bien défini avec /usr/lib/nagios/plugins, dans le fichier ressources.cfg
David31
9th February 2007, 15:50
Pour Surcouf :
Comme solution de contournement, je te propose de précéder les définitions de tes commandes de la redéfinition d'une variable d'environnement :
Si tu as :
$USER1$/check_disk_smb ... ou /usr/nagios/plugins/check_disk_smb ...
Tu remplaces par :
PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb
ou
PERL5LIB=$PERL5LIB:/usr/nagios/plugins /usr/nagios/plugins/check_disk_smb
Je conseille de plutôt redéfinir la macro $USER1$ directement car cette variable n'affecte que les scripts Perl et, ainsi, tous les plugins en Perl sauraient automatiquement où trouver utils.pm si besoin.
J'ai donc modifier le fichier commands.cfg pour remplacer mon $USER1$/check_disk_smb ... en PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb ...
Le résultat (pour check_disk_smb et check_ntp, écrit tous les deux en Perl), est un status CRITICAL, avec un code de retour 127 is out of bounds - plugins may be missing. Pour ces 2 plugins Perl donc.
C'est mieux car je n'ai plus le status UNKNOW, on avance ... ;)
surcouf
9th February 2007, 19:39
Pour Surcouf :
J'ai donc modifier le fichier commands.cfg pour remplacer mon $USER1$/check_disk_smb ... en PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb ...
Le résultat (pour check_disk_smb et check_ntp, écrit tous les deux en Perl), est un status CRITICAL, avec un code de retour 127 is out of bounds - plugins may be missing. Pour ces 2 plugins Perl donc.
C'est mieux car je n'ai plus le status UNKNOW, on avance ... ;)
Pas vraiment non.
Il faudrait préciser "/usr/lib/nagios/plugins" et non pas "/usr/lib/nagios/".
David31
19th February 2007, 10:51
David : J'ai donc modifier le fichier commands.cfg pour remplacer mon $USER1$/check_disk_smb ... en PERL5LIB=$PERL5LIB:/usr/nagios/plugins $USER1$/check_disk_smb ...
Le résultat (pour check_disk_smb et check_ntp, écrit tous les deux en Perl), est un status CRITICAL, avec un code de retour 127 is out of bounds - plugins may be missing. Pour ces 2 plugins Perl donc.
C'est mieux car je n'ai plus le status UNKNOW, on avance ...
Surcouf :Pas vraiment non.
Il faudrait préciser "/usr/lib/nagios/plugins" et non pas "/usr/lib/nagios/".
Effectivement, c'est une coquille, j'ai donc reprécisé /usr/lib/nagios/plugins dans le fichier commands.cfg. Pour plus de clareté, voici le contenu du fichier commands.cfg, pour les plugins check_disk_smb et check_ntp :
# 'check_ntp' command definition
define command{
command_name check_ntp
command_line PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins/check_ntp -H $ARG1$ -v -w $ARG2$ -c $ARG3$
}
# 'check_disk_smb' command definition
define command{
command_name check_disk_smb
command_line PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins/check_disk_smb -H $ARG1$ -s $ARG2$ -u $ARG3$ -p $ARG4$ -w $ARG5$ -c $ARG6$ -W $ARG7$
}
Le résultat est le suivant : Les 2 plugins m'annoncent des erreurs d'host, alors qu'ils sont bien configurés. Je test la commande en ligne de commande, avec les mêmes parâmètres, et elles me donnent alors un bon résultat toutes les deux. Mais sur le navigateur, j'obtient :
Pour check_disk_smb, l'erreur est : Invalid host: $
Pour check_ntp, l'erreur est : No target host specified
Merci pour ton aide, surcouf, je pense que l'on est sur la bonne voie :)
Je te joint les fichiers services.cfg et commands.cfg
surcouf
19th February 2007, 12:25
Effectivement, c'est une coquille, j'ai donc reprécisé /usr/lib/nagios/plugins dans le fichier commands.cfg. Pour plus de clareté, voici le contenu du fichier commands.cfg, pour les plugins check_disk_smb et check_ntp :
# 'check_ntp' command definition
define command{
command_name check_ntp
command_line PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins/check_ntp -H $ARG1$ -v -w $ARG2$ -c $ARG3$
}
# 'check_disk_smb' command definition
define command{
command_name check_disk_smb
command_line PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins/check_disk_smb -H $ARG1$ -s $ARG2$ -u $ARG3$ -p $ARG4$ -w $ARG5$ -c $ARG6$ -W $ARG7$
}
Il y a un détail qui me choque dans tes définitions de commandes, c'est le fait que tu n'exploites pas du tout la macro $HOSTADDRESS$. C'est dommage car ça éviterait de spécifier l'adresse IP de l'hôte comme paramètre de la commande. La valeur de la directive « host_address » de l'hôte associé serait alors utilisée.
Le résultat est le suivant : Les 2 plugins m'annoncent des erreurs d'host, alors qu'ils sont bien configurés. Je test la commande en ligne de commande, avec les mêmes parâmètres, et elles me donnent alors un bon résultat toutes les deux. Mais sur le navigateur, j'obtient :
Pour check_disk_smb, l'erreur est : Invalid host: $
Pour check_ntp, l'erreur est : No target host specified
Merci pour ton aide, surcouf, je pense que l'on est sur la bonne voie :)
Je te joint les fichiers services.cfg et commands.cfg
Peux-tu me dire quelle est la distribution utilisée ?
Si c'est une Debian, quelle est la version du paquet nagios-text ?
David31
20th February 2007, 10:08
Merci pour ta réponse.
Peux-tu me dire quelle est la distribution utilisée ?
Si c'est une Debian, quelle est la version du paquet nagios-text ?
J'utilise la distribution RedHat Entreprise 4 (core 4).
Il y a un détail qui me choque dans tes définitions de commandes, c'est le fait que tu n'exploites pas du tout la macro $HOSTADDRESS$. C'est dommage car ça éviterait de spécifier l'adresse IP de l'hôte comme paramètre de la commande. La valeur de la directive « host_address » de l'hôte associé serait alors utilisée.
Effectivement, mais le fait de ne pas utiliser la variable $HOSTADRESSE$ me permet justement de spécifier un hôte différent de celui où je déclare la commande dans services.cfg
Je vais essayer avec pour voir ...
Non, rien, c'est le même résultat.
J'ai simplement remplacer dans comands.cfg check_ntp -H $ARG1$ ... par check_ntp -H $HOSTADRESS$ ...
Et dans services.cfg : check_command check_ntp!10.212.113.67!60!120 par check_command check_ntp!60!120
surcouf
20th February 2007, 15:52
Merci pour ta réponse.
J'utilise la distribution RedHat Entreprise 4 (core 4).
Question bête : est-ce que le fichier commands.cfg est bien déclaré avec nagios.cfg ?
Effectivement, mais le fait de ne pas utiliser la variable $HOSTADRESSE$ me permet justement de spécifier un hôte différent de celui où je déclare la commande dans services.cfg
Je ne comprends pas l'intérêt dans ce cas...
Normalement on définit des objets « host » auxquels sont associés des « services ».
La macro « $HOSTADDRESS », entre autres, permet d'hériter des paramètres de l'hôte associé facilement.
David31
20th February 2007, 16:58
Question bête : est-ce que le fichier commands.cfg est bien déclaré avec nagios.cfg ?
C'est une bonne question, que je me suis empressé de vérifier.
Mais oui, le fichier commands.cfg est bien déclaré dans nagios.cfg, sous la section OBJET CONFIGURATION FILE
D'ailleurs, la commande #nagios -v nagios.cfg ne déclenche pas d'erreur (ni de warning)
A tout hasard, je te joint mon fichier nagios.cfg
Je ne comprends pas l'intérêt dans ce cas...
Normalement on définit des objets « host » auxquels sont associés des « services ».
La macro « $HOSTADDRESS », entre autres, permet d'hériter des paramètres de l'hôte associé facilement.
C'est strictement une facilité graphique sur le site Nagios.
Par exemple, pour vérifier que mon serveur NTP "A" fonctionne, j'utilise le plugin check_ntp vers la strate plus haute (appelé serveur "B").
J'ai donc l'information du bon fonctionnement du serveur qui est au-dessus, mais dans la partie de mon serveur à moi (le "A").
Dans ce cas précis, cela ne m'intéresse pas de déclarer un hôte supplémentaire (serveur "B"), alors que l'information est "local" à mon serveur NTP.
C'est peut-être un choix qui se discute, mais c'est mon choix ;)
surcouf
20th February 2007, 18:44
C'est une bonne question, que je me suis empressé de vérifier.
Mais oui, le fichier commands.cfg est bien déclaré dans nagios.cfg, sous la section OBJET CONFIGURATION FILE
D'ailleurs, la commande #nagios -v nagios.cfg ne déclenche pas d'erreur (ni de warning)
A tout hasard, je te joint mon fichier nagios.cfg
Le fichier est correct.
Essaie donc de définir une macro utilisateur, par exemple $USER2$, avec pour valeur la définition de la variable d'envionnement plus le chemin :
$USER2$=PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins
Ensuite tu insères $USER2$ avant toutes tes commandes en Perl.
David31
21st February 2007, 09:47
Essaie donc de définir une macro utilisateur, par exemple $USER2$, avec pour valeur la définition de la variable d'envionnement plus le chemin :
$USER2$=PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins
Ensuite tu insères $USER2$ avant toutes tes commandes en Perl.
J'ai donc déclaré une variable $USER3$ dans resource.cfg :
$USER1$=/usr/lib/nagios/plugins
# Sets $USER2$ to be the path to event handlers
#$USER2$=/usr/lib/nagios/plugins/eventhandlers
# Store some usernames and passwords (hidden from the CGIs)
$USER3$=PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins
#$USER4$=somepassword
J'ai également modifié le fichier commands.cfg afin qu'il tienne compte de cette nouvelle variable $USER3$ :
# 'check_ntp' command definition
define command{
command_name check_ntp
command_line $USER3$ $USER1$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}
Pour être sûr de l'écriture de ma commande, j'ai vérifié le fichier services.cfg :
define service {
use generic-service
host_name NTP-Athos
service_description Service NTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups localhost-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_ntp!60!120
}
Je ne suis pas très sûr concernant la déclaration de $USER3$ dans commands.cfg.
Est-ce bien comme cela qu'il faut faire ?
command_line $USER3$ $USER1$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
RESULTAT :
J'ai une erreur CRITICAL : (Return code of 126 is out of bounds - plugin may be missing)
surcouf
21st February 2007, 12:07
J'ai donc déclaré une variable $USER3$ dans resource.cfg :
$USER1$=/usr/lib/nagios/plugins
# Sets $USER2$ to be the path to event handlers
#$USER2$=/usr/lib/nagios/plugins/eventhandlers
# Store some usernames and passwords (hidden from the CGIs)
$USER3$=PERL5LIB=$PERL5LIB:/usr/lib/nagios/plugins /usr/lib/nagios/plugins
#$USER4$=somepassword
J'ai également modifié le fichier commands.cfg afin qu'il tienne compte de cette nouvelle variable $USER3$ :
# 'check_ntp' command definition
define command{
command_name check_ntp
command_line $USER3$ $USER1$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}
Je ne suis pas très sûr concernant la déclaration de $USER3$ dans commands.cfg.
Est-ce bien comme cela qu'il faut faire ?
Presque : la macro $USER1$ est superflue dans la définition de ta commande puisque que le chemin absolu de ton plugin est déjà défini par $USER3$. Cette nouvelle macro doit remplacer $USER1$.
David31
21st February 2007, 14:44
command_line $USER3$ $USER1$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
Je ne suis pas très sûr concernant la déclaration de $USER3$ dans commands.cfg.
Est-ce bien comme cela qu'il faut faire ?
Presque : la macro $USER1$ est superflue dans la définition de ta commande puisque que le chemin absolu de ton plugin est déjà défini par $USER3$. Cette nouvelle macro doit remplacer $USER1$.
OK Alors je me retrouve avec :
command_line $USER3$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
RESULTAT : CA MARCHE !!!
Merci encore beaucoup pour tout vos efforts : Surcouf, Rone etDonkishoot.
Maintenant, si quelqu'un meut me dire qu'est-ce que qui a résolut le problème ... Histoire de comprendre en plus ;)
surcouf
21st February 2007, 16:23
OK Alors je me retrouve avec :
command_line $USER3$/check_ntp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
RESULTAT : CA MARCHE !!!
Merci encore beaucoup pour tout vos efforts : Surcouf, Rone etDonkishoot.
Maintenant, si quelqu'un meut me dire qu'est-ce que qui a résolut le problème ... Histoire de comprendre en plus ;)
Ton problème initial était que les dits plugins ne trouvaient pas le modules utils (du fichier utils.pm). La résolution vient de l'ajout de la variable PERL5LIB qui est aux modules Perl, ce que la variable PATH est aux binaires : la liste des chemins de recherche. En ajoutant le répertoire où se trouve utils.pm, les plugins peuvent enfin charger le module correspondant.