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 [2015/09/03 08:37] – refonte structure des titres pteuinformatique:logiciels:nagios [2021/01/15 15:47] (current) – [Contrôler Nagios en CLI] nagios_downtime_w_childs.sh pteu
Line 1052: Line 1052:
  
   * 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).   * 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 :   * Configurer Nagios pour qu'il fasse appel à PNP4Nagios :
Line 1085: Line 1088:
 <code bash> <code bash>
 ln -s /usr/share/doc/pnp4nagios/examples/ssi/status-header.ssi /usr/share/nagios3/htdocs/ssi/ 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> </code>
  
Line 1114: Line 1121:
 <code bash> <code bash>
 vi cgi.cfg vi cgi.cfg
-action_url_target=main+action_url_target=_self
 </code> </code>
  
Line 1120: Line 1127:
 <code bash> <code bash>
 service nagios3 restart service nagios3 restart
 +# OU
 +systemctl restart nagios
 </code> </code>
  
Line 1200: Line 1209:
 {{ :informatique:logiciels:template_pnp4nagios.png?direct |}} {{ :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) :+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> <code bash>
 # avec le paquet pnp4nagios sous debian 7 : # avec le paquet pnp4nagios sous debian 7 :
Line 1211: Line 1220:
 </code> </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).+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==== ====Exemple 1 : trafic in/out====
Line 1238: Line 1247:
          
 # trafic reseau # 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 # -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 # -l permet d'afficher une légende
Line 1245: Line 1252:
 # -P précise la version de SNMP # -P précise la version de SNMP
 # -C spécifie la communauté 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{ define command{
     command_name    check_syno_traf-eth0     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+    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> </code>
  
Line 1272: Line 1290:
 $def[1] .= "GPRINT:var2:AVERAGE:\"%7.2lf %SB/s avg\" " ; $def[1] .= "GPRINT:var2:AVERAGE:\"%7.2lf %SB/s avg\" " ;
 $def[1] .= "GPRINT:var2:MAX:\"%7.2lf %SB/s max\\n\" " $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> </code>
Line 1279: Line 1302:
 {{ :informatique:logiciels:trafic_internet.png?direct |}} {{ :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==== ====Exemple 2 : courbe CPU====
  
Line 1406: Line 1456:
 {{ :informatique:logiciels:cpu_forti.png?direct |}} {{ :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====== ======Tips======
Line 1609: Line 1694:
 </code> </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 :+  * 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> <code bash>
 mkdir /usr/var/105 mkdir /usr/var/105
Line 1648: Line 1733:
 [Thu Sep  3 10: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> </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.
  
  
informatique/logiciels/nagios.1441269470.txt.gz · Last modified: 2015/09/03 08:37 by pteu