Ce post fait suite à celui sur l’installation de Nagios sur une machine Linux. Nous allons y décrire les fichiers de configurations nécessaires pour surveiller (« to monitor ») un réseau simple comporant: une machine client, une machine serveur avec un serveur Web et une serveur FTP et une liaison Internet.
Note: les fichiers de configurations données en exemple dans ce post se basent sur la version 2.8 de Nagios.
Sous Fedora Linux, les fichiers de configurations de Nagios se trouvent dans le répertoire /etc/nagios/ (/usr/local/etc/nagios sous BSD). Le fichier nagios.cfg définie l’ensemble des sous fichiers de configurations grâce aux variables cfg_file:
…
#cfg_file=/etc/nagios/localhost.cfg
cfg_file=/usr/local/etc/nagios/timeperiods.cfg
cfg_file=/usr/local/etc/nagios/contacts.cfg
cfg_file=/usr/local/etc/nagios/contactgroups.cfg
cfg_file=/usr/local/etc/nagios/hosts.cfg
cfg_file=/usr/local/etc/nagios/services.cfg
cfg_file=/usr/local/etc/nagios/hostgroups.cfg
…
Il faut également configurer le fichier cgi.cfg (en partant de cgi.cfg-sample):
authorized_for_system_information=admin
authorized_for_configuration_information=admin
authorized_for_system_commands=admin
authorized_for_all_services=admin
authorized_for_all_hosts=admin
authorized_for_all_service_commands=admin
authorized_for_all_host_commands=admin
Définition des plages horaires
La première étape consiste à définir les périodes de temps que nous allons pouvoir utiliser dans les autres fichiers de configurations. Pour simplifier, nous allons juste créer la période 24×7 (tout les jours, toutes les heures…). Pour cela, il faut éditer le fichier /usr/local/etc/nagios/timeperiods.cfg:
# Time periods definitions
##########################
# 7d/7 24h/24
define timeperiod {
timeperiod_name 24×7
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
}
Définition des contacts
Nous allons ensuite définir les contacts. C’est à dire les personnes devant être prevenu par un moyen ou un autre (mail, SMS…) quand une alerte est générée par Nagios (par exemple quand votre serveur Web ne répond plus).
Il faut pour cela modifier deux fichiers, /usr/local/etc/nagios/contacts.cfg pour la définition du/des contacts:
# Contacts defintions
#####################
define contact {
contact_name                    nico
alias                           Nicolas
host_notification_period        24×7
service_notification_period     24×7
host_notification_options       d,u,r
service_notification_options    w,u,c,r
host_notification_commands      host-notify-by-email
service_notification_commands   notify-by-email
email                           nico@votreadressemail.com
}
Nous venons donc de créer un contact nommé « nico » qui sera joingnable 24 heures sur 24, 7 jours sur 7 par mail.
Le deuxième fichier (/usr/local/etc/nagios/contactgroups.cfg) permet d’intégrer le nouvel utilisateur dans un groupe:
# Contacts groups definition
############################
define contactgroup {
contactgroup_name       admins
alias                   Administrators
members                 nico
}
Nous avons donc ajouté « nico » dans le groupe « admins ».
Définition des machines à surveiller
Entrons dans le vif du sujet en déclarant les machines que l’on veut surveiller. Cette définition sefait dans le fichier /usr/local/etc/nagios/hosts.cfg:
On commence le fichier en définissant un template:
# Nagios server – Hosts definitions
###################################
# Templates
#———-
define host{
name template-host
check_command                   check-host-alive
max_check_attempts              2
check_interval                  5
active_checks_enabled           1
passive_checks_enabled          0
check_period                    24×7
notification_interval           60
notification_period             24×7
obsess_over_host                0
check_freshness                 0
event_handler_enabled           0
flap_detection_enabled          0
process_perf_data               0
retain_status_information       1
retain_nonstatus_information    1
contact_groups                  admins
register                        0
}
Puis on ajoute la définition pour notre routeur d’accès à Internet (Freebox, 9box, OrangeBox, Trucbox…):
# Ma box
#————
define host{
use                     template-hosts
host_name               monrouteuramoi
alias                   Mon routeur à moi c’est une Freebox
address                 192.168.100.254
}
celle de mon PC client:
# Mon PC client
#————
define host{
use                     template-hosts
host_name               monpcamoi
alias                   Mon MacBook Pro à moi
address                 192.168.100.2
}
et enfin celle de mon serveur:
# Mon serveur
#————
define host{
use                     template-hosts
host_name               monserveuramoi
alias                   Mon serveur Linux à moi
address                 192.168.100.1
}
on termine en surveillant la liaison Internet (pour cela on va pinguer un serveur Web):
# Mon liaison Internet
#————
define host{
use                     template-hosts
host_name               maliaisonamoi
alias                   Ma liaison ADSL à moi
address                 www.free.fr
parents              monrouteuramoi
}
Vous pouvez remarquer dans cette dernière définition que nous avons définie « monrouteuramoi » comme père de ma « maliaisonamoi ». Ainsi, si le routeur n’est plus accéssible, Nagios n’essayera plus de surveiller la liaison Internet.
Définition des services à surveiller
Une fois les machines définies, nous devons décider ce que nous allons surveiller dessus. Cette configuration se fait grâce au fichier /usr/local/etc/nagios/services.cfg.
Nous allons commencer par un template:
# Templates
#———-
define service{
name                            template-services
active_checks_enabled           1
passive_checks_enabled          0
parallelize_check               1
obsess_over_service             1
check_freshness                 0
notifications_enabled           0
event_handler_enabled           0
flap_detection_enabled          0
process_perf_data               1
retain_status_information       1
retain_nonstatus_information    1
check_period                    24×7
max_check_attempts              3
normal_check_interval           5
retry_check_interval            1
contact_groups                  admins
notification_interval           240
notification_period             24×7
notification_options            c,r
register                        0
}
Puis par la surveillance du routeur:
# monrouteuramoi
#———
define service {
host_name                       monrouteuramoi
use                             template-services
service_description             Ping
check_command                   check-host-alive
}
De mon PC client:
# monpcamoi
#———
define service {
host_name                       monpcamoi
use                             template-services
service_description             Ping
check_command                   check-host-alive
}
mon serveur (on surveille également le serveur HTTP et le serveur FTP):
# monserveuramoi
#———
define service {
host_name                       monserveuramoi
use                             template-services
service_description             Ping
check_command                   check-server-alive
}
define service {
host_name                       monserveuramoi
use                             template-services
service_description             Web serveur
check_command                   check_http
}
define service {
host_name                       monserveuramoi
use                             template-services
service_description             FTP serveur
check_command                   check_ftp
}
et enfin la liaison Internet:
# maliaisonamoi
#———
define service {
host_name                       maliaisonamoi
use                             template-services
service_description             Ping
check_command                   check-server-alive
}
Définition des groupes de machines
La dernière étape consiste à définir un groupe de machine dans le fichier /usr/local/etc/nagios/hostgroups.cfg:
# Mon réseau à moi
define hostgroup{
hostgroup_name  monreseauamoi
alias           Mon reseau
members         monrouteuramoi, monpcamoi, monserveuramoi, maliaisonamoi
}
et voila la configuration touche à sa fin, il ne reste plus qu’a vérifier la syntaxe de vos fichiers de configuration avec la commande suivante:
# nagios -v <nagios.cfg>
Si tout est ok, vous pouvez relancer le serveur Nagios:
# service nagios reload
That’s all folk !
Pour une description précise des options des fichiers de configuration de Nagios, c’est par ici.
Pour consulter l’ensemble des posts sur Nagios, c’est par là.