Nagios dédié
From Tuxunix
Installation d'un Nagios dédié (serveur NAGIOS)
Pré-requis
- Vérifier que vous avez tous les packages nécessaires a compiler (libc6-dev, make, gcc...).
- Ajouter l'utilisateur/groupe nagios au système :
nagiostest#> /usr/sbin/useradd nagios nagiostest#> passwd nagios Enter new UNIX password: xxxx Retype new UNIX password: xxxx passwd : le mot de passe a été mis à jour avec succès nagiostest#> /usr/sbin/groupadd nagios groupadd : le groupe nagios a été créé
- Télécharger la dernière version du serveur Nagios :
nagiostest#> cd /root nagiostest#> wget http://sourceforge.net/project/downloading.php?group_id=26589&filename=nagios-3.x.x.tar.gz&a=62530053
Compilation
nagiosTest#> tar -xvzf nagios-x.1.0 && cd nagios-x.1.0 nagiosTest#> ./configure --prefix=/usr/local/nagios --with-cgiurl=/nagios/cgi-bin \ --with-htmlurl=/nagios --with-nagios-user=nagios --with-nagios-group=nagios --enable-embedded-perl \ --with-perlcache --disable-statuswrl --with-default-perfdata
nagiosTest#> make all nagiosTest#> make install && make install-init && make install-config && make install-commandmode nagiosTest#> make install-webconf
Création d’un compte nagios pour le login de l’interface web
login: nagiosadmin
mdp: xxxxx
nagiosTest#> htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Lancement automatique de nagios au boot
Pour un système GNU/Debian
nagiosTest#> cd /etc/init.d && update-rc.d nagios defaults
ou pour un système comme RedHat, CentOS...
nagiosTest#> cd /etc/init.d && chkconfig nagios on
Configuration de nagios
Fichier "nagios.cfg"
- Exemple (avec la poste) d'Aperçu d'arborescence :
/usr/local/nagios/etc/object/
|
--> clients/
|
--> laposte/
|
--> hosts.cfg
--> services.cfg
Fichier de configuration principal de Nagios.
############################################################################## # # NAGIOS.CFG - Sample Main Config File for Nagios 3.0.6 # # Read the documentation for more information on this configuration # file. I've provided some comments here, but things may not be so # clear without further explanation. # # Last Modified: 10-15-2008 # ############################################################################## # LOG FILE log_file=/usr/local/nagios/var/nagios.log # OBJECT CONFIGURATION FILE(S) # You can specify individual object config files as shown below: cfg_file=/usr/local/nagios/etc/objects/commands.cfg cfg_file=/usr/local/nagios/etc/objects/contacts.cfg cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg cfg_file=/usr/local/nagios/etc/objects/templates.cfg # Definitions for monitoring the local (Linux) host #cfg_file=/usr/local/nagios/etc/objects/localhost.cfg #Ici mettre le nom du répertoire qui va contenir la déclaration des hosts et services cfg_dir=/usr/local/nagios/etc/objects/clients # Definitions for monitoring a Windows machine #cfg_file=/usr/local/nagios/etc/objects/windows.cfg # Definitions for monitoring a router/switch #cfg_file=/usr/local/nagios/etc/objects/switch.cfg # Definitions for monitoring a network printer #cfg_file=/usr/local/nagios/etc/objects/printer.cfg # You can also tell Nagios to process all config files (with a .cfg # extension) in a particular directory by using the cfg_dir # directive as shown below: #cfg_dir=/usr/local/nagios/etc/servers #cfg_dir=/usr/local/nagios/etc/printers #cfg_dir=/usr/local/nagios/etc/switches #cfg_dir=/usr/local/nagios/etc/routers # OBJECT CACHE FILE object_cache_file=/usr/local/nagios/var/objects.cache precached_object_file=/usr/local/nagios/var/objects.precache resource_file=/usr/local/nagios/etc/resource.cfg status_file=/usr/local/nagios/var/status.dat status_update_interval=10 nagios_user=nagios nagios_group=nagios check_external_commands=1 command_check_interval=-1 command_file=/usr/local/nagios/var/rw/nagios.cmd external_command_buffer_slots=4096 # LOCK FILE lock_file=/usr/local/nagios/var/nagios.lock # TEMP FILE temp_file=/usr/local/nagios/var/nagios.tmp # TEMP PATH temp_path=/tmp # EVENT BROKER OPTIONS event_broker_options=-1 log_rotation_method=d log_archive_path=/usr/local/nagios/var/archives use_syslog=1 log_notifications=1 log_service_retries=1 log_host_retries=1 log_event_handlers=1 log_initial_states=0 log_external_commands=1 log_passive_checks=1 #global_host_event_handler=somecommand #global_service_event_handler=somecommand service_inter_check_delay_method=s max_service_check_spread=30 service_interleave_factor=s host_inter_check_delay_method=s max_host_check_spread=30 max_concurrent_checks=0 check_result_reaper_frequency=10 max_check_result_reaper_time=30 check_result_path=/usr/local/nagios/var/spool/checkresults max_check_result_file_age=3600 cached_host_check_horizon=15 cached_service_check_horizon=15 enable_predictive_host_dependency_checks=1 enable_predictive_service_dependency_checks=1 soft_state_dependencies=0 #time_change_threshold=900 auto_reschedule_checks=0 auto_rescheduling_interval=30 auto_rescheduling_window=180 sleep_time=0.25 service_check_timeout=60 host_check_timeout=30 event_handler_timeout=30 notification_timeout=30 ocsp_timeout=5 perfdata_timeout=5 retain_state_information=1 state_retention_file=/usr/local/nagios/var/retention.dat retention_update_interval=60 use_retained_program_state=1 use_retained_scheduling_info=0 retained_host_attribute_mask=0 retained_service_attribute_mask=0 retained_process_host_attribute_mask=0 retained_process_service_attribute_mask=0 retained_contact_host_attribute_mask=0 retained_contact_service_attribute_mask=0 interval_length=60 use_aggressive_host_checking=0 execute_service_checks=1 accept_passive_service_checks=1 execute_host_checks=1 accept_passive_host_checks=1 enable_notifications=1 # EVENT HANDLER USE OPTION enable_event_handlers=1 process_performance_data=1 #host_perfdata_command=process-host-perfdata service_perfdata_command=process-service-perfdata #host_perfdata_file=/tmp/host-perfdata #service_perfdata_file=/tmp/service-perfdata #host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$ #service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t \ $SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$ #host_perfdata_file_mode=a #service_perfdata_file_mode=a #host_perfdata_file_processing_interval=0 #service_perfdata_file_processing_interval=0 #host_perfdata_file_processing_command=process-host-perfdata-file #service_perfdata_file_processing_command=process-service-perfdata-file obsess_over_services=0 #ocsp_command=somecommand # OBSESS OVER HOST CHECKS OPTION obsess_over_hosts=0 #ochp_command=somecommand translate_passive_host_checks=0 passive_host_checks_are_soft=0 check_for_orphaned_services=1 check_for_orphaned_hosts=1 # SERVICE FRESHNESS CHECK OPTION check_service_freshness=1 # SERVICE FRESHNESS CHECK INTERVAL service_freshness_check_interval=60 check_host_freshness=0 host_freshness_check_interval=60 additional_freshness_latency=15 enable_flap_detection=1 low_service_flap_threshold=5.0 high_service_flap_threshold=20.0 low_host_flap_threshold=5.0 high_host_flap_threshold=20.0 date_format=us p1_file=/usr/local/nagios/bin/p1.pl enable_embedded_perl=1 use_embedded_perl_implicitly=1 illegal_object_name_chars=`~!$%^&*|'"<>?,()= illegal_macro_output_chars=`~$&|'"<> # REGULAR EXPRESSION MATCHING use_regexp_matching=0 use_true_regexp_matching=0 admin_email=nagios@localhost admin_pager=pagenagios@localhost daemon_dumps_core=0 use_large_installation_tweaks=0 enable_environment_macros=1 #free_child_process_memory=1 debug_level=0 debug_verbosity=1 debug_file=/usr/local/nagios/var/nagios.debug max_debug_file_size=1000000 ocsp_timeout=15 ochp_timeout=15 obsess_over_services=1 obsess_over_hosts=1 ocsp_command=submit_check_result ochp_command=submit_host_checks
Fichier "nomduclient.cfg"
Chemin : /usr/local/nagios/etc/objects/hosts/nomduclient/nomduclient.cfg
- Dans ce fichier vous devez déclarer les hosts...
Exemple :
#SERVEUR FRONT LINUX
define host {
use linux-server
host_name laposte1
alias laposte1
address x.x.x.x
}
define host {
use linux-server
host_name laposte2
alias laposte2
address x.x.x.x
}
- les hostgroups...
Exemple :
define hostgroup{
hostgroup_name SERVERS
alias SERVERS
members laposte1, laposte2, laposte3, laposte4
}
Fichier "nomduclient_services.cfg"
Chemin : /usr/local/nagios/etc/objects/hosts/nomduclient/nomduclient_services.cfg
- Les services
Les services peuvent êtres actif ou passif, préférer actif si peu de client sont a superviser, car il est plus gourmand en ressource!
Exemple Actif (nsclient/nrpe...) :
define service{
use generic-service ; Name of service template to use
hostgroup_name SERVERS
service_description PING
check_command PING
}
define service{
use generic-service ; Name of service template to use
hostgroup_name MAIL_SERVERS
service_description Postfix Queue
check_command check_nrpe!check_postfix_queue
}
Exemple Passif (nsca) :
define service{
use passif-service ; Name of service template to use
host_name laposte-ael3, laposte3
service_description Check script import acores
check_command no-passive-report
notification_interval 120
notification_period 24x7
}
Templates
Dans le fichier "nom_du_client.cfg", les services, hosts, hostgroup utilises des templates.
Exemple pour le service passif (use passif-service). Il se trouve donc un fichier nommé /usr/local/nagios/etc/objects/templates.cfg ou se trouve la définition de ces templates.
define service{
name passif-service
service_description passif-service
is_volatile 0
check_command no-passive-report
max_check_attempts 3
normal_check_interval 6
retry_check_interval 1
active_checks_enabled 0
passive_checks_enabled 1
check_period 24x7 ; By default, Linux hosts are checked round the clock
parallelize_check 1
obsess_over_service 1
check_freshness 1
freshness_threshold 3600
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
notification_interval 120
notification_period 24x7
notification_options w,u,c,r,f
notifications_enabled 1
contact_groups admins
stalking_options o,w,u,c
register 0
}
Définir une période de temps ou les checks seront exécutés
Dans le fichier "templates.cfg", les services utilisent le check_period qui est défini dans le fichier /usr/local/nagios/etc/objects/timeperiods.cfg
exemple de timeperiod :
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
Fichier "commands.cfg"
Dans se fichier est défini les commandes exécutés par Nagios.
Exemple :
# 'check_nrpe' command definition check actif
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 20
}
# 'check_passif' command definition
define command{
command_name no-passive-report
command_line $USER1$/nopassivereport.sh
}
- Script nopassivereport.sh :
#!/bin/sh /bin/echo "CRITICAL: Results of passive job were not reported!" exit 2
Fichier "resource.cfg"
Fichier de configuration pour des ressources supplémentaires comme des macros par exemple
# Sets $USER1$ to be the path to the plugins $USER1$=/usr/local/nagios/libexec
Droit sur les fichiers Nagios
nagiostest#> chown -R nagios:nagios /usr/local/nagios && chmod -R u+x /usr/local/nagios/libexec nagiostest#> chmod u+x /usr/local/nagios/nsca/submit_check*
Installation de Nagiosgraph (serveur NAGIOS)
Nagiosgraph stocke ses données dans une base RRD, et peut donc en tirer des graphes. Il gère aussi bien les données de performances (perfdata) renvoyées par les plug-ins de Nagios, que le texte (output), nous utiliserons la méthode OUTPUT.
Paramétrage de Nagiosgraph
Télécharger la dernière version de Nagiosgraph sur Sourceforge.
Il suffit de détarzipper l'archive dans le répertoire de Nagios (/usr/local/nagios/) sous le nom nagiosgraph.
Dans "/usr/local/nagios/etc/nagios.cfg" :
process_performance_data=1 service_perfdata_command=process-service-perfdata
Dans "/usr/local/nagios/etc/serviceextinfo.cfg" (exemple)
define serviceextinfo {
service_description PING
hostgroup xxx-servers,xxxx-PP-servers, xxxx-network
notes_url /nagiosgraph/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
icon_image graph.gif
icon_image_alt View graphs
}
define serviceextinfo {
service_description ssh
hostgroup xxxx-servers,xxxx-PP-servers, xxxxx-networ
notes_url /nagiosgraph/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
icon_image graph.gif
icon_image_alt View graphs
}
Dans "/usr/local/nagios/etc/miscommands.cfg" :
# NAGIOS GRAPH
define command {
command_name process-service-perfdata
command_line /usr/lib/nagios/nagiosgraph/insert.pl "$LASTCHECK$||$HOSTNAME$||$SERVICEDESC$|| \
$OUTPUT$||$PERFDATA$"
}
Dans "/usr/local/nagios/etc/nagiosgraph.conf :
# File: $Id:nagiosgraph.conf,v 1.6 2005/10/08 05:55:08 sauber Exp $ # Author: (c) Soren Dossing, 2005 # License: OSI Artistic License # http://www.opensource.org/licenses/artistic-license.php # Debug levels # 0 = None # 1 = Critical # 2 = Error # 3 = Warn # 4 = Info # 5 = Debug debug = 1 # Location of debug log file logfile = /usr/local/nagios/nagiosgraph/log/nagiosgraph.log # Directory to store rrd database files rrddir = /usr/local/nagios/nagiosgraph/rrd # File containing regular expressions to identify service and perf data mapfile = /usr/local/nagios/nagiosgraph/map # Color scheme for graphs. Choose a number between 1 and 8. colorscheme = 1 # Heartbeat. In seconds, twice the size of servicecheck intervals heartbeat = 3000 # Location of performance data log file. Comment out it not used. perflog = /usr/local/nagios/var/perfdata.log
# Path to rrdtool binary rrdtool = /usr/bin/rrdtool
Dans "/usr/local/nagios/nagiosgraph/map" :
Le fichier map décrit pour Nagiosgraph quelles données collecter et comment les stocker.
- Exemple de définition correspondante dans le fichier "map" :
# Service type: nsclient Memory # check command: check_nt -H Address -v MEMUSAGE # output: Memory usage: total:4195.81 Mb - used: 1987.96 Mb (47%) - free: 2207.85 Mb (53%) # perfdata: 'Memory usage'=1987.96Mb;2937.07;3356.65;0.00;4195.81 /output:Memory usage:.* - used:.*\((\d+)%\) - free:.*/ and push @s, [ ramuse, [ 'percent', GAUGE, $1 ] ];
# Service type: linux remote load # check command: check_nrpe -H Address -c check_load # output: OK - load average: 1.69, 1.07, 0.83 # perfdata: load1=1.690000;3.000000;5.000000;0.000000 \ load5=1.070000;3.000000;5.000000;0.000000 load15=0.830000; 3.000000;5.000000;0.000000 \ /output:.*load average: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)/ and push @s, [ linuxload, [ 'avg01min', GAUGE, $1 ], [ 'avg05min', GAUGE, $2 ], [ 'avg15min', GAUGE, $3 ] ];
Cette configuration va générer automatiquement des RRDs pour tous les hôtes utilisant ces services.
Installer le daemon NSCA (serveur NAGIOS)
- Formule passive
NSCA est un daemon qui tourne sur le serveur Nagios, il est en écoute des clients et renvoie les informations a Nagios.
Installation mode Daemon (Meilleur Perf)
Télécharger la dernière version de l'addons NSCA et copier le sur le serveur Nagios.
#> cd /root && tar xvzf nsca-2.7.2.tar.gz . #> cd nsca-2.7.2 && ./configure && make #> cp src/nsca /usr/local/nagios/bin/ #> cp sample-config/nsca.cfg /usr/local/nagios/etc/
Le fichier de configuration "nsca.cfg" doit contenir ceci :
server_port=5667 password=xxxx decryption_method=0
Créer le script de démarrage/stop du Daemon (/etc/init.d/) :
#!/bin/sh
#
# Last Modified 01-07-2003 Ethan Galstad (nagios@nagios.org)
# Notes
# This script takes care of starting and stopping the NSCA daemon.
# Modeled after init script for NRPE written by jaclu@grm.se
#
# chkconfig: 2345 80 30
# description: nsca is a daemon for accepting service check results \
# from applications running on other hosts.
# processname: nsca
# config: /usr/local/nagios/etc/nsca.cfg
# Source networking configuration.
#. /etc/sysconfig/network
# Check that networking is up.
#[ ${NETWORKING} = "no" ] && exit 0
NscaBin=/usr/local/nagios/bin/nsca
NscaCfg=/usr/local/nagios/etc/nsca.cfg
LockFile=/var/lock/subsys/nsca
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting nsca: "
/usr/local/nagios/bin/nsca -c /usr/local/nagios/etc/nsca.cfg --daemon
RETVAL=$?
if [ $RETVAL -eq "0" ];then
echo "Done"
touch $LockFile
exit 0
else
echo "Ne fonctionne pas, contacter Service Exploitation"
exit 1
fi
;;
stop)
# Stop daemons.
echo -n "Shutting down nsca: "
killall -9 nsca
echo
rm -f $LockFile
;;
restart)
$0 stop
$0 start
;;
status)
status nsca
;;
*)
echo "Usage: nsca {start|stop|restart|status}"
exit 1
esac
exit 0
- Exécution des services systèmes (Debian)
#> update-rc.d nsca defaults #> /etc/init.d/nsca start
- Exécution des services systèmes (Red-Hat)
#> chkconfig nsca on #> /etc/init.d/nsca start
Installation mode Xinetd
Télécharger la dernière version de l'addons NSCA et copier le sur le serveur Nagios.
#> cd /root && tar xvzf nsca-2.7.2.tar.gz . #> cd nsca-2.7.2 && ./configure && make #> cp src/nsca /usr/local/nagios/bin/ #> cp sample-config/nsca.cfg /usr/local/nagios/etc/
Le fichier de configuration "nsca.cfg" doit contenir ceci :
server_port=5667 password=xxx decryption_method=0
Ensuite nous allons ajouter nsca a xinetd :
#> echo '# default: off
# description: An internal xinetd service which gets the current system time
# then prints it out in a format like this: "Wed Nov 13 22:30:27 EST 2002".
# This is the tcp version.
service nsca
{
flags = REUSE
socket_type = stream
port = 5667
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nsca
server_args = -c /usr/local/nagios/etc/nsca.cfg --inetd
log_on_failure += USERID
disable = no
#only_from =
}' > /etc/xinetd.d/nsca
- Paramétrage pour des meilleurs performances :
Dans le fichier "/etc/xinetd.conf", intégrer les paramètres suivants :
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
#Limits the rate of incoming connections (default is 50 10)
cps = 2000 10
#nbr de services simultane
instances = UNLIMITED
#use cpu
rlimit_cpu = UNLIMITED
#load overage max before restart service
max_load = 90
}
- Ensuite on redémarre le service pour prendre en compte les nouveaux paramètres.
#>/etc/init.d/xinetd restart
Vérification NSCA
Verifier que le service tourne bien :
#> netstat -antp | grep 5667 tcp 0 0 0.0.0.0:5667 0.0.0.0:* LISTEN 17578/xinetd
Démarrer Nagios
Aprés toute modification de fichier Nagios, penser a vérifier la configuration comme ceci :
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Nagios 3.0.6 Copyright (c) 1999-2008 Ethan Galstad (http://www.nagios.org) Last Modified: 12-01-2008 License: GPL Reading configuration data... Running pre-flight check on configuration data... Checking services... Checked 201 services. Checking hosts... Checked 17 hosts. Checking host groups... Checked 4 host groups. Checking service groups... Checked 0 service groups. Checking contacts... Checked 1 contacts. Checking contact groups... Checked 1 contact groups. Checking service escalations... Checked 0 service escalations. Checking service dependencies... Checked 0 service dependencies. Checking host escalations... Checked 0 host escalations. Checking host dependencies... Checked 0 host dependencies. Checking commands... Checked 28 commands. Checking time periods... Checked 6 time periods. Checking for circular paths between hosts... Checking for circular host and service dependencies... Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Si aucune erreur est présente vous pouvez lancer le service :
/etc/init.d/nagios start
Vous pouvez vérifié que Nagios est bien démarré en éxécutant la commande suivante :
nagiostest#> ps aux | grep nagios nagios 12609 0.0 0.0 12292 724 ? S 16:58 0:00 /usr/local/nagios/bin/nagios -d \ /usr/local/nagios/etc/nagios.cfg
Une fois que Nagios est lancé, vous pouvez ouvrir un navigateur web et entrer l'adresse : http://monserveur_Nagios/nagios/
Trucs et astuces d'optimisation
- Utilisez des changements d'état agrégés. En activant la consolidation des changements d'état (grâce au paramètre aggregate_status_updates), vous réduirez considérablement la charge sur votre hôte de supervision, car il n'essaiera pas constamment de mettre à jour le journal des états. Ceci est particulièrement vrai si vous supervisez un grand nombre de services. La principale contrepartie lorsque vous agrégez les changements d'état est que les modifications d'état des hôtes et des services ne sont pas immédiatement répliquées dans le fichier d'état. Ceci peut vous poser problème, ou pas.
- Utilisez un disque virtuel [NdT : ramdisk] pour conserver les données d'état. Si vous utilisez le journal des états standard et que vous n'utilisez pas l'agrégation des changements d'état, pensez à mettre le répertoire où le journal des états est stocké sur un disque virtuel en mémoire. Cela accélérera pas mal les choses (à la fois pour le programme principal et les CGI) parce que cela évite beaucoup d'interruptions et d'accès au disque.
- Vérifiez la latence des services pour déterminer la meilleure valeur pour le nombre maximal de contrôles en parallèle. Nagios peut restreindre le nombre maximal de contrôles de service exécutés en parallèle à la valeur que vous spécifiez dans le paramètre max_concurrent_checks. Cela vous permet de gérer la charge que Nagios impose à votre hôte de supervision, mais cela peut aussi ralentir le traitement. Si vous notez des latences importantes (> 10 ou 15 secondes) pour la majorité de vos contrôles de service (via le CGI d'informations complémentaires), vous privez sans doute Nagios des contrôles dont il a besoin. Ce n'est pas la faute de Nagios - c'est la vôtre. Dans des conditions idéales, tous les contrôles de service ont une latence de 0, ce qui signifie qu'ils sont exécutés au moment précis où ils ont été ordonnancés. Ceci dit, il est normal que certains contrôles aient de petites latences. Je recommanderais de doubler la valeur que propose Nagios pour le nombre minimal de contrôles en parallèle, fournie lorsque Nagios est lancé avec le paramètre -s. Continuez à augmenter cette valeur tant que la latence moyenne pour vos services reste assez basse. Vous trouverez plus d'informations sur l'ordonnancement des contrôles de service ici.
- Utilisez des contrôles passifs à chaque fois que c'est possible. La surcharge induite par le traitement des résultats des contrôles passifs de service est bien moindre que celle des contrôles actifs "normaux", donc prenez cette information en compte si vous supervisez de nombreux services. Notez que les contrôles passifs de service ne sont réellement utiles que si une application externe réalise une partie de la supervision ou produit des rapports ; si c'est Nagios qui réalise tout le travail, ceci ne changera rien.
- Evitez l'utilisation des plugins interprétés. L'utilisation de plugins compilés (C/C++, etc.) réduira significativement la charge de votre hôte de supervision par rapport aux scripts interprétés (Perl, etc.). Si les scripts Perl ou autres sont faciles à écrire et fonctionnent bien, le fait qu'ils soient compilés/interprétés à chaque exécution peut augmenter considérablement la charge de votre hôte de supervision lorsque vous avez de nombreux contrôles de service. Si vous souhaitez utiliser des plugins Perl, essayez de les compiler en vrais exécutables grâce à perlcc(1) (un utilitaire qui fait partie de la distribution Perl standard) ou essayez de compiler Nagios avec un interpréteur Perl intégré (voir ci-dessous).
- Utilisez l'interpréteur Perl intégré. Si vous utilisez de nombreux scripts Perl pour les contrôles de service, etc., vous vous apercevrez sans doute qu'en compilant Nagios avec un interpréteur Perl intégré vous accélérez les traitements. Pour compiler l'interpréteur Perl intégré, vous devez ajouter le paramètre --enable-embedded-perl au script de configuration [NdT : ./configure] avant de compiler Nagios. De même, si vous ajoutez le paramètre --with-perlcache, la version compilée de tous les scripts Perl exécutés par l'interpréteur Perl intégré sera mise en cache pour réutilisation.
- Optimisez les commandes de contrôle d'hôte. Si vous contrôlez l'état des hôtes avec le plugin check_ping, vous vous apercevrez que ces contrôles se font bien plus vite en les éclatant. Plutôt que de spécifier une valeur de 1 pour le paramétre max_attempts dans la définition de l'hôte et de dire au plugin check_ping d'envoyer 10 paquets ICMP à l'hôte, il est bien plus rapide de passer max_attempts à 10 et de n'envoyer qu'un paquet ICMP à chaque fois. Ceci est dû au fait que Nagios peut souvent déterminer l'état d'un hôte après n'avoir exécuté le plugin qu'une fois, il vaut donc mieux que le premier contrôle soit le plus rapide possible. Cette méthode présente des inconvénients dans certaines situations (c.-à-d. que les hôtes lents à répondre peuvent être considérés comme hors service), mais vous aurez des contrôles d'hôte plus rapides si vous l'utilisez. Vous pouvez aussi utiliser un plugin plus rapide (c.-à-d. check_fping) dans le paramètre host_check_command plutôt que check_ping.
- Ne planifiez pas une vérification régulière des hôtes. Il ne faut PAS planifier des vérifications régulières d'hôtes à moins que ce ne soit absolument nécessaire. Il n'y a pas beaucoup de raisons de faire cela, car les vérifications d'hôtes sont effectuées à la demande lorsque c'est nécessaire. Pour désactiver la vérification régulière d'un hôte, mettez 0 à la directive check_interval dans la définition d'hôte. Si vous avez besoin de vérifier régulièrement les hôtes, essayez de mettre un intervalle de vérification plus grand et vérifiez que vos vérifications sont optimisées (voir plus haut).
- N'utilisez pas le contrôle agressif des hôtes. Sauf si Nagios a du mal à identifier les rétablissements d'hôte, je recommanderais de ne pas activer le paramètre use_aggressive_host_checking. Quand cette option est désactivée, les contrôles s'exécutent beaucoup plus vite, accélérant le traitement des résultats de contrôles de service. Cependant, les rétablissements d'hôtes peuvent être manqués en certaines circonstances lorsque l'option est désactivée. Par exemple, si un hôte se rétablit et que tous les services associés à cet hôte restent dans un état non-OK (et ne "bagotent" pas entre différents états non-OK), Nagios peut ne pas voir que l'hôte s'est rétabli. Certains utilisateurs peuvent avoir besoin d'activer cette option, mais ce n'est pas le cas pour la majorité, et je recommanderais de ne pas l'utiliser si vous n'en avez pas expressément besoin...
- Augmentez l'intervalle de vérification des commandes externes. Si vous gérez beaucoup de commandes externes (p. ex. des vérifications passives dans une supervision distribuée), vous devrez probablement affecter -1 au paramètre command_check_interval. Cela forcera Nagios à vérifier les commandes externes aussi souvent que possible. C'est important parce que la plupart des systèmes ont une petite taille de tampon pour les tubes de redirections [NdT : pipe] (c.-à-d. 4 Ko). Si Nagios ne lit pas les données depuis le tube le plus rapidement possible, l'application qui écrit dans le fichier de commandes externes (p. ex. le démon NSCA) se bloquera et attendra jusqu'à ce qu'il y ait assez d'espace libre dans le tube pour écrire ses données.
- Optimisez le matériel pour des performances maximales. La configuration matérielle va affecter directement les performances de votre système d'exploitation, et donc celles de Nagios. L'amélioration principale que vous puissiez réaliser concerne les disques durs. La vitesse du processeur et la mémoire affectent bien évidemment les performances, mais les accès disque seront votre goulet d'étranglement le plus fréquent. Ne stockez pas les plugins, le journal des états, etc. sur des disques lents (c.-à-d. des vieux disques IDE ou des montages NFS). Si vous en avez, utilisez des disques UltraSCSI ou des disques IDE rapides. Une remarque importante pour les utilisateurs de IDE/Linux : bien des installations de Linux n'essaient pas d'optimiser les accès au disque. Si vous ne changez pas les paramètres d'accès au disque (en utilisant un utilitaire comme hdparam), vous perdrez beaucoup des fonctionnalités améliorant la vitesse des nouveaux disques IDE.
Installation des plugins Nagios (client NAGIOS)
Service Passif NSCA
Nagios Service Check Acceptor, est un service dit passif, c'est a dire que c'est le client qui enverra a intervalle régulier les informations vers le serveur Nagios dédié (port 5667) via un cron.
Exemple script remonté en NSCA
Script dans le répertoire /usr/local/nagios/nsca
#!/bin/sh
SERVICE_NAME='Disk1 free space'
CHECK_NAME=`/usr/local/nagios/libexec/check_disk -w 5% -c 3% -x /dev/shm -x /mnt/backup`
# Arguments:
# $1 = host_name (Short name of host that the service is
# associated with) ==> SERVER_NAME
# $2 = svc_description (Description of the service) ==> SERICE_NAME
# $3 = state_string (A string representing the status of
# the given service - "OK", "WARNING", "CRITICAL"
# or "UNKNOWN")
# $4 = plugin_output (A text string that should be used
# as the plugin output for the service checks)
#
### MAIN ###
# pipe the service check info into the send_nsca program, which
# in turn transmits the data to the nsca daemon on the central
# monitoring server
if /bin/echo -e "$CHECK_NAME\n" | grep -q OK
then
STATUS=0
fi
if /bin/echo -e "$CHECK_NAME\n" | grep -q WARNING
then
STATUS=1
fi
if /bin/echo -e "$CHECK_NAME\n" | grep -q CRITICAL
then
STATUS=2
fi
if /bin/echo -e "$CHECK_NAME\n" | grep -q UNKNOWN
then
STATUS=-1
fi
/bin/echo -e "$1\t$SERVICE_NAME\t$STATUS\t$CHECK_NAME\n" | \
/usr/local/nagios/nsca/send_nsca tuxedo.fr -c /usr/local/nagios/nsca/send_nsca.cfg
Ensuite ajouté votre script dans ce fichier "/usr/local/nagios/nsca/submit_check.sh" :
#!/bin/sh SERVER_NAME=tuxedo.fr /usr/local/nagios/nsca/submit_check_disk.sh $SERVER_NAME /usr/local/nagios/nsca/submit_check_load.sh $SERVER_NAME /usr/local/nagios/nsca/submit_check_users.sh $SERVER_NAME
- Envoi des informations au serveur NAGIOS :
#> crontab -e
# Surveillance NAGIOS systeme hardware */8 * * * * /usr/local/nagios/nsca/submit_check.sh > /dev/null
Service Actif NRPE
Le plugin NRPE, Nagios Remote Plugin Executor, est un service dit actif, c'est a dire que le serveur Nagios enverra une demande au daemon NRPE (port 5666) afin de récupérer les informations nécessaire pour chaque service déclaré.
- Compilation et installation :
pré-requis: openssl libssl-dev gcc g++
nagiostest#> tar xvzf nrpe-2.0.tar.gz nagiostest#> cd nrpe-2.0 nagiostest#> ./configure && make all
nagiostest#> cp src/nrpe /usr/local/nagios/bin/nrpe nagiostest#> cp src/nrpe.cfg /usr/local/nagios/etc/nrpe.cfg
- Exemple de fichier nrpe.cfg :
############################################################################# # Sample NRPE Config File # Written by: Ethan Galstad (nagios@nagios.org) # # Last Modified: 11-23-2007 # # NOTES: # This is a sample configuration file for the NRPE daemon. It needs to be # located on the remote host that is running the NRPE daemon, not the host # from which the check_nrpe client is being executed. ############################################################################# # LOG FACILITY # The syslog facility that should be used for logging purposes. log_facility=daemon # PID FILE pid_file=/var/run/nrpe.pid server_port=5666 # SERVER ADDRESS # Address that nrpe should bind to in case there are more than one interface # and you do not want nrpe to bind on all interfaces. # NOTE: This option is ignored if NRPE is running under either inetd or xinetd #server_address=127.0.0.1 # NRPE USER # This determines the effective user that the NRPE daemon should run as. # You can either supply a username or a UID. # # NOTE: This option is ignored if NRPE is running under either inetd or xinetd nrpe_user=nagios # NRPE GROUP # This determines the effective group that the NRPE daemon should run as. # You can either supply a group name or a GID. # # NOTE: This option is ignored if NRPE is running under either inetd or xinetd nrpe_group=nagios # ALLOWED HOST ADDRESSES # This is an optional comma-delimited list of IP address or hostnames # that are allowed to talk to the NRPE daemon. # # Note: The daemon only does rudimentary checking of the client's IP # address. I would highly recommend adding entries in your /etc/hosts.allow # file to allow only the specified host to connect to the port # you are running this daemon on. # # NOTE: This option is ignored if NRPE is running under either inetd or xinetd allowed_hosts=127.0.0.1 dont_blame_nrpe=0 # COMMAND PREFIX # This option allows you to prefix all commands with a user-defined string. # A space is automatically added between the specified prefix string and the # command line from the command definition. # # *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! *** # Usage scenario: # Execute restricted commmands using sudo. For this to work, you need to add # the nagios user to your /etc/sudoers. An example entry for alllowing # execution of the plugins from might be: # # nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/ # # This lets the nagios user run all commands in that directory (and only them) # without asking for a password. If you do this, make sure you don't give # random users write access to that directory or its contents! # command_prefix=/usr/bin/sudo # DEBUGGING OPTION # This option determines whether or not debugging messages are logged to the # syslog facility. # Values: 0=debugging off, 1=debugging on debug=0 # COMMAND TIMEOUT # This specifies the maximum number of seconds that the NRPE daemon will # allow plugins to finish executing before killing them off. command_timeout=60 # CONNECTION TIMEOUT connection_timeout=300 # WEEK RANDOM SEED OPTION #allow_weak_random_seed=1 # INCLUDE CONFIG FILE #include=<somefile.cfg> # INCLUDE CONFIG DIRECTORY #include_dir=<somedirectory> #include_dir=<someotherdirectory> # COMMAND DEFINITIONS command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10 command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command[check_disk1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 500 -c 700 command[check_mem]=/usr/local/nagios/libexec/check_mem command[check_php_sess]=/usr/local/nagios/libexec/check_php_sess -c 100 -w 50 command[check_apacheconcreq]=/usr/local/nagios/libexec/check_apacheconcreq -w 50 -c 100 command[check_raid]=/usr/local/nagios/libexec/check_omreport command[check_hardware]=/usr/local/nagios/libexec/check_hardware command[check_factureAel]=/usr/local/nagios/libexec/check_factureAel.sh command[check_expCli]=/usr/local/nagios/libexec/check_expCli command[check_expMail]=/usr/local/nagios/libexec/check_expMail command[check_webserviceCOFACE]=/usr/local/nagios/libexec/check_webserviceCOFACE
- Démarrage du Daemon NRPE :
nagiostest#> cp init-script.debian /etc/init.d/nrpe && cd /etc/init.d && update-rc.d nrpe defaults nagiostest#> /etc/init.d/nrpe start
Exemple script remonté en NRPE
Script dans le répertoire /usr/local/nagios/libexec
#!/bin/bash
SERVICE_NAME="raid hard sous linux"
OMREPORT="/usr/sbin/omreport"
CHECK_NAME=`$OMREPORT storage vdisk | grep ^State | cut -d ":" -f 2 | sed -e 's/^\ //'`
NB_VDISKS=`$OMREPORT storage vdisk | grep ^ID | wc -l | awk '{ print $1 }' | tr -d '\n'`
CUR_STATUS=0
STATUS=0;
CUR_TXT=""
CUR_VDISK=1
VALID=`echo $CHECK_NAME | tr -d "[:space:]"`
if [ -z $VALID ];
then
STATUS="3"
else
for i in $CHECK_NAME
{
i=`echo $i | tr -d '\n'`
if [ $i != "Ready" ];
then
let CUR_STATUS=CUR_STATUS+1
fi
CUR_TXT="$CUR_TXT Pile $CUR_VDISK $i - "
let CUR_VDISK=CUR_VDISK+1
}
fi
if [ $CUR_STATUS -eq 0 ];
then
STATUS=0;
else
STATUS=2;
fi
CHECK_NAME="Etat du RAID pour $NB_VDISKS pile(s): "$CUR_TXT
/bin/echo -e "$CHECK_NAME"
exit $STATUS
Avantages & inconvénients
Agents NSCA/NRPE :
- Moins de processus pour l'agent NSCA!
Comparaison entre 2 méthodes d'utilisation :
NSCA EN MODE Daemon :
Résumé de la configuration de la VM :
- 4 processeurs
- 3 Go de RAM
NSCA EN MODE Xinetd :
Résumé de la configuration de la VM :
- 4 processeurs
- 3 Go de RAM
- Il est donc préférable d'utiliser l'agent NSCA en mode daemon.
Installation de NSClient++ pour Windows2003
L'ancienne version nsclient pour windows2000 ne fonctionne pas sous 2003 si l'accès est configuré avec mot de passe.
- Télécharger la dernière version en fonction du système s'il est 32 ou 64bits :
http://sourceforge.net/projects/nscplus
- L'installer sur le serveur puis éditer le fichier C:\Program Files\NSClient++\NSC.ini afin d'avoir l'équivalent de :
En version 64bits, le fichier est C:\Program Files (x86)\NSClient++\NSC.ini
[modules] CheckDisk.dll NSClientListener.dll ;dans notre cas, il n'y a que le checkdisk, vous pouvez avoir à activer aussi CheckSystem.dll [Settings] password=xxxx use_file=1 [NSClient] allowed_hosts=195.200.114.8/32 port=1248 bind_to_address= socket_timeout=30
- Relancer le service NSClientpp
- Tester sur le serveur nagios ainsi :
/usr/local/nagios/libexec/check_nt -H tuxedo.fr -s motdepasse -v USEDDISKSPACE -l c -w 10% -c 5%
Résultat :
c:\ - total: 12.19 Gb - used: 6.79 Gb (56%) - free 5.40 Gb (44%) | 'c:\ Used Space'=6.79Gb;1.22;0.61;0.00;12.19
Vérification du fonctionnement depuis le serveur Nagios
Connectez vous en ssh au serveur nagios, et lancez le script check_megaraid, placé dans /usr/local/nagios/libexec avec les arguments -H [nom de la machine sur laquelle vous voulez effectuer le test].
Vous pouvez avoir les réponses suivantes :
- megaraid UNKNOWN - snmp query timed out : Vérifiez que snmpd et percsnmp sont bien lancés sur la machine à contrôler.
- megaraid UNKNOWN - no data received : Vérifiez la configuration de snmpd et/ou percsnmp.
- megaraid OK : Tout est correct, le RAID fonctionne parfaitement.
- Si la réponse commence par megaraid CRITICAL : Cela veut dire que le RAID ne fonctionne pas correctement sur la machine testée, et qu'il faut songer à une vérification approfondie.
Problèmes courants avec Nagios et Nagiosgraph
Cette partie contient les problèmes récurrents que l'on peut rencontrer sous nagios et nagiosgraph.
Graphes incomplets
Si les graphes présentent des trous, cela peut provenir du "heartbeat" qui peut être réglé trop bas.
La commande suivante peut résoudre ce problème :
rrdtool tune [fichier RRD] --heartbeat [metrique concernée]:[nouveau heartbeat en secondes]
La métrique est le nom associé a une des courbes du graphe.
Pour voir la liste des métriques pour un graphe, la commande est la suivante
rrdtool tune [fichier RRD]
Le heartbeat est la durée maximale entre deux points. Si le heartbeat est trop bas, nagiosgraph et rrdtools consideront qu'il n'y a pas de données, ils vont créer une donnée vide, qui se traduit par un "trou" dans le graph.
Attention, pour un fichier rrd, il est conseillé d'utiliser une seule valeur de heartbeat, au risque d'avoir des courbes incorrectes.
Script pour changer le heartbeat de tous les fichier rrd :
#!/bin/bash
#
# Argument $1 : Chemin du dossier contenant les fichiers rrd
# Argument $2 : nouveau heartbeat en secondes
#
if [ $# -lt 2 ]; then
echo "Usage : "$0" [Chemin du dossier contenant les rrd] [heartbeat en secondes]"
exit 2
fi
for graph in $1/*.rrd; do
for metric in `rrdtool tune $graph | cut -d "]" -f 1 | cut -d "[" -f 2`; do
rrdtool tune $graph --heartbeat $metric:$2
done
done
Check particuliers
Vérification de la date d'expiration d'un certificat SSL
Le binaire "check_http" permet de vérifier la date d'expiration d'un certificat SSL, une alerte sera émise si le nombre de jours restants est inférieur au nombre de jours demandés,
Exemple d'utilisation pour vérifier que le certificat sur "tuxedo.fr" n'expire pas avant 30 jours:
/usr/local/nagios/libexec/check_http -H tuxedo.fr -C 30
En cas de problème il faut vérifier la version de "check_http", la 1.4.12 (disponible sur nagios2) a été testée fonctionnelle, la version 1.4-beta1 renvoyait elle des codes "302" et n'était pas fonctionnelle.




