Vous êtes sur la page 1sur 15

Tutoriel NAGIOS

Sommaire
Installation de nagios .............................................................................................................................. 2
Pr-requis ............................................................................................................................................ 2
Installation de nagios et de httpd ....................................................................................................... 2
Configuration de Nagios ...................................................................................................................... 2
Insallation du dmon NRPE sur les htes monitors. ......................................................................... 3
Informations et recommandations pour le TP ........................................................................................ 4
Recommandations gnrales .............................................................................................................. 4
Attribution de machines virtuelles ...................................................................................................... 4
Aide la rdaction de scripts BASH..................................................................................................... 5
Tutoriel : exercices .................................................................................................................................. 7
EXERCICE 1 ........................................................................................................................................... 7
EXERCICE 2 ........................................................................................................................................... 7
EXERCICE 3 ........................................................................................................................................... 8
EXERCICE 4 ........................................................................................................................................... 9
EXERCICE 5 ......................................................................................................................................... 10
Correction des exercices ....................................................................................................................... 11
Correction ex.1 .................................................................................................................................. 11
Correction ex.2 .................................................................................................................................. 12
Correction ex.3 .................................................................................................................................. 13
Correction ex.4 .................................................................................................................................. 14
Correction ex.5 .................................................................................................................................. 14





Page 2


Installation de nagios

Note : Les machines virtuelles ont normallement t prinstalles avec les paquets RPM ncessaires :
les informations dinstallations sont donnes titre indicatif, et pour votre culture gnrale. La
configuration des dmons par contre fait partie du TP !
Pr-requis
Afin davoir dinstaller nagios, vous devrez :
Avoir des droits dadministration sur une machine linux
Avoir de disponnible dans votre distribution linux les paquets nagios et httpd (httpd nest pas
vraiment requis, il sert juste afficher linterface)
256 MB de RAM semblent un minimum de nos jours
1GB despace disponnible dans /var (ce qui vous permettra dj de tenir des mois, voire des
annes)
Pour laccs aux diffrents dmons : un firewall vous autorisant vous connecter sur les
diffrents ports.

Installation de nagios et de httpd

Commencer par diter/configurer le repository yum.
/etc/yum.repos.d/dag.repo doit contenir :
[dag]
name=DAG rpms
baseurl=http://ftp.scientificlinux.org/linux/extra/dag/redhat/el4/en/$basearch/dag/
ftp://ftp.scientificlinux.org/linux/extra/dag/redhat/el4/en/$basearch/dag/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-dag


Ce repository est install par defaut, il suffit de l'activer (enabled=1)
Nagios peut dsormais tre install :
# sudo yum install nagios nagios-plugins httpd nagios-plugins-nrpe

Configuration de Nagios

Ne pas oublier de dmarrer le dmon httpd sil ne lest pas dj (sudo /sbin/service httpd restart)
Afin de pouvoir accder de manire un minimum scurise, nous allons crer un utilisateur qui sera
autoris au niveau dapache accder nagios :



Page 3


Le nom de fichier de mot de passe est dfini dans la configuration apache
(/etc/httpd/conf.d/nagios.conf). Ce fichier de configuration apache pointe par dfaut vers :
/etc/nagios/htpasswd.users qui contient des lignes au format Login: mot de passe crypt
Cration du mot de passe par :
o sudo htpasswd -c /etc/nagios/htpasswd.users <login>
Crer un mot de passe pour lutilisateur nagiosadmin.
Les autorisations pour les utilisateurs de linterface web sont dfinies dans /etc/nagios/cgi.cfg (on y
dfinit qui est autoris faire quoi ?).
Vrifier que ce fichier de configuration, ainsi que lensemble des autres paramtres nagios sont
corrects :
# sudo nagios -v /etc/nagios/nagios.cfg

Pour dmarrer nagios (si tout est OK) :
# sudo /sbin/service nagios start

Insallation du dmon NRPE sur les htes monitors.

Chaque machine monitorer localement doit autoriser son serveur nagios se connecter. Il faut au
pralable installer NRPE et les plugins standard nagios :
# sudo yum install nagios-plugins nagios-nrpe

Note : en fonction des distributions, les paquets nagios/nagios-www/nagios-nrpe/nrpe/ peuvent
changer
Il faut ensuite configurer NRPE.
Editer /etc/nagios/nrpe.cfg et y mettre une configuration correcte :
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=<mysecure nagios server IP>
dont_blame_nrpe=0
debug=0
command_timeout=120
connection_timeout=300
include=/etc/nagios/nrpe_commands.cfg
#include_dir=<somedirectory>


On a presque fini : reste crer le fichier suplmentaire de commandes de nrpe sur la machine :
crer ce fichier (/etc/nagios/nrpe_commands.cfg ) sil nexiste pas, puis redmarrer le dmon nrpe
(sudo /etc/init.d/nrpe restart).



Page 4


Rappel : une commande est dfinie ainsi :
command[nom]=commande relle

Informations et recommandations pour le TP

Recommandations gnrales
Vous allez tous utiliser un serveur nagios spar, mais vous allez monitorer les mmes machines.
Voici quelques informations et recommendations importantes :
Les serveurs nagios sont les machines ccegeevmli11 30.
Les machines monitores sont ccegeevmli05 et ccegeevmli06
Le login est gridadm, le mot de passe sera affich au tableau
Gridadm sera autoris lancer toutes les commandes sudo : pensez donc utiliser sudo
avant dditer vos fichiers, il serait dommage de perdre vos modifications !
Tout plugin standard de nagios se doit dtre de qualit. Tout plugin standard comporte
donc une aide disponible gnralement via les options -h ou --help
Noubliez pas lors de la rdaction de vos scripts de test nagios, que seule la premire ligne
doutput est affiche dans beaucoup de pages de linterface web : il sera bon de stocker dans
des variables tous votre output, et dafficher seulement la fin dexcution de votre script
o Une 1ere ligne comportant un rsum de l'excution de la sonde (status) prfix par
"OK, "Warning", "Error"
o Sur quelques lignes suivantes, des dtails dexcution et derreur.
Gardez en tte les codes de retour des sondes nagios: OK:0, Warning:1, Error:2, Unknown:3
ou plus. Les 3 premiers codes sont utiliser pour renseigner sur l'tat du service test par la
sonde, le code Unknown est utiliser pour signaler une erreur d'excution de la sonde elle
mme (programme externe absent, bibliothque non trouve, ...)
Il est rappel dans les premiers exercices de recharger la configuration des diffrents
dmons vous dy penser par la suite !
Dernire recommandation : vous recevrez peut tre (?) des notifications nagios au cours de
lexercice vous de faire en sorte, la fin du tutoriel de ne plus en recevoir, en supprimant
vos modification, ou en dsinstallant nagios !

Attribution de machines virtuelles

Nous allons vous attribuer un numro (anonyme, si si) : lorsque vous devrez modifier la configuration
dune machine, nous vous serons reconnaissant de toujours ajouter dans les noms des scripts ou des
commandes NRPE crs la chaine de caractre _tutX o X sera votre numro. Ce numro sera,
comme par hasard, gal au numro de machine virtuelle vous servant de serveur nagios.




Page 5


Exemple : on vous demande de crer un script nomm check_url.
Si bous tes Monsieur 10 (le masculin lemporte sur le fminin ;) ), vous serez bien urbain de
nommer votre script check_url_tut10

Voici la liste des machines et de leur affectation :
Participant Numro Nom de machine
Jean-Michel Barbet 11 ccegeevmli11.in2p3.fr
Guillaume Cessieux 12 ccegeevmli12.in2p3.fr
Nicolas Clementin; 13 ccegeevmli13.in2p3.fr
Christelle Eloto 14 ccegeevmli14.in2p3.fr
Sylvain Garrigues 15 ccegeevmli15.in2p3.fr
Christine GONDRAND 16 ccegeevmli16.in2p3.fr
Marc Hausard 17 ccegeevmli17.in2p3.fr
pascale hennion 18 ccegeevmli18.in2p3.fr
CHEVALEYRE Jean-Claude 19 ccegeevmli19.in2p3.fr
Eric Kieffer 20 ccegeevmli20.in2p3.fr
Edith Knoops 21 ccegeevmli21.in2p3.fr
Fabian Lambert 22 ccegeevmli22.in2p3.fr
Pierrick Le Corre 23 ccegeevmli23.in2p3.fr
Christophe DIARRA 24 ccegeevmli24.in2p3.fr
Liliana Martin 25 ccegeevmli25.in2p3.fr
Emmanuel Medernach 26 ccegeevmli26.in2p3.fr
Victor Mendoza 27 ccegeevmli27.in2p3.fr
Benjamin TAKLIFI 28 ccegeevmli28.in2p3.fr
Gerald Vetois 29 ccegeevmli29.in2p3.fr
David Weissenbach 30 ccegeevmli30.in2p3.fr

Aide la rdaction de scripts BASH
Enfin, pour vous aider dans votre criture des scripts, nous vous fournissions un template que vous
pourrez copier/coller outrageusement (attention, copyright F.Schaer ;) ). Attention tout de mme au
copier/coller et aux erreurs possibles de traduction de caractres entre OS.
#!/bin/bash
# vim: set sw=4 ts=4 et:

# Variables "
#""""""""""""

PROG_NAME=`basename $0`
PROG_PATH=`echo $0 | sed -e "s/$PROG_NAME\$//" -e 's/\/$//' -e 's/^$/./'`
ASK=1 # set this var to 0 if you want "y" to be answered each time there is a question.

# Help Function "
#""""""""""""""""

help()
{
cat <<HELP

Usage : $PROG_NAME <HOST>
Options :
-h display this help
Example :



Page 6


$PROG_NAME mynode.mydomain.org

HELP
}

# Prompt Function, sets the ANSWER variable "
#"""""""""""""""""""""""""""

PromptFor() {
echo -n -e "$* [y/n] ? : "
if [ $ASK -eq 1 ];then
wait=1
while [ $wait -eq 1 ] ; do
read -s -n 1 temp
case "$temp" in
"y") wait=0;ANSWER=1;echo "y";;
"n") wait=0;ANSWER=0;echo "n";;
*);;
esac
done
else
echo "y"
ANSWER=1
fi
}

# Command line Parser "
#""""""""""""""""""""""

while getopts ":u:a:s:v:h" options; do
case $options in
u ) uname=$OPTARG;;
a ) attrs=$OPTARG;;
s ) searchattr=$OPTARG;;
v ) att=ALL;;
h ) help ; exit 0 ;;
\? ) help
exit 1;;
* ) help
exit 1;;

esac
done

# Error Function "
#"""""""""""""""""

error()
{
# print an error and exit
#1 = message
#2 = exit value
echo -n -e "$1"
#NRPE bug workaround
printf "\0"
exit $2
}

# Main Program "
#"""""""""""""""

mygrep="/bin/grep"
myegrep="/bin/egrep"
myawk="/bin/gawk"
mysed="/bin/sed"

printf "\0"





Page 7


Tutoriel : exercices
EXERCICE 1
But : superviser les services HTTP et SSH des deux machines ccegeevmli05 et ccegeevmli06
1. Dfinir une time period qui vous convient, si lune de celles prdfinies ne vous convient
pas
2. crer un contact avec votre adresse email
3. Crer un groupe de contact
4. Dfinir un hostgroup et les hosts dans la configuration nagios (nslookup est votre ami), y
associer le contact group dfini prcdemment
5. Dfinir les services associs, permettant de tester A DISTANCE le dmon http et le dmon ssh
6. Vrifier et recharger la configuration nagios, se connecter linterface web sur ladresse
http://ccegeevmliXX.in2p3.fr/nagios


EXERCICE 2
But : Superviser les ressources locales (CPU, Espaces disque) des machines.
Vu la configuration des machines virtuelles, un seul filesystem peut tre monitor. Mais sachez quil
est possible, et mme souhaitable, de regrouper en 1 test (une seule commande) la pluspart des
tests de filesystems dune machine (moins de scheduling pour nagios, moins de charge pour la
machine)



Page 8



1. Vrifier la prsence des plugins officiels nagios sur les machines monitores. Vrifier la
configuration du dmon NRPE de ces machines, et son tat (il doit tre dmarr bien sr).
NOTE : merci de ne pas effacer la configuration des petits copains en leur interdisant laccs
au dmon NRPE La variable allowed_hosts peut prendre une liste dadresses IP
2. Vrifier quil existe des commandes adquates dans les configuration NRPE de ces 2
machines qui permettront de monitorer les filesystems, la charge CPU, et les dfinir au
besoin. RAPPEL : pour des raisons de scurit, le passage darguments au dmon NRPE nest
pas autoris !
3. Recharger la configuration des dmons NRPE si ncessaire
4. Dfinir des services dans la configuration nagios en charge de monitorer au travers de NRPE
la charge CPU et les disques. Dfinir une commande check_nrpe en utilisant le plugin
standard.
5. Recharger la configuration sur le serveur nagios, et vrifier le bon fonctionnement.

EXERCICE 3
But : Ecrire une sonde nomme check_url qui tlcharge le fichier /tmp.txt sur les machines
monitores (http://ccegeevmli0[56].in2p3.fr/test.txt) possdant un serveur httpd, et qui gnre une
erreur en cas dabscence.
Note : INTERDICTION dutiliser quelque chose comme ceci check_http -H ccegeevmli05 -u /test.txt -r
'T.ST' --invert-regex vous devez crire votre propre sonde !



Page 9



1. Ecrire un script qui tlcharge un fichier pass en paramtre, et qui renvoie une erreur (au
sens nagios du terme : code derreur 2) en cas dabsence.
2. Dfinir une commande nagios utilisant ce script
3. Dfinir un service et l'ajouter la configuration du serveur nagios
EXERCICE 4
But : Ecrire une sonde qui tlcharge le mme fichier que pour lexercice3, sur les machines
monitores possdant un serveur httpd, et qui gnre une erreur si le contenu de ce fichier contient
lexpression rgulire suivante (merci dignorer la casse des carractres) : generated ERROR.*very
urgent. Le test devra tre excut toutes les minutes.
Comprendre et dfinir une dpendance de services.
1. Modifier le script de lexercice 3, afin que celui-ci prenne une option pour tester le contenu
du fichier tlcharg (et vrifier la prsence ou non de lexpression rgulire passe en
argument, puis retourner une erreur en sa prsence).
2. Modifier la dfinition de la commande nagios de lexercice 3, afin de permettre lutilisation
darguments suplmentaires (on peut passer nagios un argument contenant la fois le
switch ET la valeur associe par ex. : -r .*toto_tata )
Note : vous devrez alors modifier la dfinition du service faite dans lexercice prcdent
3. Dfinir un service, et lajouter la configuration nagios
4. Dfinir une dpendance de ce nouveau service sur le service de lexercice 3 : quoi bon
notifier un utilisateur de labsence dexpression rgulire, si le fichier la contenant est lui-
mme absent ?




Page 10


EXERCICE 5
Refaire lexercice 5, mais en utilisant une sonde locale NRPE plutt quune sonde distante. Cet
exercice permet dapprhender le besoin dcrire du code le plus polyvalent possible, afin dviter de
maintenir plusieurs copies du mme code.
Cet exercice permettra en outre de dfinir deux dpendances de services.
1. Modifier le script de lexercice 4, afin que celui-ci permette en plus de tester un fichier local.
2. Copier ce script sur les machines monitores, afin de le rendre disponnible NRPE
3. Dfinir une commande NRPE testant le fichier en question (/var/www/html/test.txt)
4. Dfinir un service sur le serveur nagios, ainsi que 2 dpendances dexcution de ce test : la
premire sur la prsence ou non du dmon nrpe, la deuxime sur la prsence ou non du
fichier test).




Page 11


Correction des exercices
Correction ex.1
1. Trivial.
2.
define contact{
contact_name me
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
alias Fred ; Full name of user <<<**** please change this
email nagios@localhost ; <<**** CHANGE THIS TO YOUR EMAIL ADDRESS *****
}

3.
define contactgroup{
contactgroup_name nagios_beginners
alias Nagios Administrators
members me
}

4.
define hostgroup {
hostgroup_name VM
alias Virtual Machines
}
define host{
name generic_host
initial_state o
max_check_attempts 3
active_checks_enabled 1
passive_checks_enabled 1
check_command check-host-alive
check_interval 10
retry_interval 10
check_period 24x7
retain_status_information 1
retain_nonstatus_information 1
#contacts
contact_groups nagios_beginners
notification_interval 0
notification_period 24x7
notification_options d,r
notifications_enabled 1
#icon_image image_file
#icon_image_alt alt_string
#vrml_image image_file
#statusmap_image image_file
#2d_coords x_coord,y_coord
#3d_coords x_coord,y_coord,z_coord
register 0
}

define host {
use generic_host
host_name ccegeevmli05.in2p3.fr
alias vmli05
address 193.48.95.205
hostgroups VM
}




Page 12


define host {
use generic_host
host_name ccegeevmli06.in2p3.fr
alias vmli05
address 193.48.95.206
hostgroups VM
}

5.
define service{
active_checks_enabled 1
check_freshness 0
check_period 24x7
event_handler_enabled 1
flap_detection_enabled 1
is_volatile 0
max_check_attempts 3
name generic_tutorial_service
normal_check_interval 5
notification_interval 0
notification_options c,w,r,u
notification_period 24x7
notifications_enabled 1
obsess_over_service 0
parallelize_check 1
passive_checks_enabled 0
process_perf_data 1
register 0
retain_nonstatus_information 1
retain_status_information 1
retry_check_interval 1
}

define service{
check_command check_ssh ; la commande check_ssh est dfinie par dfaut
contact_groups admins,nagios_beginners
hostgroup_name VM
service_description ssh daemon
use generic_tutorial_service
}

define service{
check_command check_http ; la commande check_http est dfinie par dfaut
contact_groups nagios_beginners
hostgroup_name *
service_description http daemon
use generic_tutorial_service
}

6.
# sudo nagios -v /etc/nagios/nagios.cfg
# sudo /sbin/service nagios reload


Correction ex.2
1. Trivial ?
Verifier la configuration nrpe, notemment allowed_hosts.




Page 13


2.
Dfinir la commande suivante (par exemple, mais vous pouvez vous amuser changer les
paramtres !) sur LES machines monitores, dans la configuration NRPE (rappel : utiliser son numro
unique dans le nom de commande):
command[check_disk_tutX]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1

3.
sudo /sbin/service nrpe reload || sudo /sbin/service nrpe restart

4.
Commande check_nrpe :
#generic check_nrpe command :
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -t 20 -H $HOSTADDRESS$ -c $ARG1$
}

Services :
define service{
check_command check_nrpe!check_disk_tutX ; <<<**** please change this
contact_groups nagios_beginners
hostgroup_name VM
service_description DISK usage
use generic_tutorial_service
}

define service{
check_command check_nrpe!check _load ;
contact_groups nagios_beginners
hostgroup_name VM
service_description CPU usage
use generic_tutorial_service
}

Test NRPE :
/usr/lib/nagios/plugins/check_nrpe -t 20 -H ccegeevmli05 -c check_disk_tutX <<<**** please change this
/usr/lib/nagios/plugins/check_nrpe -t 20 -H ccegeevmli06 -c check_disk_tutX <<<**** please change this
/usr/lib/nagios/plugins/check_nrpe -t 20 -H ccegeevmli05 -c check_load
/usr/lib/nagios/plugins/check_nrpe -t 20 -H ccegeevmli06 -c check_load

5. Chargement changements config nagios :
sudo nagios -v /etc/nagios/nagios.cfg && sudo /sbin/service nagios reload

Correction ex.3
1. Au boulot !!
2. Commande check_url :



Page 14


define command{
command_name check_url
command_line /usr/lib/nagios/plugins/check_url -u $HOSTADDRESS$/test.txt
}
3. Service
define service{
check_command check_url ;
contact_groups nagios_beginners
hostgroup_name VM
service_description URL download test
use generic_tutorial_service
}

Correction ex.4
1. Non, toujours pas !
2.
define command{
command_name check_url
command_line /usr/lib/nagios/plugins/check_url -u $HOSTADDRESS$/$ARG1$ $ARG2$
}

3.
define service{
check_command check_url!test.txt!-r generated ERROR.*very urgent ; <<<**** attention au copier coller
contact_groups nagios_beginners
hostgroup_name VM
service_description URL enhanced download test
use generic_tutorial_service
max_check_attempts 2
normal_check_interval 1
}

4.
define servicedependency{
dependent_hostgroup_name VM
dependent_service_description URL download test
hostgroup_name VM
service_description URL enhanced download test
execution_failure_criteria c,p
notification_failure_criteria w,u,c
}

Correction ex.5
1. Bon allez, on est gentils, voici un exemple de ce qui est faisable (en modifiant lgrement le
template de sonde donn en prambule, et en ajustant les options de ligne de commande)
[[ -z "$file" && -z "$url" ]] && error "must at least give an URL or a file\n" 2
[[ "x$file" != "x" && "x$url" != "x" ]] && error "can't give an URL AND a file\n" 2

ERROR=0
OUTPUT=""
tmpfile=`mktemp`

#file case
if [ ! -z "$file" ]; then
copy_cmd="cp $file $tmpfile 2>/dev/null"
source="file $file"



Page 15


else
copy_cmd="wget -q -O $tmpfile $url"
source="URL $url"
fi
eval "$copy_cmd >/dev/null"
[ $? -ne 0 ] && error "could not read $source !\n" 2

if $myegrep "$regexp" $tmpfile >/dev/null; then
ERROR=2
OUTPUT="ERROR : found regexp $regexp in $source\n"
else
OUTPUT="$source is OK and readable\n"
fi

rm $tmpfile
error "$OUTPUT" $ERROR
printf "\0"

Le reste tant trivial, nous corrigerons cela en TP !

Vous aimerez peut-être aussi