Le passage en version 3.0 de Nagios (l’outil de monitoring système et réseau) a apporté son lot de nouveautés. L’une d’elle est la réorganisation des fichiers de configuration. Nous allons dans ce billet détailler cette structure et préparer notre configuration de Nagios pour qu’elle soit facile à administrer…
Arborescence des fichiers de configuration
Si vous avez suivi ce tutorial pour l’installation de Nagios 3 depuis les sources, vos fichiers de configuration (fichiers se terminant avec l’extension .cfg) se trouve sous le répertoire /usr/local/nagios/etc/.
Personnellement, j’utilise la structure suivante:
cgi.cfg
> Définition des paramètres des scripts CGI. Vous pouvez utiliser le fichier fourni par défaut par Nagios.
nagios.cfg
> Fichier de configuration de Nagios. A modifier par vos soins selon votre configuration et l’arborescence choisie. Vous pouvez partir du fichier fourni en standard par Nagios et le modifier selon votre configuration.
resources.cfg
> Définition des ressources externes. Vous pouvez utiliser le fichier fourni par défaut par Nagios.
objects/
> C’est dans ce sous-répertoire que sont centralisé les définitions des machines et services à surveiller part votre serveur Nagios.
objects/commands.cfg
> C’est là que nous allons définir les commandes utilisées par Nagios pour interroger vos machines. Vous pouvez partir du fichier fourni en standard par Nagios et le modifier selon votre configuration.
objects/contacts.cfg
> Dans ce fichier, il faut configurer les contacts pouvant être prévenu en cas d’alerte. Vous pouvez partir du fichier fourni en standard par Nagios.
objects/hostclients.cfg
> Ce fichier est à créer, il comportera la définition de toutes vos machines clients à surveiller (c’est à dire les postes utilisateurs). Ce fichier n’existe pas dans la structure de base de Nagios.
objects/hostservers.cfg
> Ce fichier est à créer, il comportera la définition de toutes vos machines serveurs à surveiller (c’est à dire les serveurs Web, DNS, DB…). Ce fichier n’existe pas dans la structure de base de Nagios.
objects/localhost.cfg
> Ce fichier est là pour que Nagios puisse surveiller le serveur sur lequel il est installé (localhost). Vous pouvez partir du fichier fourni en standard par Nagios.
objects/templates.cfg
> C’est le fichier ou se trouve la définition des “templates”. Vous pouvez partir du fichier fourni en standard par Nagios.
objects/timeperiods.cfg
> Ce fichier défini les périodes de temps. Vous pouvez partir du fichier fourni en standard par Nagios.
objects/network.cfg
> Ce fichier est à créer, il comporte la définition de toutes les machines composant l’infrastructure de votre réseau (routeur, switch ou hub, borne Wifi …)
C’est une bonne base de départ mais vous pouvez l’adapter en fonction de vos besoins (par exemple avec un découpage plus fin au niveau des hosts).
Attention aux droits sur ces fichiers. Il doivent être lisible par l’utilisateur système avec lequel le daemon Nagios est lancé (user nagios par défaut). Pour être sur de ne pas avoir de problème, je vous conseille de taper les commandes suivantes quand vous avez fini la configuration de vos fichiers:
# cd /usr/local/nagios/etc
# chown -R nagios *
Configuration des fichiers cgi.cfg, nagios.cfg et resources.cfg
Ces 3 fichiers définissent la configuration “maître” de Nagios. Ils sont donc à configurer de manière préalable à tous les autres fichiers .cfg.
Configuration de Nagios: nagios.cfg
Ce fichier défini comment Nagios doit fonctionner. Il dispose de nombreuses options. Je vous conseille donc de partir du fichier fourni en standard et de modifier les sections suivantes.
Modifier le fichier ou les logs du processus Nagios seront écrits (vou spouvez laisser la valeur par défaut).
log_file=/var/log/nagios.log
Attention, ce fichier doit être en lecture/écriture l’utilisateur avec lequel le daemon Nagios est lancé (user nagios par défaut).
La deuxième chose à faire est de définir l’arborescence des fichiers de configuration. Dans notre cas, cela donne:
cfg_file=/usr/loca/nagios/etc/objects/commands.cfg
cfg_file=/usr/loca/nagios/etc/objects/contacts.cfg
cfg_file=/usr/loca/nagios/etc/objects/hostclients.cfg
cfg_file=/usr/loca/nagios/etc/objects/hostservers.cfg
cfg_file=/usr/loca/nagios/etc/objects/localhost.cfg
cfg_file=/usr/loca/nagios/etc/objects/templates.cfg
cfg_file=/usr/loca/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/loca/nagios/etc/objects/network.cfg
Les options suivantes permettent de configurer l’utilisateur et le groupe système utilisés pour lancer Nagios. Je vous conseille de laisser les valeurs par défaut (sinon il faut créer les utilisateurs).
nagios_user=nagios
nagios_group=nagios
Je vous laisse consulter les autres options de ce fichier.
Configuration des CGI: cgi.cfg
Comme vous le savez, Nagios se base sur une interface Web pour générer ses rapports. Cette interface Web est générée dynamiquement par des scripts CGI. Le fichier cgi.cfg à pour but de configurer ces CGI selon votre configuration. Là encore, je vous conseille de partir du fichier fourni par défaut.
On commence par définir l’emplacement du fichier nagios.cfg. En effet ce dernier doit être lisible par les CGI.
main_config_file=/usr/local/nagios/etc/nagios.cfg
On peut ensuite configurer l’URL avec laquelle on va accéder au serveur Web de Nagios. Si par exempel vous voulez y accéder par l’adresse http://monboserveurnagios.com/nagios, il faut éditer l’option:
url_html_path=/nagios
Enfin, il est fortement conseiller d’utiliser une authentification (même si c’est une basique authentification HTTP) pour accéder à Nagios:
use_authentication=1
authorized_for_system_information=admin
…
Configuration des ressources externes: resources.cfg
Nagios utilise un système de plugins. Le fichier resources est là pour définir ou sont ces plugins. Le fichier fourni en standard défini un moyen pour accèder aux plugins standards:
$USER1$=/usr/local/nagios/libexec
Libre à vous d’ajouter d’autres répertoires de plugins.
Configuration des objets
Entrons dans le vif du sujet avec la définition des fichiers de configuration des objets composants notre réseau à surveiller.
On commence par les fichiers génériques: commands.cfg, contacts.cfg, templates.cfg et timeperiods.cfg
Vous pouvez utiliser les fichiers fournis en standard avec Nagios. Pour l’adapter à notre besoin, j’ai juste modifié le fichier templates.cfg pour y ajouter les templates suivants:
Un premier template pour les machines de type Linux:
# Linux host definition template - This is NOT a real host, just a template!
define host{
name linux-host ; The name of this host template
use generic-host ; This template inherits other values from the generic-host template
check_period 24×7 ; By default, Linux hosts are checked round the clock
check_interval 5 ; Actively check the host every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each Linux host 10 times (max)
check_command check-host-alive ; Default command to check Linux hosts
notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day
; Note that the notification_period variable is being overridden from
; the value that is inherited from the generic-host template!
notification_interval 120 ; Resend notifications every 2 hours
notification_options d,u,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
action_url /nagios/pnp/index.php?host=$HOSTNAME ; PNP
}
Un autre pour les machines Apple et BSD:
# BSD host definition template - This is NOT a real host, just a template!
define host{
name bsd-host ; The name of this host template
use linux-host ; This template inherits other values from the generic-host template
}
# Apple host definition template - This is NOT a real host, just a template!
define host{
name apple-host ; The name of this host template
use bsd-host ; This template inherits other values from the generic-host template
}
Pour les machines sous Windows (on sait jamais, sur un malentendu…):
define host{
name windows-host ; The name of this host template
use generic-host ; Inherit default values from the generic-host template
check_period 24×7 ; By default, Windows servers are monitored round the clock
check_interval 5 ; Actively check the server every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive ; Default command to check if servers are “alive”
notification_period 24×7 ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
Et enfin pour les machines composant votre infrastructures réseaux:
define host{
name network-host ; The name of this host template
use generic-host ; Inherit default values from the generic-host template
check_period 24×7 ; By default, switches are monitored round the clock
check_interval 5 ; Switches are checked every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each switch 10 times (max)
check_command check-host-alive ; Default command to check if routers are “alive”
notification_period 24×7 ; Send notifications at any time
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
Définition des machines réseaux: network.cfg
On va utiliser le template network-host et définir chaque noeud de votre réseau (routeur, switch…). Il faut bien sur que ces machines est une adresse IP. Les services à surveiller dépendent de votre configuration (par exemple la MIB des routeurs Cisco est très verbeuse).
Par défaut Nagios “pingue” les machines et affiche leur status (UP/DOWN). Mais on peut allre bien plus loin, apr exemple en mettant des alertes si un interface réseau est saturé, si la charge CPU de votre Firewall devient trop grande…
On utilise l’option hostgroups pour insérer le serveur dans le groupe monreseau.
Un exemple de définition pour un routeur Cisco et un switch réseau:
define host{
use network-host
host_name monboswitch
alias Switch réseau 100 Mbps
address 192.168.0.254
hostgroups monreseau
}
define host {
use network-host
host_name monborouteur
alias Routeur acces Internet
address 192.168.0.1
parents monboswitch
hostgroups monreseau
}
Pour surveiller sa liaison Internet, le plus simple est de pinguer sur Internet un serveur digne de confiance (style www.google.fr):
define host{
use network-host
host_name internet
alias Liaison Internet (ping Google)
address www.google.fr
parents monborouteur
hostgroups monreseau
}
Définition des machines serveurs: hostservers.cfg
On va utiliser un des templates (linux|bsd|apple|windows)-host et définir tous les serveurs de votre réseau.
Pour chaque serveur, on va définir dans le même fichier (c’est une nouveauté par rapport à Nagios 2.x) les services à surveiller (par exemple on va vérifier que le serveur Web est bien lancé grâce au plugin check_http).
On utilise également l’option hostgroups pour insérer le serveur dans le groupe messerveurs.
define host{
use linux-host
host_name monboserveur
alias Serveur Web
address 192.168.0.100
parents monboswitch
hostgroups messerveurs
}
define service{
use generic-service
host_name monboserveur
service_description HTTP
check_command check_http!8080
}
Définition des machines clientes (utilisateurs): hostclients.cfg
On va utiliser un des templates (linux|bsd|apple|windows)-host et définir toutes les machines clients de votre réseau.
On utilise également l’option hostgroups pour insérer le serveur dans le groupe mesclients.
define host{
use apple-host
host_name monboportable
alias MacBookPro
address 192.168.0.200
parents monboswitch
hostgroups mesclients
}
define host{
use linux-host
host_name monbopc
alias Ubuntu
address 192.168.0.201
parents monboswitch
hostgroups mesclients
}
Et ensuite ?
Vous disposer donc d’un structure propre pour faire évoluer votre configuration de Nagios. Si vous voulez allez plus loin dans la configuration des services à surveiller, vous pouvez consulter cette page qui regroupe des articles et des liens sur le sujet.