Attention, ce tutoriel ne fonctionne pas avec les versions Centreon >= 20.04. La fonctionnalité checkresults n'est plus disponible.
NRPD (Nagios Remote Data Processeur) est un programme utilisant le protocole http ou https et permettant d’envoyer des informations à destination des contrôles passifs d’une supervision Nagios ou équivalente. Cette solution est passé en GPL le 27 août 2018, il est maintenant possible de l'utiliser avec Centreon.
Les hôtes envoient les informations par l’intermédiaire d’un exécutable bash, php ou python. Le serveur de supervision réceptionne le résultat par l’intermédiaire d’une application Web. Celui-ci envoie les informations un dossier via le mécanisme checkResults. le moteur de supervision traitera ensuite les informations selon ses disponibilités.Il est obligatoire d’activer les commandes externes du moteur de supervision.
Les hôtes envoient les informations par l’intermédiaire d’un exécutable bash, php ou python. Le serveur de supervision réceptionne le résultat par l’intermédiaire d’une application Web. Celui-ci envoie les informations un dossier via le mécanisme checkResults. le moteur de supervision traitera ensuite les informations selon ses disponibilités.Il est obligatoire d’activer les commandes externes du moteur de supervision.
1 Installation de NRDP sur le serveur de supervision
L’installation de NRDP nécessite une configuration apache spécifique pour l'intégration avec Centreon.
1.1 Installation
Téléchargez les prérequis.
Debian
apt-get install wget -yCENTREON
yum install wget -y
Décompressez l’archive NRDP dans le dossier /usr/local/src
cd /usr/local/src wget https://github.com/NagiosEnterprises/nrdp/archive/2.0.0.tar.gz tar xvf 2.0.0.tar.gz cd nrdp-*
Copions les fichiers dans le dossier du moteur centengine. Adaptez en fonction de votre configuration.
Debian
mkdir /usr/local/nrdp cp -r clients server LICENSE* CHANGES* /usr/local/nrdp chown -R www-data:www-data /usr/local/nrdpCENTREON
mkdir /usr/local/nrdp cp -r clients server LICENSE* CHANGES* /usr/local/nrdp chown -R apache:apache /usr/local/nrdp
Si vous n'utilisez que la fonction serveur, utilisez ces commandes
Debian
mkdir /usr/local/nrdp cp -r server LICENSE* CHANGES* /usr/local/nrdp chown -R www-data:www-data /usr/local/nrdpCENTREON
mkdir /usr/local/nrdp cp -r server LICENSE* CHANGES* /usr/local/nrdp chown -R apache:apache /usr/local/nrdp
1.2 Configuration
Modifiez le fichier de configuration de NRPD pour adapter le chemin des commandes externes du moteur de supervision et ajouter le token qui servira pour l'authentification de la communication.
vi /usr/local/nrdp/server/config.inc.php
Choisissez un token, pour notre essai, nous allons décommander le deuxième
$cfg["authorized_tokens"] = array( // "mysecrettoken", // <-- not a good token "90dfs7jwn3", // <-- a better token (don't use this exact one, make your own) );
Choisissez le user qui pourra exécuter les commandes externes
$cfg["nagios_command_group"] = "centreon-engine";
Modifiez la ligne suivante pour le chemin de la commande externe
command_file=/var/lib/centreon-engine/rw/centengine.cmd
Modifiez la ligne suivante pour le chemin du dossier checkresults
Debian
$cfg["check_results_dir"] = "/var/spool/checkresults";CENTREON
$cfg["check_results_dir"] = "/var/spool/nagios/checkresults";
1.3 Création du dossier checkresults
Assurez-vous d'avoir un user nagios et son dossier /var/spool/nagios. L'ISO Centreon 19.04 a normalement ce prérequis. Créez le dossier checkresults. Pour Debian, utilisez le user centreon-engine.
Debian
mkdir /var/spool/checkresults chown centreon-engine:centreon-engine /var/spool/checkresults chmod 775 /var/spool/checkresults/CENTREON
mkdir /var/spool/nagios/checkresults chown nagios:nagios /var/spool/nagios/checkresults chmod 775 /var/spool/nagios/checkresults/
1.4 Configuration apache
Nous devons adapter la configuration apache avec la fonctionnalité fpm. Par convention nous utiliserons le port 9044, le 9042 étant utilisé par Centreon et si vous avez Nagvis décrit dans mes tutos, il utilise le port 9043. Créez un fichier nrdp.conf pour apache
Debian
vi /etc/apache2/conf-available/nrdp.confCENTREON
vi /opt/rh/httpd24/root/etc/httpd/conf.d/nrdp.conf
Modifiez le fichier comme suit :
# Nrdp Apache2 sample configuration file # # ############################################################################# Alias /nrdp /usr/local/nrdp/server/ <LocationMatch ^/nrdp/(.*\.php(/.*)?)$> ProxyPassMatch fcgi://127.0.0.1:9044/usr/local/nrdp/server/$1 </LocationMatch> ProxyTimeout 300 <Directory "/usr/local/nrdp/server"> DirectoryIndex index.php Options Indexes AllowOverride all Order allow,deny Allow from all Require all granted <IfModule mod_php5.c> php_admin_value engine Off </IfModule> AddType text/plain hbs </Directory> RedirectMatch ^/$ /nrdp
Nous devons créer une configuration php-fpm pour Nrpd.
Debian
vi /etc/php/7.1/fpm/pool.d/nrpd.confCENTREON
vi /etc/opt/rh/rh-php71/php-fpm.d/nrpd.conf
Configurez comme ceci.
Debian
[nrdp] user = www-data group = www-data listen = 127.0.0.1:9044 listen.allowed_clients = 127.0.0.1 pm = ondemand pm.max_children = 30 pm.process_idle_timeout = 10s pm.max_requests = 500 rlimit_files = 4096 php_admin_value[error_log] = /var/log/fpm-php.nrdp.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/sessions php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
CENTREON
[nrdp] user = apache group = apache listen = 127.0.0.1:9044 listen.allowed_clients = 127.0.0.1 pm = ondemand pm.max_children = 30 pm.process_idle_timeout = 10s pm.max_requests = 500 rlimit_files = 4096 php_admin_value[error_log] = /var/opt/rh/rh-php71/log/php-fpm/nrpd-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/opt/rh/rh-php71/lib/php/session php_value[soap.wsdl_cache_dir] = /var/opt/rh/rh-php71/lib/php/wsdlcache
Relancez Apache pour qu'il prenne en compte la nouvelle configuration.
Debian
a2enconf nrdp.conf systemctl restart apache2 php7.1-fpmCENTREON
systemctl restart rh-php71-php-fpm systemctl restart httpd24-httpd
1.4 vérification
Connectez-vous sur l'interface web
http://<IP du serveur>/nrdp
Vous devriez avoir cette vue
Il est possible de vérifier le fonctionnement en saisissant le token et cliquant sur le bouton "Submit JSON Check Result".
Si vous avez bien configuré votre installation, vous devriez avoir le message OK et des fichier dans le dossier chekresults.
ls /var/spool/nagios/checkresults/ cqb3kWN cqb3kWN.ok ct1oeCS ct1oeCS.ok
1.5 activation de checkresult dans Centreon
Il reste à activer la fonctionnalité checkresults dans Centreon. Connectez-vous dans votre interface Centreon. sélectionnez Configuration > Pollers > Engine configuration. Modifiez la configuration du poller, section Result Cache.
Check result directory : /var/spool/nagios/checkresults
Status : yes
Max Check Result File Age : 0
Status : yes
Max Check Result File Age : 0
Appliquez la configuration avec la méthode restart. Ne tenez pas compte du message Warning, il indique que cette fonctionnalité risque d'être supprimée dans les versions futures.
Si vous avez réalisé le test précédent, vous devriez retrouver les messages suivant dans le fichier de log /var/log/centreon-engine/centengine.log
[1562138439] [4481] Warning: Check result queue contained results for host 'somehost', but the host could not be found! Perhaps you forgot to define the host in your config files ? [1562138439] [4481] Warning: Check result queue contained results for service 'someservice' on host 'somehost', but the service could not be found! Perhaps you forgot to define the service in your config files ?
2 Installation du client NRDP sur les hôtes à superviser
2.1 Linux
2.1.a Installation du client
L'installation du client est identique au serveur. On installera seulement la partie client.
mkdir /usr/local/nrdp cp -r clients LICENSE* CHANGES* /usr/local/nrdp chown -R centreon:centreon /usr/local/nrdp
2.1.b Test du client
Maintenant, vérifions le fonctionnement de NSCA. Lancez cette commande dans le dossier du client nsca.
/usr/local/nrdp/clients/send_nrdp.sh -u http://192.168.1.53/nrdp/ -t 90dfs7jwn3 -H servdebian -s "test_nrdp" -S 1 -o "WARNING: The disk is 75% full"
La commande doit vous retourner le résultat suivant.
Sent 1 checks to http://192.168.1.53/nrdp/
Contrairement à NSCA, le message indique la communication a bien été établie. Si nous avions envoyé la même commande avec un token non reconnu, nous aurions le message suivant :
ERROR: The NRDP Server said BAD TOKEN
Il est tout de même possible de vérifier le fonctionnement du serveur nrdp en activant la fonction debug. Editez le fichier de configuration /usr/local/nrdp/server/config.inc.php
$cfg["debug"] = true;
si vous tentez une autre commande, un fichier debug.log est créé dans le dossier /usr/local/nrdp/server. Voici le contenu :
[Wed, 03 Jul 2019 09:34:11 +0200] check_auth() [Wed, 03 Jul 2019 09:34:11 +0200] check_token() [Wed, 03 Jul 2019 09:34:11 +0200] checking token: 90dfs7jwn3 [Wed, 03 Jul 2019 09:34:11 +0200] * token passed [Wed, 03 Jul 2019 09:34:11 +0200] nagioscorecmd_process_request(cbtype = PROCESS_REQUEST, args[cmd] = submitcheck [Wed, 03 Jul 2019 09:34:11 +0200] nagioscorecmd_process_request() had no registered callbacks, returning [Wed, 03 Jul 2019 09:34:11 +0200] nagioscorepassivecheck_process_request(cbtype = PROCESS_REQUEST, args[cmd] = submitcheck [Wed, 03 Jul 2019 09:34:11 +0200] REQUEST: [token] 90dfs7jwn3 [Wed, 03 Jul 2019 09:34:11 +0200] REQUEST: [cmd] submitcheck [Wed, 03 Jul 2019 09:34:11 +0200] REQUEST: [xml] <?xml version='1.0'?> <checkresults> <checkresult type='service' checktype='1'> <servicename>test_nrdp</servicename><hostname>servdebian</hostname> <state>1 <output><![CDATA[WARNING: The disk is 75% full]]></output> </checkresult> </checkresults> [Wed, 03 Jul 2019 09:34:11 +0200] our xml: SimpleXMLElement Object ( [checkresult] => SimpleXMLElement Object ( [@attributes] => Array ( [type] => service [checktype] => 1 ) [servicename] => test_nrdp [hostname] => servdebian [state] => 1 [output] => SimpleXMLElement Object ( ) ) ) [Wed, 03 Jul 2019 09:34:11 +0200] gathered the following datas: type: service hostname: servdebian servicename: test_nrdp state: 1 output: WARNING: The disk is 75% full allow_old_results: time: 0 [Wed, 03 Jul 2019 09:34:11 +0200] nrdp_write_check_output_to_cmd(hostname=servdebian, servicename=test_nrdp, state=1, type=service, output=WARNING: The disk is 75% full [Wed, 03 Jul 2019 09:34:11 +0200] nrdp_write_check_output_to_cmd() completed [Wed, 03 Jul 2019 09:34:11 +0200] all nrdp checks have been written
2.2 Windows avec NSClient ++
Nous allons étudier le fonctionnement avec l'agent NSCLIENT++. Nous utiliserons la version 0.5x. Modifions le fichier de configuration nsclient.ini. Tout d'abord, il faut charger les modules adéquats dans la section modules.
[/modules] NSCAClient = enabled Scheduler = enabled
Nous définirons le nom de l'hôte qui sera utilisé par Centreon. Dans notre exemple, le nom du serveur Windows sera préfixé par la chaîne win_
[/settings/NSCA/client] hostname = win_${host}
Il faudra définir la cible du serveur Centreon. On peut aussi définir le mode de chiffrage ainsi qu'un éventuel mot de passe. Le fichier du démon NSCA sur le serveur devra être en corrélation.
[/settings/NSCA/client/targets/default] address = 10.0.3.70 encryption = aes password = centreon
Pour déclencher automatiquement un script pour NSCA, on active un scheduler. Il faut aussi le configurer, par défaut, on appliquera 5 minutes.
[/settings/scheduler/schedules/default] interval = 5m
Nous ajouterons le ou les services qui devront être activé par le scheduleur. Le module CheckSystem devra être activé.
[/settings/scheduler/schedules] test_nsca = alias_cpu
Redémarrez le service NSCLIENT et vérifions le résultat dans le fichier de log de centreon-engine. La deuxième ligne est normale car le service n'existe pas dans Centreon.
[1564059784] [4834] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;win_WIN2008R2;test_nsca;0;OK: CPU load is ok.|'total 5m'=1%;80;90 'total 1m'=0%;80;90 'total 5s'=1%;80;90 [1564059784] [4834] Warning: Passive check result was received for service 'test_nsca' on host 'win_WIN2008R2', but the service could not be found!
Si vous ne voyez rien dans ce fichier, vérifiez le fichier de log système (var/log/syslog pour Debian ou /var/log/message pour CentOS) s'il n'y a pas un problème de chiffrage comme cet exemple :
Jul 25 14:52:49 srv-ang-inf070 nsca[1520]: Received invalid packet type/version from client - possibly due to client using wrong password or crypto algorithm?
3 Configuration de Centreon
Il reste à réaliser la configuration de notre service dans Centreon. Nous aurons besoin d’un service passif et nous utiliserons une version 19.04 avec les plugins pack free.
3.1 Modèle de service passif
Nous utiliserons le modèle déjà créé par les plugins-pack, le modèle generic-passive-service-custom. Les paramètres de ce modèle hérite du modèle en lecture seule generic-passive-service.
3.1a Création d'un modèle de service passif
Pour info, si vous n'avez pas les plugins pack, les commandes clapi pour créer un modèle de service passif
Centreon-Clapi
centreon -u admin -p password -o STPL -a add -v "service-generique-passif;service-generique-passif;"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;check_period;24x7"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;check_command;check_centreon_dummy"
centreon -u admin -p password -o STPL -a setparam -v 'service-generique-passif;check_command_arguments;!0!OK'
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;max_check_attempts;1"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;normal_check_interval;1"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;retry_check_interval;1"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;active_checks_enabled;0"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;passive_checks_enabled;1"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;notifications_enabled;1"
centreon -u admin -p password -o STPL -a addcontactgroup -v "service-generique-passif;Supervisors"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;notification_interval;0"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;notification_period;24x7"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;notification_options;w,c,r,f,s"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;first_notification_delay;0"
centreon -u admin -p password -o STPL -a setparam -v "service-generique-passif;service_check_freshness;1"
3.2 le service passif test_nrpd
3.2.a configuration
Nous pourrions créer un template de service NRDP mais pour notre exemple, il sera plus simple de créer directement un service. Nous appellerons ce service test_nrdp et il sera associé à l’hôte servdebian.
3.2.b application de la configuration
Une fois la configuration appliquée sur votre serveur, vous pouvez visualiser le service dans la page Monitoring Services.
Le service est mode pending et restera dans ce mode tant qu’une opération d’acquittement ou d’envoi de commande NRDP ne soient pas réalisés.
Acquittez le service.
Votre service est opérationnel.
4 Vérifications et essais avec le client NRDP en ligne de commande
Testons notre installation. Connectez vous sur le serveur servdebian et testez en envoyant les lignes de commandes suivantes.
4.1 état warning
root@servdebian:/usr/local/nrdp/clients/send_nrdp.sh -u http://192.168.1.53/nrdp/ -t 90dfs7jwn3 -H servdebian -s "test_nrdp" -S 1 -o "WARNING: test warning" Sent 1 checks to http://192.168.1.53/nrdp/
Vous trouverez dans les logs du moteur
[1562140602] [5245] PASSIVE SERVICE CHECK: servdebian;test_nrdp;1;WARNING: test warning [1562140602] [5245] SERVICE ALERT: servdebian;test_nrdp;WARNING;HARD;1;WARNING: test warning
4.2 état critique
root@servdebian:/usr/local/nrdp/clients/send_nrdp.sh -u http://192.168.1.53/nrdp/ -t 90dfs7jwn3 -H servdebian -s "test_nrdp" -S 2 -o "CRITICAL: test critical" Sent 1 checks to http://192.168.1.53/nrdp/
Vous trouverez dans les logs du moteur
[1562140807] [5245] PASSIVE SERVICE CHECK: servdebian;test_nrdp;2;CRITICAL: test critical [1562140807] [5245] SERVICE ALERT: servdebian;test_nrdp;CRITICAL;HARD;1;CRITICAL: test critical
4.3 état OK
root@servdebian:/usr/local/nrdp/clients/send_nrdp.sh -u http://192.168.1.53/nrdp/ -t 90dfs7jwn3 -H servdebian -s "test_nrdp" -S 0 -o "OK: retour à la normale" Sent 1 checks to http://192.168.1.53/nrdp/
Vous trouverez dans les logs du moteur
[1562141057] [5245] PASSIVE SERVICE CHECK: servdebian;test_nrdp;0;OK: retour à la normale [1562141057] [5245] SERVICE ALERT: servdebian;test_nrdp;OK;HARD;1;OK: retour à la normale
4.4 données de performances et graphes
/usr/local/nrdp/clients/send_nrdp.sh -u http://192.168.1.53/nrdp/ -t 90dfs7jwn3 -H servdebian -s "test_nrdp" -S 2 -o "CRITICAL: test data|nbcritical=10" Sent 1 checks to http://192.168.1.53/nrdp/
Vous trouverez dans les logs du moteur
[1562141402] [5245] PASSIVE SERVICE CHECK: servdebian;test_nrdp;2;CRITICAL: test data [1562141402] [5245] SERVICE ALERT: servdebian;test_nrdp;CRITICAL;HARD;1;CRITICAL: test data
Vous avez découvert le protocole nrdp, j'attire votre attention que ce programme risque d'être obsolète avec les prochaines versions de Centreon. Vous découvrirez bientôt un autre système plus en adéquation avec la supervision Centreon.