Nagios dédié

From Tuxunix
Jump to: navigation, search

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 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 :

AgentsNagios.jpg


  • 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

NscaModeDaemon.jpg

NSCA EN MODE Xinetd :

Résumé de la configuration de la VM :

- 4 processeurs

- 3 Go de RAM


Exemple.jpg


  • 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.