1 votes

Nagios : l'exécution du plugin avec nrpe produit un résultat différent de l'exécution locale

J'essaie d'ajouter une vérification NRPE pour surveiller l'agent Puppet, mais je rencontre des difficultés pour que le plugin renvoie le bon résultat lorsqu'il est exécuté localement.

J'utilise ce plugin :

lors de l'exécution du script localement sur le client nagios le résultat est correct mais l'exécution avec nrpe résulte en un résultat critique. Je suppose que j'ai manqué quelque chose dans ma configuration. Les autres plugins nrpe s'exécutent avec succès.

J'ai redémarré nrpe.d (et vérifié pendant qu'il était hors service qu'aucun pid nrpe ne tournait). Les permissions, ownder et group pour le fichier check_puppet sont les mêmes que pour mes autres vérifications.

[root@puppet-master]# /usr/lib64/nagios/plugins/check_nrpe -H server.addr -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process

[root@git nrpe.d]# /usr/lib64/nagios/plugins/check_puppet
OK: Puppet agent "3.4.3" running catalogversion 1398787991, and executed at Tue 29 Apr 2014 04:13:25 PM UTC for last time

nagios_commands.cfg :

define command {
    command_line                   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_puppet
    command_name                   check_nrpe_puppet
}

nagios_service.cfg :

define service {
    ## --PUPPET_NAME-- (called '_naginator_name' in the manifest)                    check_puppet
    check_command                  check_nrpe_puppet
    host_name                      server.addr
    service_description            check_puppet
    use                            generic-service
}

/etc/nrpe.d/nrpe-check_puppet

# Configuration for check_puppet (from the generic template)
command[check_puppet]=/usr/lib64/nagios/plugins/check_puppet

Pour référence, voici une de mes configurations qui fonctionne

define command {
    command_line                   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_ram
    command_name                   check_nrpe_ram

}

define service {
    ## --PUPPET_NAME-- (called '_naginator_name' in the manifest)                check_ram_server.addr
    check_command                  check_nrpe_ram
    host_name                      server.addr
    service_description            ram
    use                            generic-service
}

/etc/nrpe.d/nrpe-check_ram

# Configuration for check_ram (from the generic template)
command[check_ram]=/usr/lib64/nagios/plugins/check_ram -w 10% -c 5%

Mise à jour :

J'avais ajouté l'utilisateur Nagios à sudoers comme indiqué dans le readme mais je n'avais pas testé l'exécution de la vérification en tant qu'utilisateur Nagios. Cela a échoué parce que le chemin autorisé dans la liste des sudoers était incorrect (mon plugin est en Lib64), et NRPE fonctionne aussi en tant qu'utilisateur nrpe sur mes systèmes.

J'ai corrigé sudoers pour accorder nopasswed sudo pour le bon dossier à l'utilisateur nrpe et j'ai ajouté un nrpe Shell afin que je puisse tester en tant que cet utilisateur (il était défini à nologin).

bash-4.1$ whoami
nrpe
bash-4.1$ /usr/lib64/nagios/plugins/check_puppet 
UNKNOWN: last_run_summary.yaml not found, not readable or incomplete
bash-4.1$ exit
exit
[root@ip-10-185-165-196 plugins]# ps auxww | grep nrpe 
nrpe     16353  0.0  0.0  41320  1364 ?        Ss   23:33   0:00 /usr/sbin/nrpe -c   /etc/nagios/nrpe.cfg -d
root     16814  0.0  0.0 103236   856 pts/0    S+   23:53   0:00 grep nrpe
[root@ip-10-185-165-196 plugins]# 

Sur le serveur nagios :

[root@puppet-master plugins]# ./check_nrpe -H <myserver> -t 15 -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process

J'utilise une installation minimale de CentOS 6.5.

J'ai désactivé requiretty avec :

Defaults:nrpe    !requiretty

UPDATE 3 :

On dirait que SELinux est à blâmer. setenforce 0 a résolu le problème. $setenforce 0

0 votes

Que se passe-t-il lorsque vous invoquez la commande nrpe à partir d'un Shell ?

0 votes

Il revient critique. Voir la première case de code pour l'exemple.

1 votes

Que se passe-t-il lorsque vous exécutez le check_puppet sur le client comme le nagios utilisateur ?

2voto

MadHatter Points 77602

Comme le souligne yoonix, le plugin lui-même est assez clair, aux lignes 36-38 : c'est juste une enveloppe autour d'un plugin principal, et ce plugin principal doit être exécuté en tant que root. C'est pourquoi il fonctionne bien lorsque vous l'exécutez en tant que root. Le wrapper va élever les privilèges via sudo ; il est configuré pour exécuter la commande sudo en soi, mais vous devrez fournir les sudo les privilèges.

En supposant que votre nrpe fonctionne en tant qu'utilisateur nagios le plugin indique que vous aurez besoin de la ligne suivante dans votre fichier sudoers archivo:

nagios ALL=NOPASSWD:/usr/bin/puppet,/usr/lib/nagios/plugins/check_puppet_agent,/bin/kill

(Je ne suis pas sûr de savoir pourquoi il faut /bin/kill mais il est dit qu'il le fait, donc vous feriez mieux de l'accorder ou de risquer que le plugin échoue de manière intéressante et sous-documentée).

Vous ne nous dites pas quel est votre système d'exploitation (et, s'il s'agit de Linux, votre distribution) ; si c'était CentOS et que vous utilisiez le RPMforge nrpe il sera exécuté en tant qu'utilisateur nagios . Vous devrez trouver quel utilisateur votre nrpe s'exécute en tant que, et substituer cet utilisateur à l'utilisateur principal. nagios dans le sudoers ligne ci-dessus.

1 votes

En outre, vous devrez peut-être désactiver requiretty pour cette commande, en fonction de votre sudo conf existant (par exemple, distro).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X