Nagios : Installation et configuration

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Nagios

Software version Nagios 3
Operating System Debian 6
Website
Last Update 08/09/2014
Others

1 Introduction

Nagios est un utilitaire très puissant permettant de tester via des plugins divers services tel que le SMTP, le PING et bien d'autres choses. Ca vous permet de savoir si vos plateformes sont toujours en service.
Bref, il est capable de vous alerter sous différentes formes. Essayez, vous allez voir, c'est magique :-)

2 Installation

Pour l'installation c'est assez simple :

Command aptitude
aptitude install nagios3

3 Configuration

La configuration par contre ça se complique. Il faut savoir que Nagios est difficile à abordé, mais une fois que vous avez compris, vous gagnez beaucoup de temps et pouvez déployer de nouveaux services avec facilité.

3.1 apache2.conf

Ceci est la configuration qui est fourni en standard Debian pour apache2. Ca vous permet d'accéder à Nagios via http://serveur/nagios3. A vous de voir si vous souhaitez modifier la configuration ou pas :

Configuration File /etc/nagios3/apache2.conf
# apache configuration for nagios 3.x
# note to users of nagios 1.x and 2.x:
#	throughout this file are commented out sections which preserve
#	backwards compatibility with bookmarks/config for older nagios versios.
#	simply look for lines following "nagios 1.x:" and "nagios 2.x" comments.
 
ScriptAlias /cgi-bin/nagios3 /usr/lib/cgi-bin/nagios3
ScriptAlias /nagios3/cgi-bin /usr/lib/cgi-bin/nagios3
# nagios 1.x:
#ScriptAlias /cgi-bin/nagios /usr/lib/cgi-bin/nagios3
#ScriptAlias /nagios/cgi-bin /usr/lib/cgi-bin/nagios3
# nagios 2.x: 
#ScriptAlias /cgi-bin/nagios2 /usr/lib/cgi-bin/nagios3
#ScriptAlias /nagios2/cgi-bin /usr/lib/cgi-bin/nagios3
 
# Where the stylesheets (config files) reside
Alias /nagios3/stylesheets /etc/nagios3/stylesheets
# nagios 1.x:
#Alias /nagios/stylesheets /etc/nagios3/stylesheets
# nagios 2.x:
#Alias /nagios2/stylesheets /etc/nagios3/stylesheets
 
# Where the HTML pages live
Alias /nagios3 /usr/share/nagios3/htdocs
# nagios 2.x: 
#Alias /nagios2 /usr/share/nagios3/htdocs
# nagios 1.x:
#Alias /nagios /usr/share/nagios3/htdocs
 
<DirectoryMatch (/usr/share/nagios3/htdocs|/usr/lib/cgi-bin/nagios3|/etc/nagios3/stylesheets)>
	Options FollowSymLinks
 
	DirectoryIndex index.php
 
	AllowOverride AuthConfig
	Order Allow,Deny
	Allow From All
 
	AuthName "Nagios Access"
	AuthType Basic
	AuthUserFile /etc/nagios3/htpasswd.users
	# nagios 1.x:
	#AuthUserFile /etc/nagios/htpasswd.users
	require valid-user
</DirectoryMatch>
 
# Enable this ScriptAlias if you want to enable the grouplist patch.
# See http://apan.sourceforge.net/download.html for more info
# It allows you to see a clickable list of all hostgroups in the
# left pane of the Nagios web interface
# XXX This is not tested for nagios 2.x use at your own peril
#ScriptAlias /nagios3/side.html /usr/lib/cgi-bin/nagios3/grouplist.cgi
# nagios 1.x:
#ScriptAlias /nagios/side.html /usr/lib/cgi-bin/nagios3/grouplist.cgi

3.2 cgi.cfg

Je vous épargne tous les commentaires de ce fichier et vous montre la configuration que j'utilise. Ceci est la configuration pour l'interface web de Nagios :

Configuration File /etc/nagios3/cgi.cfg
main_config_file=/etc/nagios3/nagios.cfg
physical_html_path=/usr/share/nagios3/htdocs
url_html_path=/nagios3
show_context_help=1
use_pending_states=1
nagios_check_command=/usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/sbin/nagios3'
use_authentication=1
use_ssl_authentication=0 
authorized_for_system_information=deimos
authorized_for_configuration_information=deimos
authorized_for_system_commands=deimos
authorized_for_all_services=deimos
authorized_for_all_hosts=deimos
authorized_for_all_service_commands=deimos
authorized_for_all_host_commands=deimos
default_statusmap_layout=5
default_statuswrl_layout=4
ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
refresh_rate=90
escape_html_tags=1
action_url_target=_blank
notes_url_target=_blank
lock_author_names=1

3.3 commands.cgi

Ce fichier permet de définir des commandes particiulières pour des check particuliers. Par exemple si vous avez développé des plugins, vous devrez créer une commande associée :

Configuration File /etc/nagios3/commands.cfg
###############################################################################
# COMMANDS.CFG - SAMPLE COMMAND DEFINITIONS FOR NAGIOS 
###############################################################################
 
################################################################################
# NOTIFICATION COMMANDS
################################################################################
 
# 'notify-host-by-email' command definition
define command{
	command_name	notify-host-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
	}
 
# 'notify-service-by-email' command definition
define command{
	command_name	notify-service-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
	}
 
################################################################################
# HOST CHECK COMMANDS
################################################################################
 
# On Debian, check-host-alive is being defined from within the
# nagios-plugins-basic package
 
################################################################################
# PERFORMANCE DATA COMMANDS
################################################################################
 
# 'process-host-perfdata' command definition
define command{
	command_name	process-host-perfdata
	command_line	/usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/lib/nagios3/host-perfdata.out
	}
 
# 'process-service-perfdata' command definition
define command{
	command_name	process-service-perfdata
	command_line	/usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/lib/nagios3/service-perfdata.out
	}

3.4 htpasswd.users

Voici le htpasswd de Nagios. Pour changer le login nagiosadmin qui existe par défaut, faite :

Command htpasswd
htpasswd -c htpasswd.users deimos

A vous de remplacer deimos par l'utilisateur que vous souhaitez. Attention toute fois, ceci va créer un fichier vierge et créer cet utilisateur unique.

3.5 nagios.cfg

Ceci est la configuration du serveur Nagios, mais pas la configuration des hosts et services :

Configuration File /etc/nagios3/nagios.cfg
log_file=/var/log/nagios3/nagios.log
cfg_file=/etc/nagios3/commands.cfg
cfg_dir=/etc/nagios-plugins/config
cfg_dir=/etc/nagios3/conf.d
object_cache_file=/var/cache/nagios3/objects.cache
precached_object_file=/var/lib/nagios3/objects.precache
resource_file=/etc/nagios3/resource.cfg
status_file=/var/cache/nagios3/status.dat
status_update_interval=10
nagios_user=nagios
nagios_group=nagios
check_external_commands=1
command_check_interval=-1
command_file=/var/lib/nagios3/rw/nagios.cmd
external_command_buffer_slots=4096
lock_file=/var/run/nagios3/nagios3.pid
temp_file=/var/cache/nagios3/nagios.tmp
temp_path=/tmp
event_broker_options=-1
log_rotation_method=d
log_archive_path=/var/log/nagios3/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
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=/var/lib/nagios3/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
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=/var/lib/nagios3/retention.dat
retention_update_interval=60
use_retained_program_state=1
use_retained_scheduling_info=1
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
check_for_updates=1
bare_update_check=0
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
enable_event_handlers=1
process_performance_data=0
obsess_over_services=0
obsess_over_hosts=0
translate_passive_host_checks=0
passive_host_checks_are_soft=0
check_for_orphaned_services=1
check_for_orphaned_hosts=1
check_service_freshness=1
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=iso8601
p1_file=/usr/lib/nagios3/p1.pl
enable_embedded_perl=1
use_embedded_perl_implicitly=1
illegal_object_name_chars=`~!$%^&*|'"<>?,()=
illegal_macro_output_chars=`~$&|'"<>
use_regexp_matching=0
use_true_regexp_matching=0
admin_email=root@localhost
admin_pager=pageroot@localhost
daemon_dumps_core=0
use_large_installation_tweaks=0
enable_environment_macros=1
debug_level=0
debug_verbosity=1
debug_file=/var/log/nagios3/nagios.debug
max_debug_file_size=1000000

3.6 resource.cfg

Configuration File /etc/nagios3/nagios.cfg
...
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/lib/nagios/plugins
...

3.7 conf.d/contacts.cfg

Les contacts servent à définir les contacts et groupes de contact

Configuration File /etc/nagios3/conf.d/contacts
define contact{
        contact_name                    deimos
        alias                           Deimos
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           deimos@deimos.fr
        }
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 deimos
        }

3.8 conf.d/custom-commands.cfg

Je parlais plus haut des commandes personnalisées. En voici une que j'ai réaliser pour tester la réplication MySQL. Ceci me permettra de lancer la réplication via la commande check_mysqlrep :

Configuration File /etc/nagios3/conf.d/custom-commands.cfg
##############################
#   CUSTOM NAGIOS COMMANDS   #
##############################
 
define command{
    command_name	check_mysqlrep
    command_line	/usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$ -S
}

3.9 conf.d/generic-host.cfg

Ce fichier sert à donner la configuration générique pour les hosts, les intervales de notification etc... je vous laisse regarder la documentation officielle :

Configuration File /etc/nagios3/conf.d/generic-host.cfg
# Generic host definition template - This is NOT a real host, just a template!
 
define host{
        name                            generic-host    ; The name of this host template
        notifications_enabled           1       ; Host notifications are enabled
        event_handler_enabled           1       ; Host event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        failure_prediction_enabled      1       ; Failure prediction is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
	check_command                   check-host-alive
	max_check_attempts              10
	notification_interval           0
	notification_period             24x7
	notification_options            d,u,r
	contact_groups                  admins
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
        _PROCWARN                       150
        _PROCCRIT                       200
        }

3.10 conf.d/generic_service.cfg

Ce fichier sert à donner la configuration générique pour les services, les intervales de notification etc... je vous laisse regarder la documentation officielle :

Configuration File /etc/nagios3/conf.d/generic_service.cfg
define service{
        name                            generic-service ; The 'name' of this service template
        active_checks_enabled           1       ; Active service checks are enabled
        passive_checks_enabled          1       ; Passive service checks are enabled/accepted
        parallelize_check               1       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Service notifications are enabled
        event_handler_enabled           1       ; Service event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        failure_prediction_enabled      1       ; Failure prediction is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
		notification_interval           0		; Only send notifications on status change by default.
		is_volatile                     0
		check_period                    24x7
		normal_check_interval           3
		retry_check_interval            1
		max_check_attempts              3
		notification_period             24x7
		notification_options            w,u,c,r
		contact_groups                  admins
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

3.11 conf.d/timeperiods.cfg

Ce fichier sert à définir des template pour les périodes de notification :

Configuration File /etc/nagios3/conf.d/timeperiods.cfg
###############################################################################
# timeperiods.cfg
###############################################################################
 
# This defines a timeperiod where all times are valid for checks, 
# notifications, etc.  The classic "24x7" support nightmare. :-)
 
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
        }
 
# Here is a slightly friendlier period during work hours
define timeperiod{
        timeperiod_name workhours
        alias           Standard Work Hours
        monday          09:00-17:00
        tuesday         09:00-17:00
        wednesday       09:00-17:00
        thursday        09:00-17:00
        friday          09:00-17:00
        }
 
# The complement of workhours
define timeperiod{
        timeperiod_name nonworkhours
        alias           Non-Work Hours
        sunday          00:00-24:00
        monday          00:00-09:00,17:00-24:00
        tuesday         00:00-09:00,17:00-24:00
        wednesday       00:00-09:00,17:00-24:00
        thursday        00:00-09:00,17:00-24:00
        friday          00:00-09:00,17:00-24:00
        saturday        00:00-24:00
        }
 
# This one is a favorite: never :)
define timeperiod{
        timeperiod_name never
        alias           Never
        }
 
# end of file

3.12 conf.d/hostgroups/unix-srv.cfg

Voici un exemple de configuration pour un hostgroup. Il suffira ensuite d'associer un host à ce hostgroup pour qu'il récupère tous les services décrit ci dessous :

Configuration File /etc/nagios3/conf.d/hostgroups/unix-srv.cfg
# Some generic hostgroup definitions
 
define hostgroup {
    hostgroup_name  unix-srv
    alias           Unix servers
}
 
# Define a service to check the disk space of the root partition
# on the local machine.  Warning if < 20% free, critical if
# < 10% free space on partition.
 
define service{
    use                             generic-service
    hostgroup_name                  unix-srv
    service_description             Disk Space
    check_command                   check_nrpe!check_all_disks!20%!10%
}
 
# Define a service to check the number of currently logged in
# users on the local machine.  Warning if > 20 users, critical
# if > 50 users.
 
define service{
    use                             generic-service         ; Name of service template to use
    hostgroup_name                  unix-srv
    service_description             Current Users
    check_command                   check_nrpe!check_users!2!3
}
 
# Define a service to check the number of currently running procs
# on the local machine.  Warning if > 250 processes, critical if
# > 400 processes.
 
define service{
    use                             generic-service         ; Name of service template to use
    hostgroup_name                  unix-srv
    service_description             Total Processes
    check_command                   check_nrpe!check_procs!$_HOSTPROCWARN$!$_HOSTPROCCRIT$
}
 
# Check Zombie process
define service{
    use                             generic-service         ; Name of service template to use
    hostgroup_name                  unix-srv
    service_description             Zombie Processes
    check_command                   check_nrpe!check_zombie_procs!2!3
}
# Define a service to check the load on the local machine. 
 
define service{
    use                             generic-service         ; Name of service template to use
    hostgroup_name                  unix-srv
    service_description             Current Load
    check_command                   check_nrpe!check_load!5.0,4.0,3.0!10.0,6.0,4.0
}
 
# check that ssh services are running
define service{
    use                             generic-service
    hostgroup_name                  unix-srv
    service_description             SSH Servers
    check_command                   check_ssh
}

3.13 conf.d/hosts/serveur.cfg

Et ici je déclare un host et associe unix-srv déclaré plus haut pour qu'il hérite des services ci dessus :

Configuration File /etc/nagios3/conf.d/hosts/serveur.cfg
define host{
    use                     generic-host
    host_name               server.deimos.fr
    alias                   server
    address                 server.deimos.fr
    hostgroups              unix-srv
    _PROCWARN               280
    _PROCCRIT               350
}

Ici j'utilise des variables (_PROCWARN et _PROCCRIT) qui passent à travers les valeurs par défaut (Voir la documentation pour plus d'infos). Vous devez ajouter comme dans la documentation HOST ($_HOSTPROCWARN$ et $_HOSTPROCCRIT$) uniquement pour la partie déclaration de commande.

Si vous souhaitez une configuration plus complète, je vous joint une archive avec une configuration Nagios3 plus complète : Nagios configuration

4 Addons

4.1 NRPE

Nous devons configurer le check NRPE pour qu'il prenne en compte plusieurs arguments. Sinon de base, nous serons limités à 1. Editez le fichier suivant et ajouter y le nombre nécessaire d'arguments :

Configuration File /etc/nagios-plugins/config/check_nrpe.cfg
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
    command_name    check_nrpe
    command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$ $ARG7$ $ARG8$ $ARG9$
}
 
# this command runs a program $ARG1$ with no arguments
define command {
    command_name    check_nrpe_1arg
    command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Ici je suis allé jusqu'à 9, mais de mémoire vous pouvez aller jusqu'à 32 arguments.

4.2 Cacher des alertes "non OK"

Il existe une solution simple pour ne pas afficher certaines alertes qui vous pourissent un peu l'existance, comme par exemple si comme moi vous avez pas loin de 1500 alertes, que vous avez un écran 107cm juste pour Nagios et que certaines alertes vous prennent trop de place et ne peuvent être résolues rapidement (ex un check de backup par semaine qui a foiré).

Donc la solution se fait via l'interface graphique en acknoledgeant (oui, du verbe acknoledger !) les services que vous le voulez plus voir. Ainsi, elles seront cachés et lorsqu'elles reviendront OK, elles s'afficheront de nouveau et l'acknoledge disparaitra.

Ensuite dans l'url de votre navigateur, il va falloir la modifier un peu afin de lui demander de ne pas afficher les alertes acknoledgées. En parcourant les sources du cgi, on peut trouver ce type d'infos :

Command grep SERVICE_ include/cgiutils.h.in
#define SERVICE_SCHEDULED_DOWNTIME	1
#define SERVICE_NO_SCHEDULED_DOWNTIME	2
#define SERVICE_STATE_ACKNOWLEDGED	4
#define SERVICE_STATE_UNACKNOWLEDGED	8
#define SERVICE_CHECKS_DISABLED		16
#define SERVICE_CHECKS_ENABLED		32
#define SERVICE_EVENT_HANDLER_DISABLED	64
#define SERVICE_EVENT_HANDLER_ENABLED	128
#define SERVICE_FLAP_DETECTION_ENABLED	256
#define SERVICE_FLAP_DETECTION_DISABLED	512
#define SERVICE_IS_FLAPPING		1024
#define SERVICE_IS_NOT_FLAPPING		2048
#define SERVICE_NOTIFICATIONS_DISABLED	4096
#define SERVICE_NOTIFICATIONS_ENABLED	8192
#define SERVICE_PASSIVE_CHECKS_DISABLED	16384
#define SERVICE_PASSIVE_CHECKS_ENABLED	32768
#define SERVICE_PASSIVE_CHECK           65536
#define SERVICE_ACTIVE_CHECK            131072
#define SERVICE_HARD_STATE		262144
#define SERVICE_SOFT_STATE		524288

PS : j'ai pris ces lignes des sources de Nagios 3, il y a quelques petites choses en moins pour la version 2 et 1.

Voici un exemple d'url avec les correspondances :

http://nagioshost/cgi-bin/nagios3/status.cgi?host=all&servicestatustypes=28&serviceprops=8
  • servicestatustypes=28 : tous les états sauf OK
  • serviceprops=8 : Enlève les états d'acknoledge

Et un petit + maintenant, si vous souhaitez ne pas voir le résumé des infos situé en haut de la page (cacher le header), voici l'option '&noheader' :

http://nagioshost/cgi-bin/nagios3/status.cgi?host=all&servicestatustypes=28&serviceprops=8&noheader

4.3 Ajouter un CGI personnalisé

Dans certains cas, vous pouvez avoir certains checks qui stockent temporairement des informations sur le serveur Nagios et vous souhaitez pouvoir exécuter des actions depuis l'interface Nagios. Pour cela, il existe l'option 'action_url' sur lequel nous allons pouvoir lui donner une URL ou se trouve un cgi qui exécutera ce que l'on veut, avec pourquoi pas des options.

Pour commencer, nous allons créer notre CGI. Voici un exemple minimaliste ou je supprime un fichier temporaire :

Configuration File /usr/lib/cgi-bin/nagios3/remove.cgi
#!/usr/bin/perl 
 
use CGI;
$query = CGI::new();
$host = $query->param("host");
 
# Avoid inputing special characters that would crash the program
if ( $h =~ /\`|\~|\@|\#|\$|\%|\^|\&|\*|\(|\)|\:|\=|\+|\"|\'|\;|\<|\>/ ) { 
    print "Illegal special chars detected. Exit\n";
    exit(1);
}
 
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><Title>Removing $host temporary file</Title>\n";
print "<LINK REL='stylesheet' TYPE='text/css' HREF='/nagios/stylesheets/common.css'><LINK REL='stylesheet' TYPE='text/css' HREF='/nagios/stylesheets/status.css'>\n";
print "</HEAD><BODY>\n";
print "Removing $host Interface Network Flapping temporary file...";
if (-f "/tmp/iface_state_$host.txt")
{
    unlink("/tmp/iface_state_$host.txt") or print "FAIL<br />/tmp/iface_state_$host.txt : $!\n" and exit(1);
    print "OK\n";
}
else
{
    print "FAIL<br />/tmp/iface_state_$host.txt : No such file or directory\n";
}
print "</body></html>\n";

Et puis dans la configuration du service en question, j'insère mon 'action_url' :

Configuration File nagios_config.cfg
define service{
         use                             generic-services-ulsysnet
         hostgroup_name                  network
         service_description             Interface Network Flapping
         check_period                    24x7
         notification_period             24x7
 	 _SNMP_PORT			 161
	 _SNMP_COMMUNITY		         public
         _DURATION			 86400
         check_command                   check_interface_flapping
         # For Thruk & Nagios	 # action_url			 ../../cgi-bin/nagios3/remove.cgi?host=$HOSTADDRESS$         # For Nagios only                        action_url			 remove.cgi?host=$HOSTADDRESS$}

Il ne vous reste plus qu'à reloader Nagios.

4.4 Envoyer des alertes SMS via Free Mobile

Merci à Free Mobile de nous offrir la possibilité d'envoyer des SMS via une API (activable depuis l'interface web de son compte). Comment cela fonctionne ? Il suffit de créer dans le dossier de configuration un dossier scripts et mettre le contenu de ce script dedans:

Configuration File /etc/nagios3/scripts/send_sms.sh
#!/bin/bash
message="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "Naemon $1: $2 on $3 $4 ($5)")"
curl --insecure "https://smsapi.free-mobile.fr/sendmsg?user=<userid>&pass=<password>&msg=$message"

Adaptez les champs 'userid' et 'password' avec vos paramètres personnels (ces identifiants sont disponible depuis l'interface web Free Mobile). Maintenant créez les contacts et contactgroups associés:

Configuration File /etc/nagios3/conf.d/contacts.cfg
define contact {
  contact_name                   oncall-sms                         ; Short name of user
  alias                          oncall-sms                        ; Full name of user
  use                            contact-sms                     ; Inherit default values from generic-contact template (defined above)
}
 
define contactgroup {
  contactgroup_name              admins-sms
  alias                          Nagios Administrators SMS
  members                        oncall-sms
}

Ajoutez les commandes nécessaires, capable d'appeler le script:

Configuration File /etc/nagios3/conf.d/commands.cfg
# 'notify-host-by-sms' command definition
define command {
  command_name                   notify-host-by-sms
  command_line                   /etc/naemon/scripts/send_sms.sh $SHORTDATETIME$ $NOTIFICATIONTYPE$ $HOSTNAME$/$SERVICEDESC$ $HOSTSTATE$ $HOSTOUTPUT$
}
 
# 'notify-service-by-sms' command definition
define command {
  command_name                   notify-service-by-sms
  command_line                   /etc/naemon/scripts/send_sms.sh $SHORTDATETIME$ $NOTIFICATIONTYPE$ $HOSTNAME$/$SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$
}

Configuration File /etc/nagios3/conf.d/templates/contacts.cfg
define contact {
  name                           contact-sms                     ; The name of this contact template
  host_notification_commands     notify-host-by-sms                ; send host notifications via email
  host_notification_options      d,u,r                           ; send notifications for all host states, flapping events, and scheduled downtime events
  host_notification_period       24x7                                ; host notifications can be sent anytime
  register                       0                                   ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
  service_notification_commands  notify-service-by-sms             ; send service notifications via email
  service_notification_options   u,c,r                         ; send notifications for all service states, flapping events, and scheduled downtime events
  service_notification_period    24x7                                ; service notifications can be sent anytime
}


Et pour finir le service escalation, afin de notifier tout le monde par SMS s'il n'y a pas eu d'action assez rapide:

Configuration File /etc/nagios3/conf.d/escalation.cfg
define serviceescalation {
	host_name              *
	service_description    *
	first_notification     3
	last_notification      4
	notification_interval  0
	contact_groups         admins,admins-sms
}

Bien entendu, tout ceci n'est qu'un exemple et il faudra certainement adapter à vos besoins.

5 FAQ

5.1 No output returned from plugin

5.1.1 Solution 1

Si vous rencontrez ce type d'erreurs, c'est que vous n'avez pas activé les arguments au niveau de la configuration d'NRPE. Dans le fichier de configuration d'nrpe /etc/nagios/nrpe.cfg, passez cette valeur :

Configuration File /etc/nagios/nrpe.cfg
dont_blame_nrpe=0

à 1 :

Configuration File /etc/nagios/nrpe.cfg
dont_blame_nrpe=1

Ensuite redémarrez nrpe et c'est parti :-)

5.1.2 Solution 2

J'ai eu ce problème et ai chercher un moment avant de trouver. Cela vient d'NRPE et pour la configuration de l'hôte en question, remplacez par exemple ceci :

check_nrpe!check_disk_c

par

check_nrpe_1arg!check_disk_c

La différence c'est que :

  • check_nrpe : prends des arguements
  • check_nrpe_1arg : ne prends pas d'arguments

5.2 Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!

5.2.1 Solution 1

Ce genre d'erreur existe parceque tout simplement vous n'avez pas les droits, donc pour résoudre ce problème :

Command chmod
chmod -Rf a+rx /var/lib/nagios3

Ou sinon :

Command chown
chown nagios.www-data /var/lib/nagios3/rw/nagios.cmd

5.2.2 Solution 2

Petit problème de droits sous Debian généralement, voici la solution ! Exécutez en root ces commandes :

Command dpkg-statoverride
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
chmod -Rf a+rx /var/lib/nagios3
chown nagios.www-data /var/lib/nagios3/rw/nagios.cmd

5.3 Je ne recoit pas de mails

Il faut vérifier si la commande mail est bien présente command.cfg et surtout avec le bon PATH. Par exemple avec Debian, j'ai rencontré un petit problème et ce simple lien symbolique a résolu le problème :

Command ln
ln -s /usr/bin/mail /bin/mail


5.4 return code of 127 is out of bounds

C'est certainement du à une erreur de droit (exécution du plugins) ou bien parceque vous n'indiquez pas le path complet de l'éxécutable que vous souhaitez lancer. Oubliez $USER1$, pour moi ça ne fonctionne pas très bien. Après quelques reload de Nagios, ça se remet à déconner, donc utilisez le full path.

5.5 CHECK_NRPE: Error - Could not complete SSL handshake.

Je parie que c'est parce que vous n'avez pas les droits ! Un petit telnet sur le port 5666 de votre serveur en dira long. Modifiez ensuite la ligne allowed_hosts du nrpe.cfg et tout devrait rentrer dans l'ordre :-)

5.6 Monitorer Wordpress

Wordpress a une petite particularité avec le check_http, c'est qu'il faut lui faire suivre les liens (option "follow"). Voici un exemple de check :

Configuration File commands.cfg
define command{
    command_name    check_blog
    command_line    /usr/lib/nagios/plugins/check_http -H 'www.deimos.fr' -u '/blog/index.php' -s 'Parce que la mémoire humaine ne fait pas des Go' -f follow
}

5.7 You don't have permission to access /nagios3/ on this server

Si comme moi après une msie à jour de Debian (5 -> 6) vous avez ce message, il faut remplacer "index.html" par "index.php" :

Configuration File /etc/apache2/conf.d/nagios3.conf
 ...
 DirectoryIndex index.php
 ...

Puis on redémarre le service :

Command
/etc/init.d/apache2 restart

5.8 Mes checks en attente sont toujours là même après un reboot

Il peut arriver d'avoir des soucis sur sa machine Nagios et les checks qui doivent être fait, restent actifs, même après un reboot. C'est tout simplement du au fait que Nagios les garde en mémoire pour pouvoir les réexécuter plus tard. Pour purger cette queue, modifiez ceci dans la configuration de Nagios, redémarrez le, puis repassez le paramètre à 1 :

Configuration File /etc/nagios3/nagios.cfg
[...]
retain_state_information=0
[...]

6 Ressources

Documentation Nagios sur OpenBSD
http://www.mail-archive.com/nagios-users@lists.sourceforge.net/msg04394.html
Documentation Nagios