Structure des fichiers de configuration de Nagios 3

Date: 4/06/2008 | Catégories: Open-source,Reseau | Tags: ,

smalllogo7.gif

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.
resource.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 resource.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/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/hostclients.cfg
cfg_file=/usr/local/nagios/etc/objects/hostservers.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/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: resource.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 24x7 ; 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 24x7 ; 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 24x7 ; 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 24x7 ; 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 24x7 ; 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 (il est possible de faire appartenir un même host à plusieurs groupes en listant dans les même options les différents groupes séparés par des virgules).

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.