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
Next revisionBoth sides next revision
informatique:logiciels:nagios [2015/02/08 21:12] – [Installation de PNP4Nagios] pteuinformatique:logiciels:nagios [2015/09/02 08:43] – [Créer ses templates PNP] pteu
Line 1: Line 1:
-{{tag>supervision monitoring réseau système "logiciel libre"}} 
- 
 ====== Nagios ====== ====== Nagios ======
  
Line 999: Line 997:
 <code bash> <code bash>
 aptitude install pnp4nagios aptitude install pnp4nagios
 +
 +# 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> </code>
  
Line 1142: Line 1155:
 (Et on relance Nagios après avoir vérifier les éventuelles erreurs avec ''nagios3 -v nagios.cfg'' !) (Et on relance Nagios après avoir vérifier les éventuelles erreurs avec ''nagios3 -v nagios.cfg'' !)
  
-=====Problèmes et solutions=====+====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, 1 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 son template éponyme 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> 
 + 
 +Par exemple pour un service "check_syno_4disks_temp" 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 
 +# le plugin avec l'option "--rate" a besoin de creer acceder au repertoire : /usr/var/105/check_snmp 
 +# -> penser à faire : #chmod 755 /usr/var && mkdir /usr/var/105/check_snmp && chown -R nagios /usr/var/105/check_snmp 
 +# -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 
 +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> 
 + 
 +  * 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\"
 +?> 
 +</code> 
 + 
 +Résultat : 
 + 
 +{{ :informatique:logiciels:trafic_internet.png?direct |}} 
 + 
 +===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 |}} 
 + 
 +=====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>
  
 ====Installation du paquet Ubuntu par défaut==== ====Installation du paquet Ubuntu par défaut====
Line 1234: Line 1491:
  Starting nagios: done.  Starting nagios: done.
 </code> </code>
 +
 +=====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 "--rate") 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)
 +
  
 ===== Liens ===== ===== Liens =====
  
   * http://doc.ubuntu-fr.org/nagios   * http://doc.ubuntu-fr.org/nagios
informatique/logiciels/nagios.txt · Last modified: 2021/01/15 15:47 by pteu