User Tools

Site Tools


informatique:logiciels:nagios

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:logiciels:nagios [2010/05/19 15:35] – NRPE : init script pteuinformatique:logiciels:nagios [2021/01/15 15:47] (current) – [Contrôler Nagios en CLI] nagios_downtime_w_childs.sh pteu
Line 1: Line 1:
-{{tag>supervision libre}}+======Nagios======
  
-====== Nagios ======+Nagios est un programme de supervision libre composé d'un scheduler (nagios-core), de greffons (nagios-plugins) et d'une interface web de management (inclue dans nagios-core). Il est couramment utilisé pour faire des tests de PING sur des équipements, ou tester le bon fonctionnement de services (HTTP, SMTP).
  
-Nagios est un programme de supervision libre composé d'un scheduler, de greffons (plugins) et d'une interface web de management. Il est couramment utilisé pour faire des PING sur des équipements ou tester des services (HTTP, SMTP) via ses greffons. 
  
-=====Installation du paquet Ubuntu=====+======Généralités====== 
 + 
 +Le principe de base est simple : on configure différents plugins pour qu'ils interrogent certains équipements ; et ces plugins sont ordonnancés par le moteur Nagios. Comme tous les processus, les plugins retournent : 
 +  * un code d'erreur qui code l'état du check 
 +  * une ligne de résultat affichée sur la sortie standard (qu'on appelle données de performance, que l'on peut récupérer pour traitement ; par exemple les RTT des PING pour faire des courbes RRD). 
 + 
 +Les codes d'erreurs sont standardisés 0 (OK), 1 ou 2 pour les host ; et 0 (OK), 1 (WARNING), 2 (CRITICAL) ou 3 (UNKNOWN) pour les services. N'importe quel script qui respecte ces retours est compatible avec Nagios ; c'est cette interopérabilité qui a fait son succès. 
 + 
 + 
 +======Installation====== 
 + 
 +=====sous Ubuntu (avec apt)=====
  
 Installation classique sous Ubuntu avec résolution automatique des dépendances : Installation classique sous Ubuntu avec résolution automatique des dépendances :
-<code>aptitude install nagios3</code>+<code bash> 
 +aptitude install nagios3 
 +</code>
  
 Puis il faut créer un utilisateur et lui attribuer un mot de passe (si ce n'est pas déjà fait lors de l'installation) pour l'accès à l'interface web : Puis il faut créer un utilisateur et lui attribuer un mot de passe (si ce n'est pas déjà fait lors de l'installation) pour l'accès à l'interface web :
-<code>htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin+<code bash> 
 +htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin
  New password:   New password: 
  Re-type new password:   Re-type new password: 
Line 22: Line 35:
   * utiliser l'installation de base pour simplifier l'installation de nouveaux plugins ou addons   * utiliser l'installation de base pour simplifier l'installation de nouveaux plugins ou addons
 ... alors il faut le compiler à partir des sources. ... alors il faut le compiler à partir des sources.
 +
 +=====sous Ubuntu 9.10 (OLD)=====
 +
 +Sous Ubuntu (9.10) il y a(vait) 2 problèmes avec l'installation par défaut :
 +  * problème avec le plugin **check_ssh** : en fait il n'y a pas de serveur SSH installé sous Ubuntu par défaut. Pour l'installer il faut installer le paquet **openssh-server**.
 +  * problème de droit d'accès avec le plugin **check_disk** : ''DISK CRITIQUE - /home/<user>/.gvfs is not accessible: Permission non accordée''
 +
 +Pour ignorer le fichier qui pose ce problème de droit d'accès, il faut éditer la configuration du plugin check_disk et ajouter à la fin de la ligne : '' -A -i .gvfs''
 +<code bash>
 +sudo vi /etc/nagios-plugins/config/disk.cfg
 +# 'check_all_disks' command definition
 +define command{
 +   command_name    check_all_disks
 +   #ancienne ligne
 +   #command_line   /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e
 +   #nouvelle ligne
 +   command_line    /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -A -i .gvfs
 +   }
 +</code>
 +
 +Puis il faut recharger la conf dans Nagios :
 +<code bash>
 +sudo service nagios3 stop
 + * Stopping nagios3 monitoring daemon nagios3                                                               
 +
 +sudo service nagios3 start                              [ OK ]
 + * Starting nagios3 monitoring daemon nagios3
 +kill: 1: No such process                                [ OK ]
 +</code>
 +
 +//source : https://help.ubuntu.com/community/Nagios3#Post%20Install%20Tasks //
  
  
Line 31: Line 75:
  
   * Il faut disposer d'un serveur web (Apache2 par exemple) avec PHP (5 par exemple), la librairie GD et des outils de compilation (gcc & co) :   * Il faut disposer d'un serveur web (Apache2 par exemple) avec PHP (5 par exemple), la librairie GD et des outils de compilation (gcc & co) :
-<code>+<code bash>
 yum install httpd yum install httpd
 yum install gd gd-devel yum install gd gd-devel
Line 38: Line 82:
  
 Vérifier que le serveur web se lance bien au démarrage classique : Vérifier que le serveur web se lance bien au démarrage classique :
-<code>+<code bash>
 chkconfig --list | grep httpd chkconfig --list | grep httpd
 </code> </code>
  
 Si le service n'est pas listé, l'ajouter à la liste : Si le service n'est pas listé, l'ajouter à la liste :
-<code>+<code bash>
 chkconfig --add httpd chkconfig --add httpd
 chkconfig --list | grep httpd chkconfig --list | grep httpd
Line 50: Line 94:
  
 S'il n'est pas chargé au démarrage, l'y ajouter (runlevels de 2 à 5 par défaut) : S'il n'est pas chargé au démarrage, l'y ajouter (runlevels de 2 à 5 par défaut) :
-<code>+<code bash>
 chkconfig httpd on chkconfig httpd on
 chkconfig --list | grep httpd chkconfig --list | grep httpd
Line 57: Line 101:
  
   * création des utilisateurs et groupes qui seront utilisés par Nagios   * création des utilisateurs et groupes qui seront utilisés par Nagios
-<code> +<code bash
-groupadd nagios +groupadd nagios 
-groupadd nagcmd +groupadd nagcmd 
-useradd -g nagios -G nagcmd -c "Nagios Admin" nagios+useradd -g nagios -G nagcmd -c "Nagios Admin" nagios
 </code> </code>
  
Line 69: Line 113:
  
   * téléchargement + décompression   * téléchargement + décompression
-<code> +<code bash
-wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz +wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz 
-tar -zxf nagios-3.2.1.tar.gz +tar -zxf nagios-3.2.1.tar.gz 
-cd nagios-3.2.1+cd nagios-3.2.1
 </code> </code>
  
   * configurer les options de compilation :    * configurer les options de compilation : 
-<code> +<code bash
-./configure --enable-event-broker --enable-embedded-perl --with-command-group=nagcmd+./configure --enable-event-broker --enable-embedded-perl --with-command-group=nagcmd
 </code> </code>
     * L'option ''--enable-event-broker'' n'est pas utile si on utilise juste Nagios et ses plugins de base ; en revanche si on veut utiliser l'addon NDOutils (par exemple) il faut l'activer.     * L'option ''--enable-event-broker'' n'est pas utile si on utilise juste Nagios et ses plugins de base ; en revanche si on veut utiliser l'addon NDOutils (par exemple) il faut l'activer.
Line 84: Line 128:
  
   * lancer la compilation   * lancer la compilation
-<code> +<code bash
-make all+make all
 </code> </code>
  
Line 96: Line 140:
     * make install-webconf : installation du fichier de configuration d'Apache pour Nagios. Ce dernier sera accessible sur http://127.0.0.1/nagios/     * make install-webconf : installation du fichier de configuration d'Apache pour Nagios. Ce dernier sera accessible sur http://127.0.0.1/nagios/
  
-<code> +<code bash
-make install +make install 
-make install-init +make install-init 
-make install-commandmode +make install-commandmode 
-make install-config +make install-config 
-make install-webconf+make install-webconf
 </code> </code>
  
Line 112: Line 156:
  
 On ajoute l'utilisateur nagiosadmin au fichier htpasswd.users qui contient les couples login/mot de passe hashé. Puis on donne l'accès au fichier à l'utilisateur apache, sur lequel doit tourner le service httpd. On ajoute l'utilisateur nagiosadmin au fichier htpasswd.users qui contient les couples login/mot de passe hashé. Puis on donne l'accès au fichier à l'utilisateur apache, sur lequel doit tourner le service httpd.
-<code> +<code bash
-htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin +htpasswd /usr/local/nagios/etc/htpasswd.users nagiosadmin 
-chown nagios:nagcmd /usr/local/nagios/etc/htpasswd.users +chown nagios:nagcmd /usr/local/nagios/etc/htpasswd.users 
-usermod -a -G nagios,nagcmd apache+usermod -a -G nagios,nagcmd apache
 </code> </code>
  
   * lancement de Nagios au démarrage du système   * lancement de Nagios au démarrage du système
 Configuration pour que Nagios se lance automatiquement au démarrage du système : Configuration pour que Nagios se lance automatiquement au démarrage du système :
-<code> +<code bash
-chkconfig --add nagios +chkconfig --add nagios 
-chkconfig nagios on+chkconfig nagios on
 </code> </code>
  
   * redémarrage du serveur web pour qu'il prenne en compte sa nouvelle configuration   * redémarrage du serveur web pour qu'il prenne en compte sa nouvelle configuration
-<code>+<code bash>
 service httpd restart service httpd restart
 </code> </code>
Line 144: Line 188:
  
 Pour compilation du module check_snmp : Pour compilation du module check_snmp :
-<code>+<code bash>
 yum install net-snmp net-snmp-utils yum install net-snmp net-snmp-utils
 </code> </code>
Line 150: Line 194:
  
   * téléchargement et décompression   * téléchargement et décompression
-<code> +<code bash
-wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz +wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz 
-tar zxf nagios-plugins-1.4.14.tar.gz +tar zxf nagios-plugins-1.4.14.tar.gz 
-cd nagios-plugins-1.4.14+cd nagios-plugins-1.4.14
 </code> </code>
  
   * configuration des options de compilation   * configuration des options de compilation
-<code> +<code bash
-./configure --with-command-group=nagcmd --enable-perl-modules+./configure --with-command-group=nagcmd --enable-perl-modules
 </code> </code>
 Les options suivent la logique de compilation de Nagios. Les options suivent la logique de compilation de Nagios.
  
   * compilation   * compilation
-<code> +<code bash
-make+make
 </code> </code>
  
   * installation   * installation
-<code> +<code bash
-make install+make install
 </code> </code>
  
   * vérification de la configuration de Nagios   * vérification de la configuration de Nagios
-<code>+<code bash>
 /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 </code> </code>
  
   * enfin, on lance Nagios   * enfin, on lance Nagios
-<code>+<code bash>
 service nagios start service nagios start
 </code> </code>
  
  
-===== Configuration =====+======Configuration======
  
-Les fichiers principaux se trouvent dans ''/etc/nagios3/'' : ''nagios.cfg'' et ''cgi.cfg''+Les fichiers principaux se trouvent dans ''/etc/nagios'' (ou ''/etc/nagios3/'' pour les Debian/Ubuntu)
  
-==== Contacts et groupes de contacts ====+=====Contacts et groupes de contacts=====
  
 On renseigne les personnes de contact (qui seront notifiées lors d'un problème) dans le fichier ''/etc/nagios3/conf.d/contacts_nagios2.cfg''. Exemple de déclaration : On renseigne les personnes de contact (qui seront notifiées lors d'un problème) dans le fichier ''/etc/nagios3/conf.d/contacts_nagios2.cfg''. Exemple de déclaration :
-<code>+<code bash>
 define contact{ define contact{
         contact_name                    root         contact_name                    root
Line 218: Line 262:
  
 On définit dans ce même fichier les groupes de contact : On définit dans ce même fichier les groupes de contact :
-<code>+<code bash>
 define contactgroup{ define contactgroup{
         contactgroup_name       admins         contactgroup_name       admins
Line 226: Line 270:
 </code> </code>
  
-==== Droits des contacts ====+=====Droits des contacts=====
  
 Pour attribuer des droits à un utilisateur, il faut éditer le fichier ''/etc/nagios3/cgi.cfg'' et ajouter les noms d'utilisateurs après les directives idoines, séparés par des virgules ; par exemple : Pour attribuer des droits à un utilisateur, il faut éditer le fichier ''/etc/nagios3/cgi.cfg'' et ajouter les noms d'utilisateurs après les directives idoines, séparés par des virgules ; par exemple :
-<code>authorized_for_system_information=nagiosadmin,toto</code>+<code bash> 
 +authorized_for_system_information=nagiosadmin,toto 
 +</code>
  
-==== Périodes de temps ====+=====Périodes de temps=====
  
 On peut consulter ou définir des périodes de temps dans le fichier ''/etc/nagios3/conf.d/timeperiods_nagios2.cfg''. Voici un exemple de déclaration : On peut consulter ou définir des périodes de temps dans le fichier ''/etc/nagios3/conf.d/timeperiods_nagios2.cfg''. Voici un exemple de déclaration :
-<code>+<code bash>
 define timeperiod{ define timeperiod{
         timeperiod_name 24x7         timeperiod_name 24x7
Line 248: Line 294:
 </code> </code>
  
-==== Déclaration d'un host ====+=====Déclaration d'un host=====
  
 Ça se passe dans le fichier **/etc/nagios3/conf.d/localhost_nagios2.cfg** : Ça se passe dans le fichier **/etc/nagios3/conf.d/localhost_nagios2.cfg** :
-<code>define host{+<code bash> 
 +define host{
         use                     generic-host         use                     generic-host
         host_name               routeur1         host_name               routeur1
Line 261: Line 308:
 Cet host utilise le template generic-host qui définit tous les paramètres nécessaires par défaut. On peut surcharger l'objet càd redéfinir les paramètres du template en modifiant leurs valeurs. Cet host utilise le template generic-host qui définit tous les paramètres nécessaires par défaut. On peut surcharger l'objet càd redéfinir les paramètres du template en modifiant leurs valeurs.
  
-==== Création de hostgroup ====+=====Création de hostgroup=====
  
 On doit mettre chaque host dans un hostgroup, défini dans le fichier **/etc/nagios3/conf.d/hostgroups_nagios2.cfg** : On doit mettre chaque host dans un hostgroup, défini dans le fichier **/etc/nagios3/conf.d/hostgroups_nagios2.cfg** :
-<code>define hostgroup {+<code bash> 
 +define hostgroup {
         hostgroup_name  routeurs         hostgroup_name  routeurs
         alias           Debian GNU/Linux Servers         alias           Debian GNU/Linux Servers
Line 272: Line 320:
 </code> </code>
  
-==== Création d'un service ====+=====Création d'un service=====
  
 Ils sont déclarés dans le fichier **/etc/nagios3/conf.d/service_nagios2.cfg** Ils sont déclarés dans le fichier **/etc/nagios3/conf.d/service_nagios2.cfg**
-<code>define service {+<code bash> 
 +define service {
         hostgroup_name                  ping-servers         hostgroup_name                  ping-servers
         service_description             PING         service_description             PING
Line 293: Line 342:
   * ''retry_check_interval 1'' si le statut du service est nOK, on passe en **SOFT state** et on reteste le service toutes les X minutes   * ''retry_check_interval 1'' si le statut du service est nOK, on passe en **SOFT state** et on reteste le service toutes les X minutes
  
-===== Vérifications =====+=====Vérifications=====
  
 Pour vérifier la validité de la configuration de Nagios sans relancer le démon : Pour vérifier la validité de la configuration de Nagios sans relancer le démon :
-<code>nagios3 -v /etc/nagios3/nagios.cfg</code>+<code bash> 
 +nagios3 -v /etc/nagios3/nagios.cfg 
 +</code>
 //(très utile quand on travaille sur de la prod !)// //(très utile quand on travaille sur de la prod !)//
  
  
-=====Installation de Nagvis=====+======Installation de Nagvis======
  
 Nagvis est un addon pour Nagios qui permet d'afficher ses état sur un carte interactive. Nagvis est un addon pour Nagios qui permet d'afficher ses état sur un carte interactive.
Line 306: Line 357:
  
  
-====MySQL====+=====MySQL=====
  
 MySQL est un prérequis de notre installation de NDOUtils. MySQL est un prérequis de notre installation de NDOUtils.
  
-<code>+<code bash>
 # Installation du serveur, du client des librairies de développement. # Installation du serveur, du client des librairies de développement.
 yum install mysql-server mysql-devel yum install mysql-server mysql-devel
Line 326: Line 377:
 </code> </code>
  
-====NDOUtils====+=====NDOUtils=====
 //installation depuis les sources : [[http://www.nagios.org/download/addons/|ndoutils-1.4b9.tar.gz]]// //installation depuis les sources : [[http://www.nagios.org/download/addons/|ndoutils-1.4b9.tar.gz]]//
  
 NDOUtils est un addon qui récupère les états, la configuration, etc... de Nagios pour les enregistrer dans une base (MySQL dans notre cas). NDOUtils est un addon qui récupère les états, la configuration, etc... de Nagios pour les enregistrer dans une base (MySQL dans notre cas).
  
-<code>+<code bash>
 wget http://prdownloads.sourceforge.net/sourceforge/nagios/ndoutils-1.4b9.tar.gz wget http://prdownloads.sourceforge.net/sourceforge/nagios/ndoutils-1.4b9.tar.gz
 tar zxf ndoutils-1.4b9.tar.gz tar zxf ndoutils-1.4b9.tar.gz
Line 341: Line 392:
 Configuration de la base de donnée : Configuration de la base de donnée :
 Se connecter avec Se connecter avec
-<code>+<code bash>
 mysql -u root -p mysql -u root -p
  
Line 352: Line 403:
  
 Création de la structure de la base avec le script fourni : Création de la structure de la base avec le script fourni :
-<code>+<code bash>
 cd db/ cd db/
 ./installdb -u ndouser -p ndopassword -h localhost -d ndoutils ./installdb -u ndouser -p ndopassword -h localhost -d ndoutils
Line 364: Line 415:
  
 Installation du module : Installation du module :
-<code>+<code bash>
 # binaires # binaires
 cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
Line 389: Line 440:
  broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg  broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
  
-# création du script de démarrage ('tention aux yeux) +# création du script de démarrage 
-# idée de script (conçu pour ubuntu) : http://www.nicolargo.com/blogdata/ndo2db +cp vi /etc/rc.d/init.d/ndoutils 
-vi /etc/rc.d/init.d/ndoutils +cp daemon-init /etc/init.d/ndo2db 
- #!/bin/sh +chmod 755 /etc/init.d/ndo2db 
- /usr/local/nagios/bin/ndo2db -/usr/local/nagios/etc/ndo2db.cfg +chkconfig --add ndo2db 
-chmod +x /etc/rc.d/init.d/ndoutils+# attention le démon ndo2db doit être démarré avant nagios (modifier sa priorité le cas échéant) 
 +# exemple pour le runlevel 3 : j'ai du passer la priorité de ndo2db à 98 
 +/etc/rc3.d/S98ndo2db -> ../init.d/ndo2db 
 +/etc/rc3.d/S99nagios -> ../init.d/nagios
  
 # lancer le service NDOUtils et redémarrer nagios # lancer le service NDOUtils et redémarrer nagios
-/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg+service ndo2db start
 service nagios restart service nagios restart
  
-vérif+vérification de bon fonctionnement : les logs de Nagios
 tail -f /usr/local/nagios/var/nagios.log tail -f /usr/local/nagios/var/nagios.log
 </code> </code>
  
-====Graphviz====+=====Graphviz=====
  
 [[http://www.graphviz.org|Graphviz]] est un outil de génération de graphiques. Il existe un paquet pour Redhat dont l'installation est décrite ici : http://www.graphviz.org/Download_linux_rhel.php [[http://www.graphviz.org|Graphviz]] est un outil de génération de graphiques. Il existe un paquet pour Redhat dont l'installation est décrite ici : http://www.graphviz.org/Download_linux_rhel.php
  
-<code>+<code bash>
 # ajout du repository yum # ajout du repository yum
 wget http://www.graphviz.org/graphviz-rhel.repo wget http://www.graphviz.org/graphviz-rhel.repo
Line 484: Line 538:
 </code> </code>
  
-====Nagvis====+ 
 +=====Nagvis=====
  
 Nagvis est un scripts PHP qui récupère les états Nagios pour générer une carte interactive. Nagvis est un scripts PHP qui récupère les états Nagios pour générer une carte interactive.
  
 Paquets à installer : Paquets à installer :
-<code>+<code bash>
 yum install php-gd php-mbstring php-xml php-mysql yum install php-gd php-mbstring php-xml php-mysql
 </code> </code>
  
 Redémarrage du serveur HTTP pour prise en compte des paquets PHP Redémarrage du serveur HTTP pour prise en compte des paquets PHP
-<code>+<code bash>
 service httpd restart service httpd restart
 </code> </code>
  
-<code> +<code bash
-wget http://downloads.sourceforge.net/project/nagvis/NagVis%201.4%20%28stable%29/nagvis-1.4.7.tar.gz?use_mirror=freefr+wget http://downloads.sourceforge.net/project/nagvis/NagVis%201.4%20%28stable%29/nagvis-1.4.7.tar.gz
 tar zxf nagvis-1.4.7.tar.gz tar zxf nagvis-1.4.7.tar.gz
 cd nagvis-1.4.7 cd nagvis-1.4.7
Line 554: Line 609:
  
  
-=====Installation de l'add-on NRPE=====+====Exemple de configuration==== 
 + 
 +===Map=== 
 +FIXME : template, service, line, etc... 
 + 
 +<note> 
 +Prendre garde de bien laisser un espace entre le ''define service|host'' et le "{" 
 +</note> 
 + 
 +Pour désactiver l'authentification d'Apache et donner un accès "guest" à une carte nagvis, modifier le fichier ''/etc/httpd/conf.d/nagios.conf''
 +<code bash> 
 +<Directory "/usr/local/nagios/share/nagvis"> 
 +# desactiver l'authentification 
 +   Satisfy Any 
 +   Allow from all 
 + 
 +# forcer un nom d'utilisateur pour leurrer nagvis 
 +   SetEnv REMOTE_USER guest 
 +</Directory> 
 +</code> 
 + 
 +Pour simplifier l'URL l'accès à la map (http://serveur/carte_pb), on utilise le **mod_rewrite** d'Apache (toujours dans nagios.conf): 
 +<code bash> 
 +<Location "/carte_pb"> 
 +   RewriteEngine On 
 +   RewriteBase /carte_pb 
 +   RewriteRule .* /nagios/nagvis/nagvis/index.php?map=carte_pb 
 +</Location> 
 +</code> 
 + 
 + 
 +======Installation de l'add-on NRPE======
  
 [[http://fr.wikipedia.org/wiki/NRPE|NRPE]] (Nagios Remote Plugin Executor) est un add-on permettant de lancer des plugins à distance sur une autre machine. C'est aussi le nom du protocole applicatif utilisé pour dialoguer entre le serveur Nagios et la machine distante qui exécute le plugin. Il faut donc installer NRPE sur le serveur Nagios mais aussi sur chaque machine distante. [[http://www.nagios.org/download/addons|NRPE est téléchargeable sur le site de Nagios]] car il fait partie intégrante du projet. [[http://fr.wikipedia.org/wiki/NRPE|NRPE]] (Nagios Remote Plugin Executor) est un add-on permettant de lancer des plugins à distance sur une autre machine. C'est aussi le nom du protocole applicatif utilisé pour dialoguer entre le serveur Nagios et la machine distante qui exécute le plugin. Il faut donc installer NRPE sur le serveur Nagios mais aussi sur chaque machine distante. [[http://www.nagios.org/download/addons|NRPE est téléchargeable sur le site de Nagios]] car il fait partie intégrante du projet.
Line 560: Line 646:
 Son fonctionnement est simple : le serveur distant fait tourner le démon NRPE qui écoute sur le port tcp/5666 (par défaut). Le serveur nagios émet une requête vers ce serveur distant grâce au plugin **check_nrpe** ; il lui demande d'exécuter un plugin (que le serveur distant a d'installer en local, d'où la nécessité d'installer nagios-plugins sur le serveur distant). Le résultat de l'exécution du plugin sur le serveur distant est renvoyé au serveur nagios pour traitement. Son fonctionnement est simple : le serveur distant fait tourner le démon NRPE qui écoute sur le port tcp/5666 (par défaut). Le serveur nagios émet une requête vers ce serveur distant grâce au plugin **check_nrpe** ; il lui demande d'exécuter un plugin (que le serveur distant a d'installer en local, d'où la nécessité d'installer nagios-plugins sur le serveur distant). Le résultat de l'exécution du plugin sur le serveur distant est renvoyé au serveur nagios pour traitement.
  
-====Sur le serveur Nagios====+=====Sur le serveur Nagios=====
  
-===Prérequis===+====Prérequis====
 NRPE utilise par défaut SSL pour échanger les données ; pour le compiler on doit installer le support SSL : NRPE utilise par défaut SSL pour échanger les données ; pour le compiler on doit installer le support SSL :
-<code>+<code bash>
 yum install openssl openssl-devel yum install openssl openssl-devel
 </code> </code>
  
-===Compilation et installation===+====Compilation et installation====
 L'installation est classique : téléchargement des sources, décompression, configuration du make, compilation, installation : L'installation est classique : téléchargement des sources, décompression, configuration du make, compilation, installation :
-<code>+<code bash>
 wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
 tar zxf nrpe-2.12.tar.gz tar zxf nrpe-2.12.tar.gz
Line 580: Line 666:
  
 Normalement on obtient le nouveau plugin : **check_nrpe** Normalement on obtient le nouveau plugin : **check_nrpe**
-<code>+<code bash>
 ll /usr/local/nagios/libexec | grep nrpe ll /usr/local/nagios/libexec | grep nrpe
  -rwxrwxr-x 1 nagios nagios  58237 May 18 10:45 check_nrpe  -rwxrwxr-x 1 nagios nagios  58237 May 18 10:45 check_nrpe
 </code> </code>
    
-===Vérification===+====Vérification====
 Le protocole NRPE utilise par défaut le port tcp/5666 qu'il faudra donc ouvrir sur les serveurs et les éventuels pare-feux intermédiaires. Le protocole NRPE utilise par défaut le port tcp/5666 qu'il faudra donc ouvrir sur les serveurs et les éventuels pare-feux intermédiaires.
-<code>+<code bash>
 serveur nagios, port tcp>1023 -----> serveur distant, port tcp/5666 serveur nagios, port tcp>1023 -----> serveur distant, port tcp/5666
 </code> </code>
  
  
-====Sur le serveur distant====+=====Sur le serveur distant=====
  
 (Pour les prérequis, voir partie précédente : //sur le serveur nagios//) (Pour les prérequis, voir partie précédente : //sur le serveur nagios//)
  
 Si l'utilisateur et le groupe "nagios" n'existent pas déjà, il faut les créer : Si l'utilisateur et le groupe "nagios" n'existent pas déjà, il faut les créer :
-<code>+<code bash>
 groupadd nagios groupadd nagios
 useradd -g nagios nagios useradd -g nagios nagios
 </code> </code>
  
-===Installation des nagios-plugins===+====Installation des nagios-plugins====
  
 Installer les nagios-plugins qui seront lancés sur le serveur distant (cf partie plus haut). Installer les nagios-plugins qui seront lancés sur le serveur distant (cf partie plus haut).
  
-===Compilation et installation===+====Compilation et installation====
 Même chose que sur le serveur nagios : Même chose que sur le serveur nagios :
-<code>+<code bash>
 wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
 tar zxf nrpe-2.12.tar.gz tar zxf nrpe-2.12.tar.gz
Line 617: Line 703:
 </code> </code>
  
-===Configuration===+====Configuration====
 Comme pour le serveur nagios, on s'inspire du fichier d'exemple (mais ici on créer le répertoire "etc" car il n'existe pas encore normalement) : Comme pour le serveur nagios, on s'inspire du fichier d'exemple (mais ici on créer le répertoire "etc" car il n'existe pas encore normalement) :
-<code>+<code bash>
 mkdir /usr/local/nagios/etc mkdir /usr/local/nagios/etc
 cp sample-config/nrpe.cfg /usr/local/nagios/etc/ cp sample-config/nrpe.cfg /usr/local/nagios/etc/
Line 625: Line 711:
  
 Configuration du contrôle d'accès : ajouter l'adresse IP du serveur nagios (192.168.90.110) Configuration du contrôle d'accès : ajouter l'adresse IP du serveur nagios (192.168.90.110)
-<code>+<code bash>
 vi nrpe.cfg vi nrpe.cfg
  allowed_hosts=127.0.0.1,192.168.90.110  allowed_hosts=127.0.0.1,192.168.90.110
Line 631: Line 717:
  
 On remarque au passage que le fichier contient certains services pré-configurés : On remarque au passage que le fichier contient certains services pré-configurés :
-<code>+<code bash>
 # The following examples use hardcoded command arguments... # The following examples use hardcoded command arguments...
  
Line 642: Line 728:
  
 Ajout au démarrage de la machine : Ajout au démarrage de la machine :
-<code>+<code bash>
 cp init-script /etc/init.d/nrpe cp init-script /etc/init.d/nrpe
 chmod 755 /etc/init.d/nrpe chmod 755 /etc/init.d/nrpe
 chkconfig --add nrpe chkconfig --add nrpe
 +</code>
 +
 +Pour désactiver le SSL, modifier la ligne suivante en rajoutant l'option ''-n'' :
 +<code bash>
 +        echo -n "Starting nrpe: "
 +        daemon $NrpeBin -c $NrpeCfg -d -n
 </code> </code>
  
 Lancement du démon : Lancement du démon :
-<code>+<code bash>
 /etc/init.d/nrpe start /etc/init.d/nrpe start
 </code> </code>
Line 660: Line 752:
  
  
-====Configuration====+=====Configuration=====
  
 Pour vérifier la connectivité NRPE entre les 2 serveurs, lancer sur le serveur nagios : Pour vérifier la connectivité NRPE entre les 2 serveurs, lancer sur le serveur nagios :
-<code>+<code bash>
 /usr/local/nagios/libexec/check_nrpe -n -H <serveur distant> /usr/local/nagios/libexec/check_nrpe -n -H <serveur distant>
  NRPE v2.12  NRPE v2.12
Line 671: Line 763:
  
 Bien ; maintenant il faut créer le service associé ! Je vous laisse placer les lignes suivantes dans les fichiers de conf correspondants à votre installation (command.cfg, services.cfg et hosts.cfg par exemple) Bien ; maintenant il faut créer le service associé ! Je vous laisse placer les lignes suivantes dans les fichiers de conf correspondants à votre installation (command.cfg, services.cfg et hosts.cfg par exemple)
-<code>+<code bash>
 # -n = pas de SSL (le demon doit etre lance avec la meme option # -n = pas de SSL (le demon doit etre lance avec la meme option
 # -H <IP> = adresse IP du serveur distant # -H <IP> = adresse IP du serveur distant
Line 700: Line 792:
  
  
-=====Ajout de plugins=====+======Ajout de plugins======
  
-Les plugins sont des programmes/scripts qui étendent les fonctionnalités de nagios.+Les plugins sont des programmes/scripts qui étendent les fonctionnalités de Nagios.
  
-====Check_multi====+=====Check_multi=====
  
 [[http://my-plugin.de/wiki/projects/check_multi/start|Check_multi]] est un plugin Nagios qui permet de créer des services dont l’état dépend de plusieurs paramètres. Il utilise pour cela une syntaxe particulière et des expressions logiques. [[http://my-plugin.de/wiki/projects/check_multi/start|Check_multi]] est un plugin Nagios qui permet de créer des services dont l’état dépend de plusieurs paramètres. Il utilise pour cela une syntaxe particulière et des expressions logiques.
Line 711: Line 803:
  
  
-===Compilation===+====Compilation====
 <note important> <note important>
 Il est conseillé (par la doc officielle) de changer les buffers MAX_PLUGIN_OUTPUT_LENGTH et MAX_INPUT_BUFFER ; ceci dit je n'en ai pas vu l'utilité __pour l'instant__ Il est conseillé (par la doc officielle) de changer les buffers MAX_PLUGIN_OUTPUT_LENGTH et MAX_INPUT_BUFFER ; ceci dit je n'en ai pas vu l'utilité __pour l'instant__
 </note> </note>
  
-<code>+Dans le modop suivant j'utilise la version 0.20, mais je vous recommande de récupérer la dernière en date (en ce moment : la 0.23). 
 +<code bash>
 wget http://my-plugin.de/check_multi/check_multi-0.20.current.tgz wget http://my-plugin.de/check_multi/check_multi-0.20.current.tgz
 tar zxf check_multi-0.20.current.tgz tar zxf check_multi-0.20.current.tgz
Line 793: Line 886:
  make[1]: *** [test] Error 11  make[1]: *** [test] Error 11
  make[1]: Leaving directory `/produits/sources/check_multi-0.20/plugins/t'  make[1]: Leaving directory `/produits/sources/check_multi-0.20/plugins/t'
- make: *** [test] Error 2</code>+ make: *** [test] Error 2 
 +</code>
  
 Le ''make test'' produit des erreurs que je n'ai pas encore résolues. Mais j'ai la moyenne ;) Le ''make test'' produit des erreurs que je n'ai pas encore résolues. Mais j'ai la moyenne ;)
 +
 +Comme j'utilise Nagios, il faut aussi passer la commande suivante :
 +<code bash>
 +make test-statusdat
 + cd ./plugins/ && make -e test-statusdat
 + /usr/bin/perl check_multi_statusdat.t
 + 1..6
 + ok 1 - check_multi skips unknown service in status.dat - RC3 - passed
 + ok 2 - output correct - passed
 + ok 3 - check_multi finds numerous services in status.dat - RC3 - passed
 + ok 4 - services output correct - passed
 + ok 5 - check_multi finds numerous hosts in status.dat - RC1 - passed
 + ok 6 - hosts output correct - passed
 +</code>
  
 Le plugin fonctionne tout de même, alors on poursuit. Le plugin fonctionne tout de même, alors on poursuit.
  
-===Installation===+====Installation====
  
-<code>+<code bash>
 make install make install
 make install-config make install-config
Line 807: Line 915:
 Le plugin s'installe dans le répertoire ''/usr/local/nagios/check_multi''. Le plugin s'installe dans le répertoire ''/usr/local/nagios/check_multi''.
  
-===Configuration===+====Configuration===
 Le concept est le suivant : on créer un fichier **.cmd** correspondant, suivant la syntaxe particulière de check_multi, qui va décrire : Le concept est le suivant : on créer un fichier **.cmd** correspondant, suivant la syntaxe particulière de check_multi, qui va décrire :
   * les état nagios à récupérer (directive **statusdat**) ou les commandes à lancer (directive **command**)   * les état nagios à récupérer (directive **statusdat**) ou les commandes à lancer (directive **command**)
Line 813: Line 922:
 Ce fichier sera appelé par un service déclaré dans Nagios, sous la forme : ''check_multi -f /usr/local/nagios/etc/check_multi/test.cmd''. Ce fichier sera appelé par un service déclaré dans Nagios, sous la forme : ''check_multi -f /usr/local/nagios/etc/check_multi/test.cmd''.
  
-==Création de http.cmd==+===Création de http.cmd===
 Les états de Nagios sont récupérés via le fichier ''<NAGIOS>/var/status.dat'' ; donc <host> et <service> doivent exister dans Nagios. Les états de Nagios sont récupérés via le fichier ''<NAGIOS>/var/status.dat'' ; donc <host> et <service> doivent exister dans Nagios.
  
Line 829: Line 938:
 Les états peuvent être écris en toute lettre ou avec leur code retour Nagios (OK=0 ; WARNING=1 ; CRITICAL=2 ; UNKNOWN=3 et plus). Les états peuvent être écris en toute lettre ou avec leur code retour Nagios (OK=0 ; WARNING=1 ; CRITICAL=2 ; UNKNOWN=3 et plus).
  
-<code>+<code bash>
 # format : statusdat [ <tag> ] = <host>:<service> # format : statusdat [ <tag> ] = <host>:<service>
 # ou <tag> est un identifiant local # ou <tag> est un identifiant local
Line 846: Line 955:
  
 On peut utiliser des commandes : par exemple on peut re-checker l'état HTTP des serveurs plutôt que d'utiliser les résultats de Nagios (pas vraiment d'intérêt dans notre cas) ; dans ce cas on récupère le résultat de la commande ainsi : ''$<tag>$'' On peut utiliser des commandes : par exemple on peut re-checker l'état HTTP des serveurs plutôt que d'utiliser les résultats de Nagios (pas vraiment d'intérêt dans notre cas) ; dans ce cas on récupère le résultat de la commande ainsi : ''$<tag>$''
-<code>+<code bash>
 # format : command [ <tag> ] = <plugin command line> # format : command [ <tag> ] = <plugin command line>
 command [ serveur1 ] = check_http -H www-princi command [ serveur1 ] = check_http -H www-princi
Line 860: Line 969:
   * on peut utiliser les macros Nagios avec les commandes ($HOSTNAME$, $HOSTADDRESS$, etc)   * on peut utiliser les macros Nagios avec les commandes ($HOSTNAME$, $HOSTADDRESS$, etc)
  
-==Création du service Nagios==+===Création du service Nagios===
  
 Dans la conf de Nagios : Dans la conf de Nagios :
-<code>+<code bash>
 define command{ define command{
         command_name    cm_http         command_name    cm_http
Line 880: Line 989:
 Pour aller plus loin je vous recommande fortement le wiki officiel : http://my-plugin.de/wiki/projects/check_multi/configuration/file Pour aller plus loin je vous recommande fortement le wiki officiel : http://my-plugin.de/wiki/projects/check_multi/configuration/file
  
-===Passage de paramètres===+====Passage de paramètres====
   * on ne peut passer de paramètres qu'avec les commandes   * on ne peut passer de paramètres qu'avec les commandes
  
 Exemple : déclaration dans nagios Exemple : déclaration dans nagios
-<code>+<code bash>
 define command{ define command{
         command_name    cm_http         command_name    cm_http
Line 898: Line 1007:
  
 http.cmd http.cmd
-<code>+<code bash>
 # $ARG1$ = www # $ARG1$ = www
 command [ serveur1 ] = check_http -H $ARG1$-princi command [ serveur1 ] = check_http -H $ARG1$-princi
Line 910: Line 1019:
  
  
 +======Installation de PNP4Nagios======
  
-=====Problèmes et solutions=====+[[http://docs.pnp4nagios.org/fr/pnp-0.6/start|PNP4Nagios]] est une extension permettant de récupérer les perfdata (données de performance) pour en faire des graphes RRD.
  
-====Installation du paquet Ubuntu par défaut====+Les perfdata sont les données qui suivent le retour d'une commande de check ; par exemple un check_host_alive retourne : 
 +<code bash> 
 +PING OK - Paquets perdus 0%, RTA 22.87 ms 
 +rta=22.872999ms;5000.000000;5000.000000;0.000000 pl=0%;100;100;
 +</code>
  
-Sous Ubuntu (9.10) il y a 2 problèmes avec l'installation par défaut : +Je vais décrire ici l'installation sous Debian 7 (Nagios 3.4.1).
-  * problème avec le plugin **check_ssh** : en fait il n'y a pas de serveur SSH installé sous Ubuntu par défautPour l'installer il faut installer le paquet **openssh-server**. +
-  * problème de droit d'accès avec le plugin **check_disk** : ''DISK CRITIQUE - /home/<user>/.gvfs is not accessible: Permission non accordée''+
  
-Pour ignorer le fichier qui pose ce problème de droit d'accès, il faut éditer la configuration du plugin check_disk et ajouter à la fin de la ligne : '' -A -i .gvfs'' +  * Installation du paquet  
-<code> +<code bash> 
-sudo vi /etc/nagios-plugins/config/disk.cfg +aptitude install pnp4nagios 
-# 'check_all_disks' command definition+ 
 +# avec, au passage : 
 +0 paquets mis à jour, 100 nouvellement installés, 0 à enlever et 0 non mis à jour. 
 +Il est nécessaire de télécharger 32,2 Mo d'archives. Après dépaquetage, 89,8 Mo seront utilisés. 
 +Les paquets suivants ont des dépendances non satisfaites : 
 + libgd2-xpm : Est en conflit avec: libgd2 qui est un paquet virtuel 
 +              Est en conflit avec: libgd2-noxpm mais 2.0.36~rc1~dfsg-6.1 est installé. 
 + libgd2-noxpm : Est en conflit avec: libgd2 qui est un paquet virtuel 
 +                Est en conflit avec: libgd2-xpm mais 2.0.36~rc1~dfsg-6.1 doit être installé. 
 +Les actions suivantes permettront de résoudre ces dépendances : 
 + 
 +     Supprimer les paquets suivants : 
 +1)     libgd2-noxpm 
 + 
 +Accepter cette solution ? [Y/n/q/?] y 
 +</code> 
 + 
 +  * Choisir le mode de fonctionnement de pnp4nagios (cf http://docs.pnp4nagios.org/fr/pnp-0.6/modes). Dans mon cas ça sera le **mode synchronisé** car c'est ce qui est conseillé pour les petites installations (< 1000 services). 
 +<WRAP center round info 60%> 
 +Note : ce mode semble buggué sur Debian 9 / Nagios 4.3.4 / PNP 0.6.26, utiliser plutôt d'autres modes (bulk par exemple) 
 +</WRAP> 
 + 
 +  * Configurer Nagios pour qu'il fasse appel à PNP4Nagios : 
 +<code bash> 
 +vi /etc/nagios3/nagios.cfg 
 + 
 +# activer le traitement des perfdata 
 +process_performance_data=1 
 + 
 +# décommenter les lignes suivantes 
 +host_perfdata_command=process-host-perfdata 
 +service_perfdata_command=process-service-perfdata 
 +</code> 
 + 
 +Préciser les commandes de perfdata (adaptez les chemins à vos environnements !) : pour notre installation il faut remplacer les ''command_line'' générée par défaut par le paquet Debian : 
 +<code bash> 
 +vi /etc/nagios3/commands.cfg 
 + 
 +define command { 
 +       command_name    process-service-perfdata 
 +       command_line    /usr/bin/perl /usr/lib/pnp4nagios/libexec/process_perfdata.pl 
 +
 +define command { 
 +       command_name    process-host-perfdata 
 +       command_line    /usr/bin/perl /usr/lib/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA 
 +
 +</code> 
 + 
 +  * Relancer Nagios, patienter 5 min, et jeter un œil ici : http://localhost/pnp4nagios 
 + 
 +  * Pour avoir des liens cliquables directement dans l'interface de Nagios, avec un aperçu au passage de la souris : 
 +    * Donner accès à Nagios au fichier .ssi en créant un lien symbolique : 
 +<code bash> 
 +ln -s /usr/share/doc/pnp4nagios/examples/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi/ 
 + 
 +# ou, avec un Nagios/PNP récemment compilée : 
 +cp /home/dude/src/pnp4nagios-0.6.26/contrib/ssi/status-header.ssi /usr/local/pnp4nagios/share/ 
 +ln -s /usr/local/pnp4nagios/share/status-header.ssi /usr/local/nagios/share/ssi/ 
 +</code> 
 + 
 +    * Créer les templates suivants (dans, par exemple, /etc/nagios3/conf.d/templates.cfg) : 
 +<code bash> 
 +define host { 
 +   name       host-pnp 
 +   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_ 
 +   register   0 
 +
 + 
 +define service { 
 +   name       srv-pnp 
 +   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$ 
 +   register   0 
 +} 
 +</code> 
 + 
 +Si comme moi vous le voulez pour tous (hosts et services), vous pouvez surcharger directement les templates //generic// de vos hosts / services en ajoutant : 
 +<code bash> 
 +vi conf.d/generic-host_nagios2.cfg 
 +    use host-pnp 
 + 
 +vi conf.d/generic-service_nagios2.cfg 
 +    use srv-pnp 
 +</code> 
 + 
 +    * Pour que les graphes s'affichent dans la page courante plutôt que dans une nouvelle page : 
 +<code bash> 
 +vi cgi.cfg 
 +action_url_target=_self 
 +</code> 
 + 
 +Enfin, relancer nagios : 
 +<code bash> 
 +service nagios3 restart 
 +# OU 
 +systemctl restart nagios 
 +</code> 
 + 
 +  * Si on obtient des erreurs de fonctionnement ou si les graphiques ne sont pas générés, il existe un script de diagnostique qu'on peut télécharger et lancer (en root et avec les bons chemins d'installation en paramètre) : 
 +<code bash> 
 +wget http://verify.pnp4nagios.org/verify_pnp_config  
 +perl verify_pnp_config --mode=sync --config=/etc/nagios3/nagios.cfg --pnpcfg=/etc/pnp4nagios/ 
 +</code> 
 + 
 +=====Certains plugins ne marchent pas !===== 
 + 
 +Effectivement certains plugins ne fonctionnent pas avec PNP4Nagios car ils ne génèrent pas de perfdata. Pour rappel, les perfdatas sont affichés par le plugin juste après le status, séparé par un ''|'' ; par exemple avec un ''check_ping''
 +<code bash> 
 +check_ping -H 127.0.0.1 -w30,50% -c 50,60% 
 +PING OK -  Paquets perdus = 0%, RTA = 0.07 ms|rta=0.074000ms;30.000000;50.000000;0.000000 pl=0%;50;60;
 +</code> 
 + 
 +  * Status = ''PING OK -  Paquets perdus = 0%, RTA = 0.07 ms'' 
 +  * Perfdata = ''rta=0.074000ms;30.000000;50.000000;0.000000 pl=0%;50;60;0'' 
 + 
 +C'est notamment le cas du service "Total processes", qui utilise le plugin ''check_procs''
 +<code bash> 
 +/usr/lib/nagios/plugins/check_procs-pnp.sh -a ssh 
 +PROCS OK: 3 processus avec args 'ssh' 
 +</code> 
 + 
 +C'est dommage parce qu'il fait le taff mais sa sortie est juste mal formattée, il ne lui manque que : ''| procs=3''
 + 
 +Pour corriger cela, on va utiliser le [[http://docs.pnp4nagios.org/pnp-0.6/wrapper|wrapper du site de pnp4nagios]] (c'est un script qui reformate la sortie de check_procs) : 
 +<code bash> 
 +#!/bin/bash 
 +# ersatz de cmde pour checker le nb de processes et afficher les perfdata 
 + 
 +LINE=`/usr/lib/nagios/plugins/check_procs $*` 
 +RC=$? 
 +COUNT=`echo $LINE | awk '{print $3}'
 +PROCS=`expr $COUNT - 1` 
 +LINE=`echo $LINE | sed "s/: $COUNT /: $PROCS /"` 
 +echo $LINE \| procs=$PROCS 
 +exit $RC 
 +</code> 
 + 
 +<WRAP center round info 60%> 
 +on notera que j'ai adapté le chemin du script check_procs puisque sous Debian ils sont dans ''/usr/lib/nagios/plugins/'' 
 +</WRAP> 
 + 
 +On dépose donc ces lignes dans un nouveau fichier, par exemple ''/usr/lib/nagios/plugins/check_procs-pnp.sh'', puis on le rend exécutable : 
 +<code bash> 
 +chmod 755 /usr/lib/nagios/plugins/check_procs-pnp.sh 
 +</code> 
 + 
 +Puis, on définit une nouvelle commande dans ''command.cfg''
 +<code bash> 
 +# contournement de check_procs pour avoir des perfdatas 
 +# cf http://docs.pnp4nagios.org/pnp-0.6/wrapper
 define command{ define command{
-   command_name    check_all_disks +    command_name    check_procs-pnp 
-   #ancienne ligne +    command_line    /usr/lib/nagios/plugins/check_procs-pnp.sh -w '$ARG1$' -c '$ARG2$' 
-   #command_line   /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e +    }
-   #nouvelle ligne +
-   command_line    /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -A -i .gvfs +
-   }+
 </code> </code>
  
-Puis il faut recharger la conf dans Nagios +Enfin, on remplace le service dans ''services.cfg'' 
-<code> +<code bash
-sudo service nagios3 stop +define service{ 
- * Stopping nagios3 monitoring daemon nagios3                                                               +        use                             srv-pnp 
 +        host_name                       localhost 
 +        service_description             Total Processes 
 +        #check_command                   check_procs!250!400 
 +        check_command                   check_procs-pnp!250!400 
 +</code>
  
-sudo service nagios3 start                              [ OK ] +(Et on relance Nagios après avoir vérifier les éventuelles erreurs avec ''nagios3 -v nagios.cfg'' !) 
- * Starting nagios3 monitoring daemon nagios3 + 
-kill: 1: No such process                                [ OK ]+=====Créer ses templates PNP===== 
 + 
 +Un template (au sens PNP4nagios du terme) est un modèle de graphique adapté aux valeurs des données de performance. Il est intéressant d'adapter le type de graphique en fonction des données monitorées ; par exemple, pour le débit in/out d'une interface réseau, on préfèrera afficher les 2 valeurs sur le même graphique avec la courbe "in" vers le bas et la courbe "out" vers le haut, alors qu'avec le "load" on voudra superposer les 3 données correspondant à la charge 15min, 5min et 1min. 
 + 
 +On peut choisir les couleurs, le type de graphique (courbe, aire, ligne), sa hauteur, la plage de données utilisée (1h, 12h, semaine), etc... ça peut devenir des trucs très sympa : 
 + 
 +{{ :informatique:logiciels:template_pnp4nagios.png?direct |}} 
 + 
 +Pour chaque service disposant de perfdata et sur lequel PNP4nagios est activé, le plugin va rechercher un template éponyme du nom de sa commande (''command_name'' dans la définition de la commande), avec l'extension ".php", dans les répertoires suivants (et dans cet ordre) : 
 +<code bash> 
 +# avec le paquet pnp4nagios sous debian 7 : 
 +/usr/share/pnp4nagios/html/templates.dist/ 
 +/etc/pnp4nagios/templates/ 
 +/etc/pnp4nagios/templates.d/ 
 + 
 +# avec une installation à partir des sources, ils seront plutôt ici : 
 +/usr/local/pnp4nagios/share/templates/
 </code> </code>
  
-//source : https://help.ubuntu.com/community/Nagios3#Post%20Install%20Tasks //+Par exemple pour un service "check-syno-4disks-temp" appelant la commande la commande "check_syno_4disks_temp" (''check_command check_syno_4disks_temp!public''), il recherchera le template **check_syno_4disks_temp.php**. S'il ne le trouve pas il appliquera le template ''default.php'' qui trace une courbe par valeur. Il va ensuite créer un fichier XML qui contiendra les perfdata, dans le même répertoire que la base RRD : ''/var/lib/pnp4nagios/perfdata/<host>'' (ou ''/usr/local/pnp4nagios/var/perfdata/'' si pnp4nagios a été installé à partir les sources). 
 + 
 +====Exemple 1 trafic in/out==== 
 + 
 +Voici un exemple de "chaîne" host - service - template PNP pour superviser et grapher le traffic d'une interface réseau sur un NAS synology : 
 +  * création des objets dans Nagios : 
 +<code bash> 
 +vi /etc/nagios3/conf.d/syno.cfg 
 + 
 +# déclaration du NAS, on utilise bien le template nagios "host-pnp" pour récupérer les perfdata 
 +define host{ 
 +        use                     host-pnp 
 +        host_name               ds415 
 +        address                 192.168.1.1 
 +        hostgroups              nas_syno 
 +        } 
 + 
 +# dans le service on ne précise que le nom de communauté, le reste est donc en dur dans la déclaration de la commande 
 +# le service est appliqué au host grâce au groupe "nas_syno" 
 +define service{ 
 +    use                 srv-pnp 
 +    hostgroup_name      nas_syno 
 +    service_description traffic eth0 
 +    check_command       check_syno_traf-eth0!public 
 +    } 
 +     
 +# trafic reseau 
 +# -o est suivi par les 2 OIDs correspondant au trafic in et out de l'interface que l'on veut superviser 
 +# -l permet d'afficher une légende 
 +# -u permet de préciser l'unité 
 +# -P précise la version de SNMP 
 +# -C spécifie la communauté SNMP 
 +# --rate induqe qu'il s'agit d'un compteur qui nécessite donc un calcul \ 
 +#   par rapport à la précédente valeur (voir plus bas pour l'explication) 
 +define command{ 
 +    command_name    check_syno_traf-eth0 
 +    command_line    $USER1$/check_snmp -H '$HOSTADDRESS$' -P 2c -C '$ARG1$' -l eth0_in,eth0_out \ 
 +        -u bytes,bytes --rate -o .1.3.6.1.2.1.31.1.1.1.6.3,.1.3.6.1.2.1.31.1.1.1.10.3 
 +    } 
 +</code> 
 +NB : le plugin **check_snmp** avec l'option ''<nowiki>--</nowiki>rate'' a besoin d'accéder a un répertoire dans lequel il enregistre les compteurs n-1 pour calculer le débit réseau : ce répertoir varie selon le mode d'installation et les distributions : 
 +  * sous Debian j'ai eu ''/usr/var/105/check_snmp'' (il faut le trouver !) ; 
 +  * sous centOS c'est ''/var/check_snmp''
 +  * ça peut aussi être ''/usr/local/nagios/var/check_snmp'' 
 +Pour ne pas avoir d'erreur de permission (Cannot create temporary filename) il faut penser à donner à Nagios les permissions en écriture sur ce répertoire ; par ex pour Debian : 
 +<code bash> 
 +chmod 755 /usr/var && mkdir /usr/var/105/check_snmp && chown -R nagios /usr/var/105/check_snmp 
 +</code> 
 + 
 +  * On créer ensuite le template, qui permet d'afficher le trafic //in// en surface (verte) et le trafic //out// en ligne bleue. 
 +<code bash> 
 +vi /usr/local/pnp4nagios/share/templates/check_syno_traf-eth0.php 
 +<?php 
 +
 +# Copyright (c) 2006-2010 Joerg Linge (http://www.pnp4nagios.org) 
 +# Plugin: check_iftraffic.pl (COUNTER) 
 +# adaptation pour traffic syno 
 + 
 +$opt[1]  = "--vertical-label \"Traffic\" -b 1024 --title \"Interface Traffic for $hostname / $servicedesc\" "; 
 +#$opt[1]  = "--vertical-label \"Traffic\" --title \"Interface Traffic for $hostname / $servicedesc\" "; 
 +$def[1]  = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE " ; 
 +$def[1] .= "DEF:var2=$RRDFILE[2]:$DS[2]:AVERAGE " ; 
 +$def[1] .= "AREA:var1#99ff99:\"in \" " ; 
 +$def[1] .= "GPRINT:var1:LAST:\"%7.2lf %SB/s last\" " ; 
 +$def[1] .= "GPRINT:var1:AVERAGE:\"%7.2lf %SB/s avg\" " ; 
 +$def[1] .= "GPRINT:var1:MAX:\"%7.2lf %SB/s max\\n\" " ; 
 +$def[1] .= "LINE1:var2#0099ff:\"out\" " ; 
 +$def[1] .= "GPRINT:var2:LAST:\"%7.2lf %SB/s last\" " ; 
 +$def[1] .= "GPRINT:var2:AVERAGE:\"%7.2lf %SB/s avg\" " ; 
 +$def[1] .= "GPRINT:var2:MAX:\"%7.2lf %SB/s max\\n\"
 + 
 +# pour afficher le dernier check sur le graphe 
 +if($this->MACRO['TIMET'] != ""){ 
 +    $def[1] .= "VRULE:".$this->MACRO['TIMET']."#000000:\"Last Service Check \\n\" "; 
 +
 +?> 
 +</code> 
 + 
 +Résultat : 
 + 
 +{{ :informatique:logiciels:trafic_internet.png?direct |}} 
 + 
 +Le même, un peu plus perfectionné : 
 +<code php> 
 +<?php 
 +# Copyright (c) 2006-2010 Joerg Linge (http://www.pnp4nagios.org) 
 +# Plugin: check_snmp_int.pl (COUNTER) 
 +# modif traffic reseau in/out 
 + 
 +$unit = "bps"; 
 + 
 +$ds_name[1] = "$hostname In/Out $unit"; 
 +$opt[1] = " --vertical-label $unit -b 1000 --title \"$hostname : $servicedesc\" "; 
 +$def[1] = rrd::def("var1",$RRDFILE[1],$DS[1],"AVERAGE"); 
 +$def[1] .= rrd::def("var2",$RRDFILE[2],$DS[2],"AVERAGE"); 
 + 
 +#$def[1] .= "AREA:var1#99ff99:\"$NAME[1]  \" " ; 
 +$def[1] .= rrd::gradient('var1','ebffeb','99ff99',sprintf("%-16s",$NAME[1]),20); 
 +$def[1] .= rrd::gprint('var1',array("LAST","AVERAGE","MAX"),"%3.2lf %s$unit"); 
 + 
 +$def[1] .= "LINE1:var2#0099ff:\"".sprintf("%-15s",$NAME[2])." \" " ; 
 +$def[1] .= rrd::gprint('var2',array("LAST","AVERAGE","MAX"),"%3.2lf %s$unit"); 
 + 
 +if($this->MACRO['TIMET'] != ""){ 
 +    $def[1] .= "VRULE:".$this->MACRO['TIMET']."#000000:\"Last Service Check \\n\" "; 
 +
 +?> 
 + 
 +</code> 
 +====Exemple 2 : courbe CPU==== 
 + 
 +Autre exemple pour grapher l'utilisation CPU d'un fortinet v4 en gradiant. 
 + 
 +Conf nagios, en vrac : 
 +<code bash> 
 +# paramètres de check_snmp : 
 +# -P2c pour préciser le version de SNMP (2c) 
 +# -t5 pour préciser le timeout (en secondes) de la commande 
 +# -l <STRING> pour préciser l'étiquette du résultat (elle sera utilisée par le graphe) 
 +# et les classiques mandataires : -C <COMMUNAUTE> et -o <OID> 
 +define command{ 
 +        command_name    check_snmp_forti_cpu_v4 
 +        command_line    /usr/lib64/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -P2c -t5 -l "percent_CPU" -C '$ARG1$' -o .1.3.6.1.4.1.12356.101.4.1.3.0 
 +
 + 
 +# le service est rattaché au groupe fortigate_v4 
 +define service { 
 +        name                    check-snmp-forti-cpu-v4 
 +        hostgroup_name          fortigate_v4 
 +        use                     generic-service-no-notif 
 +        service_description     CPU usage 
 +        check_command           check_snmp_forti_cpu_v4!public 
 +
 +</code> 
 + 
 +On réutilise le template par défaut : 
 +<code bash> 
 +<?php 
 +# template CPU derive du default template : 
 +# Copyright (c) 2006-2010 Joerg Linge (http://www.pnp4nagios.org) 
 +
 +# Define some colors .. 
 +
 +$_WARNRULE = '#FFFF00'; 
 +$_CRITRULE = '#FF0000'; 
 +$_AREA     = '#256aef'; 
 + 
 +# couleurs de la courbe 
 +$_LINE     = '#4D3D4D'; 
 +$GRAD_INF  = 'FFCCFF'; 
 +$GRAD_SUP  = 'CC0099'; 
 + 
 +
 +# Initial Logic ... 
 +
 + 
 +foreach ($this->DS as $KEY=>$VAL) { 
 + 
 + $maximum  = ""; 
 + $minimum  = ""; 
 + $critical = ""; 
 + $crit_min = ""; 
 + $crit_max = ""; 
 + $warning  = ""; 
 + $warn_max = ""; 
 + $warn_min = ""; 
 + $vlabel   = ""; 
 + $lower    = ""; 
 + $upper    = ""; 
 +  
 + if ($VAL['WARN'] != "") { 
 + $warning = $VAL['WARN']; 
 +
 + if ($VAL['WARN_MAX'] != "") { 
 + $warn_max = $VAL['WARN_MAX']; 
 +
 + if ($VAL['WARN_MIN'] != "") { 
 + $warn_min = $VAL['WARN_MIN']; 
 +
 + if ($VAL['CRIT'] != "") { 
 + $critical = $VAL['CRIT']; 
 +
 + if ($VAL['CRIT_MAX'] != "") { 
 + $crit_max = $VAL['CRIT_MAX']; 
 +
 + if ($VAL['CRIT_MIN'] != "") { 
 + $crit_min = $VAL['CRIT_MIN']; 
 +
 + if ($VAL['MIN'] != "") { 
 + $lower = " --lower=" . $VAL['MIN']; 
 + $minimum = $VAL['MIN']; 
 +
 + if ($VAL['MAX'] != "") { 
 + $maximum = $VAL['MAX']; 
 +
 + if ($VAL['UNIT'] == "%%") { 
 + $vlabel = "%"; 
 + $upper = " --upper=101 "; 
 + $lower = " --lower=0 "; 
 +
 + else { 
 + $vlabel = $VAL['UNIT']; 
 +
 + 
 + $opt[$KEY] = '--vertical-label "' . $vlabel . '" --title "' . $this->MACRO['DISP_HOSTNAME'] . ' / ' . $this->MACRO['DISP_SERVICEDESC'] . '"' . $upper . $lower; 
 + $ds_name[$KEY] = $VAL['LABEL']; 
 + $def[$KEY]  = rrd::def     ("var1", $VAL['RRDFILE'], $VAL['DS'], "AVERAGE"); 
 + $def[$KEY] .= rrd::gradient("var1", $GRAD_INF, $GRAD_SUP, rrd::cut($VAL['NAME'],16), 20); 
 + $def[$KEY] .= rrd::line1   ("var1", $_LINE ); 
 + $def[$KEY] .= rrd::gprint  ("var1", array("LAST","MAX","AVERAGE"), "%3.4lf %S".$VAL['UNIT']); 
 + if ($warning != "") { 
 + $def[$KEY] .= rrd::hrule($warning, $_WARNRULE, "Warning  $warning \\n"); 
 +
 + if ($warn_min != "") { 
 + $def[$KEY] .= rrd::hrule($warn_min, $_WARNRULE, "Warning  (min)  $warn_min \\n"); 
 +
 + if ($warn_max != "") { 
 + $def[$KEY] .= rrd::hrule($warn_max, $_WARNRULE, "Warning  (max)  $warn_max \\n"); 
 +
 + if ($critical != "") { 
 + $def[$KEY] .= rrd::hrule($critical, $_CRITRULE, "Critical $critical \\n"); 
 +
 + if ($crit_min != "") { 
 + $def[$KEY] .= rrd::hrule($crit_min, $_CRITRULE, "Critical (min)  $crit_min \\n"); 
 +
 + if ($crit_max != "") { 
 + $def[$KEY] .= rrd::hrule($crit_max, $_CRITRULE, "Critical (max)  $crit_max \\n"); 
 +
 + $def[$KEY] .= rrd::comment("Command\: " . $VAL['TEMPLATE'] . "\\r"); 
 +
 +?> 
 +</code> 
 + 
 +Résultat : 
 +{{ :informatique:logiciels:cpu_forti.png?direct |}} 
 + 
 +====Exemple 3 : graphique adaptatif==== 
 + 
 +Ce template va détecter automatiquement le nombre d'enregistrement dans la base RRD et s'adapter pour tracer le bon nombre de courbe (inconnue à l'avance). 
 +<code bash> 
 +<?php 
 +$unit = "pc"; 
 + 
 +# max : 7 entrées 
 +$TAB_COLORS = array('#ff0000','#ff8000','#cccc00','#0066ff','#9933ff','#00ff55','#ff80ff'); 
 +$CPT=1; 
 + 
 +$ds_name[$CPT] = "$hostname %CPU x10"; 
 +$opt[$CPT] = " --vertical-label $unit -b 1000 --title \"$hostname : $servicedesc (% x10)\" "; 
 + 
 +foreach ($this->DS as $CHAMP_RRD=>$VAL) { 
 + 
 +        if ($CPT == "1") { 
 +                $def[1] = rrd::def("var".$CPT,$VAL['RRDFILE'],$VAL['DS'],"AVERAGE"); 
 +        } 
 +        else { 
 +                $def[1] .= rrd::def("var".$CPT,$VAL['RRDFILE'],$VAL['DS'],"AVERAGE"); 
 +        } 
 + 
 +        $def[1] .= "LINE1:var".$CPT.$TAB_COLORS[$CHAMP_RRD].":\"".sprintf("%-15s",$VAL['NAME'])." \" " ; 
 +        $def[1] .= rrd::gprint('var'.$CPT,array("LAST","AVERAGE","MAX"),"%3.2lf %s$unit"); 
 + 
 +        $CPT++; 
 +
 + 
 +if($this->MACRO['TIMET'] != ""){ 
 +    $def[1] .= "VRULE:".$this->MACRO['TIMET']."#000000:\"Last Service Check \\n\" "; 
 +
 +?> 
 + 
 +</code> 
 + 
 +======Tips====== 
 + 
 +=====Activer les commandes externes===== 
 + 
 +Pour utiliser certaines fonctionnalités, comme relancer un check (Re-schedule the next check of this service) ou acquitter une alarme, on va avoir besoin d'activer les commandes externes. Si on ne le fait pas, on se fait insulter de la sorte : ''Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!''
 + 
 +Pour cela : 
 +<code bash> 
 +# arrêter Apache et Nagios : 
 +service apache2 stop 
 +service nagios3 stop 
 + 
 +# activer les commandes externes dans la configuration de Nagios : 
 +vi nagios.cfg 
 + 
 +check_external_commands=1 
 +command_check_interval=15s    # pas obligatoire mais il sera plus réactif 
 + 
 +# ajouter l'utilisateur www-data dans le groupe nagios : 
 +vi /etc/group 
 + 
 +nagios:x:111:www-data 
 + 
 +# le paquet Debian a des problemes de droits sur certains répertoire, il faut les corriger : 
 +# - ajouter l'exécution à "other" sur le répertoire /var/lib/nagios3 
 +dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 
 +# - ajouter le sticky bit au répertoire parent du pipe des commandes externes 
 +dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw 
 + 
 +# relancer Apache et Nagios : 
 +service apache2 start 
 +service nagios3 start 
 +</code> 
 + 
 +=====Crash de la machine===== 
 + 
 +Lors d'un crash de la machine, malgré que le service nagios se soit relancé correctement, la partie ndo2db/ndoutils ne se relançait plus ; au premier abord le problème semble situé au niveau de nd2db : 
 +<code bash> 
 +/etc/init.d/ndo2db start 
 +Starting ndo2db:Could not bind socket: Address already in use 
 + done. 
 +</code> 
 +.. solutionné en supprimant la socket : 
 +<code bash> 
 +rm -f /usr/local/nagios/var/ndo.sock 
 + 
 +/etc/init.d/ndo2db start 
 +Starting ndo2db: done. 
 +</code> 
 + 
 +Le second problème venait de la base mySQL corrompue ; la solution a été de réparer la partie de la base qui remontait en erreur : 
 +<code bash> 
 +myisamchk --fast /var/lib/mysql/ndoutils/nagios_servicechecks.MYI 
 + Warning: option 'key_buffer_size': unsigned value 18446744073709551615 adjusted to 4294963200 
 + Warning: option 'read_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'write_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'sort_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Checking MyISAM file: /var/lib/mysql/ndoutils/nagios_servicechecks.MYI 
 + Data records:  714030   Deleted blocks:  271061 
 + myisamchk: warning: Table is marked as crashed 
 + myisamchk: warning: 2 clients are using or haven't closed the table properly 
 + - check file-size 
 + - check record delete-chain 
 + myisamchk: error: Record at pos: 207467116 is not remove-marked 
 + myisamchk: error: record delete-link-chain corrupted 
 + MyISAM-table '/var/lib/mysql/ndoutils/nagios_servicechecks.MYI' is corrupted 
 + Fix it using switch "-r" or "-o" 
 + You have new mail in /var/spool/mail/root 
 + 
 +myisamchk --recover /var/lib/mysql/ndoutils/nagios_servicechecks.MYI 
 + Warning: option 'key_buffer_size': unsigned value 18446744073709551615 adjusted to 4294963200 
 + Warning: option 'read_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'write_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'sort_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + - recovering (with sort) MyISAM-table '/var/lib/mysql/ndoutils/nagios_servicechecks.MYI' 
 + Data records: 714030 
 + - Fixing index 1 
 + - Fixing index 2 
 + - Fixing index 3 
 + - Fixing index 4 
 + Data records: 714032 
 + 
 +myisamchk --fast /var/lib/mysql/ndoutils/nagios_servicechecks.MYI 
 + Warning: option 'key_buffer_size': unsigned value 18446744073709551615 adjusted to 4294963200 
 + Warning: option 'read_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'write_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + Warning: option 'sort_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295 
 + MyISAM file: /var/lib/mysql/ndoutils/nagios_servicechecks.MYI is already checked  
 + 
 +service nagios start 
 + Running configuration check...done. 
 + Starting nagios: done. 
 +</code> 
 + 
 +=====Upgrade de Wheezy vers Jessie===== 
 + 
 +Depuis quelques jours (fin avril 2015) Debian 8 stable est release. Je me suis donc mis à la page et j'ai eu la stupeur de voir que mon nagios3 avait été à moitié dézingué, et que le pnp4nagios avait même disparu des paquets (à priori il n'existe plus qu'en version unstable) ! 
 + 
 +Voici le mode pompier pour restaurer nos courbes : 
 +<code bash> 
 +// prérequis 
 +aptitude install rrdtool librrds-perl php5-gd 
 + 
 +wget https://sourceforge.net/projects/pnp4nagios/files/latest 
 +# dans mon cas c'est la version pnp4nagios-0.6.25.tar.gz 
 +tar -zxvf pnp4nagios-0.6.25.tar.gz 
 +cd pnp4nagios-0.6.25 
 +./configure 
 +[..] 
 +*** Configuration summary for pnp4nagios-0.6.25 03-01-2015 *** 
 + 
 +  General Options: 
 +  -------------------------         ------------------- 
 +  Nagios user/group:                nagios nagios 
 +  Install directory:                /usr/local/pnp4nagios 
 +  HTML Dir:                         /usr/local/pnp4nagios/share 
 +  Config Dir:                       /usr/local/pnp4nagios/etc 
 +  Location of rrdtool binary:       /usr/bin/rrdtool Version 1.4.8 
 +  RRDs Perl Modules:                FOUND (Version 1.4008) 
 +  RRD Files stored in:              /usr/local/pnp4nagios/var/perfdata 
 +  process_perfdata.pl Logfile:      /usr/local/pnp4nagios/var/perfdata.log 
 +  Perfdata files (NPCD) stored in:  /usr/local/pnp4nagios/var/spool 
 + 
 +  Web Interface Options: 
 +  -------------------------         ------------------- 
 +  HTML URL:                         http://localhost/pnp4nagios 
 +  Apache Config File:               /etc/apache2/conf.d/pnp4nagios.conf 
 + 
 + 
 +  Review the options above for accuracy.  If they look okay, 
 +  type 'make all' to compile. 
 + 
 +make all 
 +cd ./src && make 
 +make[1]: Entering directory '/home/dude/src/pnp4nagios-0.6.25/src' 
 +gcc -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o utils.o utils.c 
 +gcc -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o config.o config.c 
 +gcc -g -O2 -DHAVE_CONFIG_H -DNSCORE   -c -o logging.o logging.c 
 +gcc -g -O2 -DHAVE_CONFIG_H -DNSCORE -o npcd npcd.c utils.o config.o logging.o -lpthread 
 +gcc -fPIC -g -O2 -DHAVE_CONFIG_H -DNSCORE -o npcdmod.o npcdmod.c -shared   -fPIC 
 +make[1]: Leaving directory '/home/dude/src/pnp4nagios-0.6.25/src' 
 +cd ./share && make 
 +make[1]: Entering directory '/home/dude/src/pnp4nagios-0.6.25/share' 
 +make[1]: Nothing to be done for 'all'
 +make[1]: Leaving directory '/home/dude/src/pnp4nagios-0.6.25/share' 
 +cd ./scripts && make 
 +make[1]: Entering directory '/home/dude/src/pnp4nagios-0.6.25/scripts' 
 +make[1]: Nothing to be done for 'all'
 +make[1]: Leaving directory '/home/dude/src/pnp4nagios-0.6.25/scripts' 
 +chmod a+r ./contrib/ssi/status-header.ssi 
 + 
 +*** Compile finished *** 
 + 
 +  make install 
 +     - This installs the main program and HTML files 
 + 
 +  make fullinstall 
 +     - This installs the main program, runlevel scripts, config and HTML files 
 + 
 +Enjoy. 
 + 
 +# on va faire simple : 
 +make fullinstall 
 +[..] 
 +</code> 
 + 
 +Seulement voilà il faut le réintégrer au bousin, donc corriger quelques trucs : 
 +  * le fichier de conf d'apache est déposé dans $APACHEDIR$/conf.d ; or maintenant on utilise le système des ''*-available'' / ''*-enabled'' , à savoir on dépose le fichier de conf dans ''$APACHEDIR$/conf-available'' et on l'active avec un lien symbolique dans ''$APACHEDIR$/conf-enable'' ; donc : 
 +<code bash> 
 +mv /etc/apache2/conf-d/pnp4nagios.conf /etc/apache2/conf-available/pnp4nagios.conf 
 +ln -s /etc/apache2/conf-available/pnp4nagios.conf /etc/apache2/conf-enabled/pnp4nagios.conf 
 +</code> 
 +NB : on aurait pu utiliser les commandes toutes faites d'Apache, à savoir ''a2enconf pnp4nagios'', mais maintenant c'est trop tard ! :) 
 + 
 +  * dans ce même fichier, le chemin du fichier de mots de passe (htpasswd) n'est pas correct, il faut le corriger : 
 +<code bash> 
 +vi /etc/apache2/conf-available/pnp4nagios.conf 
 +#AuthUserFile /usr/local/nagios/etc/htpasswd.users 
 +AuthUserFile /etc/nagios3/htpasswd.users 
 +</code> 
 + 
 +  * dans le cadre de l'install à partir des sources, les chemins à renseigner dans la conf de nagios ont changés, notamment dans le fichier ''commands.cfg'' pour les commandes **process-host-perfdata** et **process-service-perfdata** : 
 +<code bash> 
 +vi /etc/nagios3/commands.cfg 
 +define command{ 
 +    command_name    process-host-perfdata 
 +    #command_line  /usr/bin/perl /usr/lib/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA 
 +    command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA 
 +    } 
 + 
 +define command{ 
 +    command_name    process-service-perfdata 
 +    #command_line  /usr/bin/perl /usr/lib/pnp4nagios/libexec/process_perfdata.pl 
 +    command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl 
 +    } 
 +</code> 
 + 
 +  * du au changement de path, le chemin des templates à été modifié et pnp ne retrouve plus ces petits ; il faut donc déplacer les templates persos de l'ancien répertoire vers le nouveau : 
 +<code bash> 
 +mv /etc/pnp4nagios/templates/* /usr/local/pnp4nagios/share/templates/ 
 +</code> 
 + 
 +  * pour une raison qui m'est inconnue, le plugin **check_snmp** (quand utilisé avec l'option ''<nowiki>--rate</nowiki>'') enregistre ses états non plus dans ''/usr/var/check_snmp'' mais dans ''/usr/var/105/check_snmp'' ! Une réminiscence d'IA caractérielle, une portion de code spontané ? En tout cas on va lui créer son répertoire car il n'a pas les droits pour le faire seul : 
 +<code bash> 
 +mkdir /usr/var/105 
 +chown nagios /usr/var/105 
 +</code> 
 + 
 +  * quand on passe la souris sur les icônes, les courbes ne s'affichent plus ! Et pour cause, le lien symbolique du template ''/usr/share/nagios3/htdocs/ssi/status-header.ssi'' est ballant (sisi : "cp: pas d'écriture à travers le lien symbolique ballant « /usr/share/nagios3/htdocs/ssi/status-header.ssi »"). Bref il ne pointe vers rien ; on le remplace donc par la nouvelle version. Je ne la trouve pas dans les fichiers installés par la fullinstall, mais dans les sources : 
 +<code bash> 
 +updatedb 
 +locate status-header.ssi 
 +/home/dude/src/pnp4nagios-0.6.25/contrib/ssi/status-header.ssi 
 +/home/dude/src/pnp4nagios-0.6.25/contrib/ssi/status-header.ssi.in 
 +/usr/share/nagios3/htdocs/ssi/status-header.ssi 
 + 
 +// on copie donc status-header.ssi à la place du symlink "ballant"
 +rm /usr/share/nagios3/htdocs/ssi/status-header.ssi 
 +cp /home/dude/src/pnp4nagios-0.6.25/contrib/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi/ 
 +chmod o+r /usr/share/nagios3/htdocs/ssi/status-header.ssi 
 +</code> 
 + 
 +  * TODO : la prochaine fois, ne pas oublier de restaurer les bases RRD pour ne pas perdre tout l'historique de supervision :( A recopier ici : ''/usr/local/pnp4nagios/var/perfdata'' (avec leur arborescence) 
 + 
 + 
 +=====Horodatage illisibles des logs===== 
 + 
 +Les logs Nagios sont par défaut verbeux mais l'horodatage est illisible (humainement j'entends). Voici une petite commande perl pour convertir en heure intelligible : 
 +<code bash> 
 +# les logs bruts 
 +tail -3 /var/log/nagios/nagios.log 
 +[1441261778] Auto-save of retention data completed successfully. 
 +[1441265378] Auto-save of retention data completed successfully. 
 +[1441268978] Auto-save of retention data completed successfully. 
 + 
 +# après convertion 
 +tail -3 /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e' 
 +[Thu Sep  3 08:29:38 2015] Auto-save of retention data completed successfully. 
 +[Thu Sep  3 09:29:38 2015] Auto-save of retention data completed successfully. 
 +[Thu Sep  3 10:29:38 2015] Auto-save of retention data completed successfully. 
 +</code> 
 + 
 + 
 + 
 +=====Contrôler Nagios en CLI===== 
 + 
 +Grâce au commandes externes, on peut envoyer des ordres à Nagios via la ligne de commande, ce qui va plus vite que l'interface web dès qu'on donne beaucoup d'ordres :) Pour cela il suffit d'utiliser l'API/la syntaxe documentée ici : [[https://assets.nagios.com/downloads/nagioscore/docs/externalcmds/|Nagios Core External Commands]]. 
 + 
 +Exemples de scripts inspirés de ceux de la doc : 
 +  * ''nagios_downtime-host-and-childs.sh'' : permet de planifier un DOWNTIME à partir de maintenant pour un ou des hosts et tous ces childs. 
 +<code bash nagios_downtime-host-and-childs.sh> 
 +#!/bin/bash 
 +# This is a sample shell script showing how you can submit the SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME command 
 +# to Nagios. Adjust variables to fit your environment as necessary. 
 + 
 +[ -z "$3" ] && { echo "Syntaxe: ${O##*/} <duree_secs> <commentaire> <host> {<host2> <host3> etc..}"; exit 1; } 
 + 
 +now=`date +%s` 
 +commandfile='/var/nagios/rw/nagios.cmd' 
 +end=`expr $now + $1` 
 +comment="$2" 
 +shift 2 
 + 
 +while [ -n "$1" ]; do 
 +   /usr/bin/printf "[%lu] SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME;$3;$now;$end;1;0;7200;toto;$comment\n" $now > $commandfile 
 +   shift 
 +done 
 +</code> 
 + 
 +  * permet de planifier un downtime pour un host et ses childs à un date donnée 
 +<code bash nagios_downtime_w_childs.sh> 
 +function usage { 
 +        echo "Usage: ${O##*/} <host> <date_debut> (format: \"%Y-%m-%d %H:%M:%S\")> <date_fin> \"<commentaire>\"" 
 +        echo " format dates: \"%Y-%m-%d %H:%M:%S\"" 
 +        echo " ex: nagios_downtime_w_childs.sh switch1 \"2021-01-15 07:18:00\" \"2021-01-15 07:48:00\" \"test downtime 30min\"" 
 +        exit 1 
 +        } 
 + 
 +[ -z "$4" ] && usage 
 + 
 +now=$(date +%s) 
 +commandfile='/var/nagios/rw/nagios.cmd' 
 + 
 +# affectation et contrôle des inputs 
 +naghost=$1 
 +debut=$(date -d "$2" +%s 2>/dev/null) 
 +[ -z "$debut" ] && { echo "Date début $2 invalide !"; usage; } 
 +#[[ "$3" =~ ^[0-9]*$ ]] && fin=`expr $debut + $3` || { echo "ERR: Durée $3 invalide !"; usage; } 
 +fin=$(date -d "$3" +%s 2>/dev/null) 
 +[ -z "$fin" ] && { echo "Date fin $3 invalide !"; usage; } 
 +comment="$4" 
 + 
 +/usr/bin/printf "[%lu] SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME;$naghost;$debut;$fin;1;0;7200;toto;$comment\n" $now > $commandfile 
 +</code> 
 +=====Annuler des actions en masse===== 
 + 
 +//Préalable : il faut avoir activer les commandes externes (ce qui est bien souvent le cas...)// 
 + 
 +Pour annuler en masse certaines actions, on peut interagir avec le fichier de pipe nommé **nagios.cmd** (situé dans **/var/spool/nagios/cmd/** ; sinon voir le paramètre ''command_file'' dans **/etc/nagios/nagios.cfg**). 
 + 
 +Exemple pour supprimer des DOWNTIME planifiés pour un équipement et tous ses fils (soit une centaine de DOWNTIME) : 
 +  * on pourrait les supprimer un par un / clic par clic dans le menu "Downtime" ou ils sont listés, mais ça serait fastidieux ; au lieu de cela, repérer juste le premier et le dernier "Downtime ID" (1050 et 1150 dans mon cas) 
 +  * puis se connecter en SSH sur le serveur et lancer la commande : 
 +<code bash> 
 +for i in `seq 1050 1150`; do 
 +  printf "[%lu] DEL_HOST_DOWNTIME;$i\n" `date +%s` > /var/nagios/rw/nagios.cmd 
 +done 
 +</code> 
 +Cela a pour effet d'envoyer des commandes qui seront lues par nagios ; l'effet n'est pas immédiat cela peut prendre quelques secondes/minutes.
  
  
-===== Liens =====+======Liens======
  
   * http://doc.ubuntu-fr.org/nagios   * http://doc.ubuntu-fr.org/nagios
informatique/logiciels/nagios.1274283351.txt.gz · Last modified: 2013/10/14 20:55 (external edit)