centos_nagios_2

Si vous avez suivi les deux premières parties de notre tuto, vous devriez avoir sous la main un serveur Nagios opérationnel (Section 1) et au moins un client Linux ou Windows prêt à transmettre ses informations via le module adéquat (Section 2).


Avant d'aller plus loin, commençons par corriger cette vilaine ligne "http" qui est en "warning" (jaune) depuis le début.

  • Dans un terminal (en root), créez un fichier "index.html" à la racine du dossier Apache, en procédant comme suit :
# touch /var/www/html/index.html


  • Redémarrez Apache et Nagios et attendez quelques minutes, au check suivant, pour voir la ligne "http" reprendre un état normal :
# service httpd restart
# service nagios restart



centos_nagios_3


Se rapprocher d'une configuration accessible au plus grand nombre et néanmoins aussi complète que possible n'est pas une tache facile. D'abord parce qu'il y a mille et une façons de configurer Nagios et ensuite parce que chaque réseau est composé différemment.

En quelques mots, dans Nagios, vous avez les machines (modems, serveurs, postes de travail, etc..), les groupes (Windows, Linux, etc..) et les services (ping, charge cpu, occupation mémoire, etc..).
Lorsque vous associez un service à une machine (ou à un groupe de machines), la ligne de ce service apparait dans les éléments de la machine concernée. Dans l'image au dessus, vous pouvez constater que 8 services ont été associés à la machine "localhost".

Plutôt que de renseigner chaque machine dans chaque service, nous allons affecter, aussi souvent que possible, les services à des groupes que nous allons créer. Selon le groupe dans lequel vous déclarez un appareil, il bénéficie automatiquement des services associés.

De ce fait, nous nous limitons volontairement à trois groupes "standards" de manière à répondre en premier lieu aux cas les plus communs, sans pour autant empêcher des ajouts ultérieurs (cas particuliers).


Considérons donc, pour schématiser, nos 3 groupes de machines :

  • Les switchs, routeurs, imprimantes et autres bornes Wifi : pour ceux là, le minimum requis consiste à effectuer un ping régulier afin de s'assurer de leur présence sur le réseau.
  • Les postes et serveurs réseau sous Windows : Sous monitoring via NSClient, nous utiliserons les options standard de ce module
  • Enfin, les postes et serveurs sous Linux/Unix : monitoring via NRPE




Partie théorique - Quelques informations sur l'arborescence et les différents fichiers


  • Dans la version compilée (celle de ce tuto donc), l'arborescence à retenir est "/usr/local/nagios/".
  • La déclaration des machines et des services se fait via des fichiers contenus dans le dossier "/usr/local/nagios/etc/object/" avec des noms qui parlent d'eux mêmes. Listing ci-dessous du contenu de ce dossier à ce stade (d'origine donc) :
# ls -la /usr/local/nagios/etc/objects/
drwxrwxr-x 2 nagios nagios  4096 mai  8 13:32 .
drwxrwxr-x 3 nagios nagios  4096 mai  7 19:23 ..
-rw-rw-r-- 1 nagios nagios  7871 mai  5 23:05 commands.cfg
-rw-rw-r-- 1 nagios nagios  2167 mai  5 23:00 contacts.cfg
-rw-rw-r-- 1 nagios nagios  5403 mai  5 22:59 localhost.cfg
-rw-rw-r-- 1 nagios nagios  3124 mai  5 22:59 printer.cfg
-rw-rw-r-- 1 nagios nagios  3293 mai  5 22:59 switch.cfg
-rw-rw-r-- 1 nagios nagios 10812 mai  5 22:59 templates.cfg
-rw-rw-r-- 1 nagios nagios  3208 mai  5 22:59 timeperiods.cfg
-rw-rw-r-- 1 nagios nagios  4019 mai  5 22:59 windows.cfg


  • Ces fichiers, pour être pris en compte, doivent être déclarés (et dé-commentés) dans la partie dédiée du "conf" principal, à savoir "/usr/local/nagios/etc/nagios.cfg". Notez que "from scratch", certains ne sont pas actifs (puisque commentés dans nagios.cfg) mais peuvent servir d'exemple.
# cat /usr/local/nagios/etc/nagios.cfg
## Partiel de fichier

# OBJECT CONFIGURATION FILE(S)
# These are the object configuration files in which you define hosts,
# host groups, contacts, contact groups, services, etc.
# You can split your object definitions across several config files
# if you wish (as shown below), or keep them all in a single config file.

# You can specify individual object config files as shown below:
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/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

# Definitions for monitoring a Windows machine
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg

# Definitions for monitoring a router/switch
#cfg_file=/usr/local/nagios/etc/objects/switch.cfg

# Definitions for monitoring a network printer
#cfg_file=/usr/local/nagios/etc/objects/printer.cfg




Modèle de déclaration basique d'une machine dans un fichier de configuration

Première étape obligatoire, indiquer à Nagios les informations relatives à la machine dont il va assurer le monitoring. Pour la joindre il lui faut son ip, pour l'identifier il a besoin de son nom, etc..

  • Dans le cas d'un modem, ça ressemblera à ceci :
define host{
        use             generic-switch          ; modele (template) Nagios
        host_name       modem_numericable       ; le nom court (sans espaces ni accents)
        alias           Modem linksys cable     ; le nom long (plus parlant)
        address         192.168.0.1             ; adresse ip du modem
        }



  • Pour une Linux ce sera pareil, sauf pour le template Nagios :
define host{
        use                     linux-server            ; modele (template) Nagios
        host_name               nom_court_du_serveur
        alias                   nom long
        address                 192.168.0.10
        }



Note : Les "templates" de Nagios, ce sont des configurations type pour chaque genre de machines. Ils précisent certains paramètres comme les délais par défaut avant mise en alerte, le nombre de "checks" avant de générer un mail, etc... Ils sont visibles dans le fichier "/usr/local/nagios/etc/objects/templates.cfg". Ne modifiez pas ces fichiers si vous ne maitrisez pas complétement leur portée, utilisez simplement le template existant qui se rapproche le mieux du poste à déclarer (comme dans nos exemples).


Modèle de déclaration basique d'un groupe dans un fichier de configuration

Il est très rare d'utiliser Nagios pour une seule machine. Fort logiquement, il est préférable de les classer par catégorie (groupes), ainsi nous pourrons affecter des commandes (checks) à un groupe plutôt qu'à chaque nouvelle machine déclarée.

  • Exemple avec le groupe "linux-servers" (qui existe déjà d'origine) :
define hostgroup{
        hostgroup_name   linux-servers                  ; le nom court du groupe
        alias            Machines Linux               ; le nom long
        }




Modèle de déclaration basique d'un service dans un fichier de configuration

Un service, c'est une commande définie à appliquer aux machines désignées ou aux groupes. Il faut que l'exécutable de la commande existe dans "/usr/local/nagios/libexec/" pour que cela fonctionne.

  • Exemple de service affecté à une ou plusieurs machines (les machines désignées auront une ligne "PING" dans Nagios) :
define service{
        use                             local-service
        host_name                       localhost,machine_2
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }


  • Exemple de service affecté à un groupe (toutes les machines du groupe auront une ligne "PING") :
define service{
        use                     generic-service
        hostgroup_name           linux-servers
        service_description     PING
        check_command           check_ping!200.0,20%!600.0,60%
        }




J'imagine qu'à cet instant, tout ceci doit vous sembler un peu confus si vous n'êtes pas familier avec Nagios.
Pas d'inquiétude, on quitte la théorie et on passe aux exemples pratiques. Leur configuration devrait permettre une meilleure compréhension. On va commencer par le plus simple et monter progressivement.


Avant d'aller plus loin, une petite sauvegarde

Il est important, après chaque modification, d'effectuer (à minima) une sauvegarde des fichiers de configuration. En cas d'erreur, de frappe erronée ou autre, il vous suffira de restaurer l'état précédent plutôt que de devoir parcourir "à la main" des fichiers qui deviendront très vite assez volumineux.

  • Créez un dossier destiné aux sauvegardes (exemple ici avec "/save/nagios") et corrigez les droits comme suit :
# mkdir -p /save/nagios
# chown -R nagios:nagios /save/nagios


  • Synchro de la prod vers la sauvegarde :
# rsync -avz  /usr/local/nagios/   /save/nagios/





Exemple pratique - Fichier de configuration des switchs, routeurs, imprimantes et autres bornes Wifi


Dans ce premier fichier, il s'agit de déclarer toutes les machines qui ne nécessitent qu'une commande "PING", comme les routeurs, modems, bornes Wifi, imprimantes, etc.. Nous allons l'appeler "ipfix.cfg" (puisqu'il regroupe tous les appareils dont nous connaissons l'ip).

  • Fichier (quasi vierge) "ipfix.cfg" et premières lignes d'information (copiez/collez à l'identique) :
# vi /usr/local/nagios/etc/objects/ipfix.cfg
#####################################################
# ipfix.cfg  -- fichier de configuration  mgroup.fr
#
# checks ip fixes comme les modems
# les bornes wifi et les imprimantes
#

#####################################################
#
# zone pour declarer les appareils 
#



#####################################################
#
# zone groupes




#####################################################
#
# zone services associes aux groupes




# Fin de fichier



  • Ajout du groupe dont feront partie toutes la machines déclarées dans ce fichier (insérez à l'identique) :
#####################################################
# ipfix.cfg  -- fichier de configuration  mgroup.fr
#
# checks ip fixes comme les modems
# les bornes wifi et les imprimantes
#

#####################################################
#
# zone pour declarer les appareils 
#



#####################################################
#
# zone groupes

define hostgroup{
        hostgroup_name  ipfix                   ; le nom court du groupe
        alias           ip fixes réseau             ; le nom long
        }


#####################################################
#
# zone services associes aux groupes




# Fin de fichier



  • Ajout du service "PING" associé au groupe "ipfix" (insérez à l'identique) :
#####################################################
# ipfix.cfg  -- fichier de configuration  mgroup.fr
#
# checks ip fixes comme les modems
# les bornes wifi et les imprimantes
#

#####################################################
#
# zone pour declarer les appareils 
#



#####################################################
#
# zone groupes

define hostgroup{
        hostgroup_name  ipfix                   ; le nom court du groupe
        alias           ip fixes réseau             ; le nom long
        }


#####################################################
#
# zone services associes aux groupes

define service{
        use                     generic-service ; ne changez pas cette ligne
        hostgroup_name          ipfix           ;  groupe concerne
        service_description     PING            ; ne changez pas cette ligne
        check_command           check_ping!200.0,20%!600.0,60%  ; parametres commande
        normal_check_interval   5               ; intervalle entre chaque check
        retry_check_interval    1               ; intervalle de check si alerte
        }


# Fin de fichier



Note 1 : Nous n'aurons plus besoin de modifier le groupe "ipfix" ou le service "PING" dans ce fichier. Il ne reste qu'à déclarer les appareils.

Note 2 : En associant le service "PING" au groupe "ipfix" plutôt qu'à chaque appareil, vous gagnez un temps précieux et évitez de nombreuses saisies inutiles. En effet, à présent, chaque machine déclarée (en haut de fichier) et associée au groupe "ipfix" bénéficiera automatiquement de cette commande "PING".

  • Déclaration du premier appareil dans la première partie du fichier (remplacez le nom court, le nom long et l'ip par vos valeurs). Remarquez la ligne "hostgroups" qui associe le modem au groupe "ipfix" :
#####################################################
# ipfix.cfg  -- fichier de configuration  mgroup.fr
#
# checks ip fixes comme les modems
# les bornes wifi et les imprimantes
#

#####################################################
#
# zone pour declarer les appareils 
#

# modem routeur

define host{
        use             generic-switch          ; ne changez pas cette ligne
        host_name       modem_cable       ; nom court (sans espaces)
        alias           Modem linksys cable     ; le nom long
        address         192.168.0.1          ; adresse ip
        hostgroups      ipfix                   ; ne changez pas cette ligne
        }


#####################################################
#
# zone groupes

define hostgroup{
        hostgroup_name  ipfix                   ; le nom court du groupe
        alias           ip fixes réseau             ; le nom long
        }


#####################################################
#
# zone services associes aux groupes

define service{
        use                     generic-service ; ne changez pas cette ligne
        hostgroup_name          ipfix           ;  groupe concerne
        service_description     PING            ; ne changez pas cette ligne
        check_command           check_ping!200.0,20%!600.0,60%  ; parametres commande
        normal_check_interval   5               ; intervalle entre chaque check
        retry_check_interval    1               ; intervalle de check si alerte
        }


# Fin de fichier



  • Insérer "ipfix.cfg" dans la liste des fichiers pris en compte par Nagios (vers le début de "nagios.cfg", à la suite des autres) :
# vi /usr/local/nagios/etc/nagios.cfg
# partiel de fichier

# OBJECT CONFIGURATION FILE(S)
# These are the object configuration files in which you define hosts,
# host groups, contacts, contact groups, services, etc.
# You can split your object definitions across several config files
# if you wish (as shown below), or keep them all in a single config file.

# You can specify individual object config files as shown below:
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/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

# Definitions for monitoring a Windows machine
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg

# Definitions for monitoring a router/switch
#cfg_file=/usr/local/nagios/etc/objects/switch.cfg

# Definitions for monitoring a network printer
#cfg_file=/usr/local/nagios/etc/objects/printer.cfg

# Definitions pour monitorer les ip fixes
cfg_file=/usr/local/nagios/etc/objects/ipfix.cfg


  • Redémarrer Nagios pour prise en compte :
# service nagios restart


  • Dans l'interface Nagios, le modem devrait être à présent visible :



centos_nagios_4

  • Tout comme le groupe "ipfix", à la rubrique "HostGroups" :



centos_nagios_5


  • Pour déclarer un deuxième appareil (et les suivants) via le fichier "ipfix.cfg", on ne modifie rien dans les zones "services" et "groupes". Il suffit de l'ajouter dans la première partie, de la même manière que le modem (en changeant le nom court, le nom long et l'ip bien sûr..) :
# vi /usr/local/nagios/etc/objects/ipfix.cfg
#####################################################
# ipfix.cfg  -- fichier de configuration  mgroup.fr
#
# checks ip fixes comme les modems
# les bornes wifi et les imprimantes
#

#####################################################
#
# zone pour declarer les appareils 
#

# modem routeur

define host{
        use             generic-switch          ; ne changez pas cette ligne
        host_name       modem_cable       ; nom court (sans espaces)
        alias           Modem linksys cable     ; le nom long
        address         192.168.0.1          ; adresse ip
        hostgroups      ipfix                   ; ne changez pas cette ligne
        }


# imprimante hp3050

define host{
        use             generic-switch          ; ne changez pas cette ligne
        host_name       Printer_hp_3050       ; nom court (sans espaces)
        alias           imprimante HP 3050     ; le nom long
        address         192.168.0.6          ; adresse ip
        hostgroups      ipfix                   ; ne changez pas cette ligne
        }


#####################################################
#
# zone groupes

define hostgroup{
        hostgroup_name  ipfix                   ; le nom court du groupe
        alias           ip fixes réseau             ; le nom long
        }


#####################################################
#
# zone services associes aux groupes

define service{
        use                     generic-service ; ne changez pas cette ligne
        hostgroup_name          ipfix           ;  groupe concerne
        service_description     PING            ; ne changez pas cette ligne
        check_command           check_ping!200.0,20%!600.0,60%  ; parametres commande
        normal_check_interval   5               ; intervalle entre chaque check
        retry_check_interval    1               ; intervalle de check si alerte
        }


# Fin de fichier


  • Après redémarrage de Nagios, le nouvel appareil est également pris en compte



centos_nagios_6


Note 1 : Ne déclarez pas dans le fichier "ipfix.cfg" des machines Windows, Linux ou autres. Réservez le aux appareils limités à un controle de présence réseau (PING).

Note 2 : En cas de problème au redémarrage de Nagios, rappel de la commande pour obtenir des précisions sur l'erreur rencontrée :

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


Note 3 : Une petite sauvegarde avant l'étape suivante ?



La prochaine partie traite des déclarations de machines Windows et des fichiers de configuration associés.




Commenter ou débattre de ce tuto via le topic dédié du forum.