Auteur:
NicoLargo

Date:
4/06/2008

Catégories:
Open-source
Reseau

Tags:


Structure des fichiers de configuration de Nagios 3

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

22 commentaires


  1. clément, le 6/06/2008 (#4197)

    Pour la définition des fichiers de configuration cela ne suffit-il pas ? :
    cfg_dir=/usr/loca/nagios/etc/objects/
    Sinon bravo pour ce billet.


  2. gogogadjeto, le 23/06/2008 (#4366)

    Déjà, merci pour tout nicolargo, tu fais du boulot merveilleux!

    Je voulais juste te demander, comment puis-je vérifier que cette configuration (modifier pour mes besoins) va-t-elle bel et bien fonctionner? Désolé, je suis novice avec nagios et c’est un véritable casse tête pour moi.
    Merci d’avance, bonne journée


  3. NicoLargo, le 24/06/2008 (#4389)

    @gogogadjeto: je ne comprends pas très bien ta question… Il faudr ajuste vérifier dans l’interface Web de Nagios si tu vois bien les machines que tu as déclaré dans ta configuration…


  4. Nelmo, le 8/09/2008 (#4977)

    Bonjour,

    Alors tout d’abord, un big Merci à toi pour avoir posé à plat les nouveauté en terme d’organisation de Nagios 3.

    Par conséquent, je souhaiterais te poser une question simple :

    Ayant à monitorer des téléphones IP, puis-je ajouter un fichier de conf de la même manière que pour networks … ?

    Cela me permettrai de bien “ranger” tout mon ptit monde.

    Cordialement,

    nelmo


  5. NicoLargo, le 8/09/2008 (#4978)

    @Nelmo – Oui et c’est même une très bonne idée ;)


  6. Nelmo, le 11/09/2008 (#4990)

    Petite question :

    Tu définis des services dans les templates ? Dans quel but ? ne pas les re-déclarer apres avoir déclarer un host ?

    Je suis un peu perdu, dois-je déclarer les services en dessous de l’host ou bien je crée des templates suivants les services que je souhaite monitorer ?


  7. tatou, le 5/11/2008 (#5316)

    slt merci pour ce exellent tuto j l ai suivit a lettre g installé nagios3.0.3 avec plugin1.4.13 sur ubuntu 8.04 mais sur une machine virtuel mais g un blém dan mon fichier nagios.conf il ya pas lé fichier host hostgroupe escalation service timeperiod…….
    sil vous plé g vréma besoin déd


  8. tatou, le 5/11/2008 (#5317)

    slt g besoin déd dans mon fichier d conf il m mank dé fichier com host hostgroup service…………


  9. tatou, le 18/11/2008 (#5368)

    slt je voudrais savoir comment on configure nagios pour avoir des notification d’alerte par sms


  10. tatou, le 25/11/2008 (#5395)

    slt aprés configuration de mon fichier hosts.cfg mais en compilant il mafiche lereur suivant
    invalide max_check_attempts value for host fat-desktop
    encor merci pour le tuto


  11. NicoLargo, le 14/01/2009 (#5610)

    @tous: juste pour vous signaler l’ouverture du forum de Nicolargo ou vous pouvez poser vos questions !

    http://forum.nicolargo.com

    A bientôt !

    Nicolargo


  12. NikoLargué, le 4/02/2009 (#5861)

    Bonjour,
    Pour les lignes :
    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
    N’aurais-tu pas oublié un “L” à “/loca/” ?

    Merci pour ton très bon tuto


  13. NicoLargo, le 4/02/2009 (#5866)

    @NikoLargué (pas mal comme pseudo): Heu oui…


  14. Benjamin, le 17/02/2009 (#5969)

    Petite question : A quoi te sert la ligne “PARENTS” dans tes fichiers de configurations pour tes équipements. en quoi cela va-t-il influencer Nagios ?


  15. NicoLargo, le 17/02/2009 (#5970)

    @Benjamin, le mot clés “parent” permet de définir une arborescence de ton réseau. Par exemple si toutes tes machines sont connectés a un switch il faut mettre ce switch comme “parent” des PC.
    Cela permet à Nagios d’arrêter de pooler les PC si le switch est en panne…


  16. ulysse, le 17/04/2009 (#6274)

    pour Configuration des objets, je ne trouve pas les fichiers
    /usr/local/nagios/etc/objects/hostclients.cfg
    cfg_file=/usr/local/nagios/etc/objects/network.cfg
    que je dois faire merci


  17. tagger, le 3/08/2009 (#6703)

    Salut,

    Il s’agit du fichier resource.cfg et non resources.cfg.
    Très bons tutos sinon


  18. Romuald, le 5/08/2009 (#6712)

    bonjour Nicolas;
    j’ai installer nagios 3.1.2 et tous sembles fonctionner mais je parvient pas a ajouter les hostes . j’ai créer le fichiers network.cfg et lorsque je fnis de l’exécuter je faite /etc/init.d/nagios checkconfig j’ai des erreurs de configurations. quelqu’un poura til m’aider?


  19. NicoLargo, le 5/08/2009 (#6714)

    @romuald: je te conseille de poser ta question sur le forum


  20. startrap, le 5/03/2010 (#7736)

    Merci pour le tuto, cßest super. Par contre je bloque Ä ca stade, je n’arrive pas à savegarder les fichier *.cfg dans le dossier objet. Je ne peux donc rien faire. Pourtant je suis administrateur. Faut-il faire se mettre avec l’utilisateur Nagios? Car ça bloque quand je fais ça. Merci de m’aider


  21. startrap, le 8/03/2010 (#7745)

    C’est bon, j’ai trouvé.


  22. doomer, le 15/03/2010 (#7766)

    Salu, j’ai un gros problème avec Nagios. J’ai suivi à la lettre le tuto mais je n’arrive pas à voir apparaitre les nouveaux hotes dans Nagios, pourtant je les configure comme il faut dans hostclients.cfg. J’essais depuis deux semaines sans réponses. Je me demande si le fait que je sois sur une machine virtuelle change quelque chose?
    Merci d’avance.


Laisser un message

Les informations saisies resteront privées.