Table des matières

Les templates et les "pivots" de configuration

En approfondissant la configuration de Nagios, on peut s’apercevoir et avoir des idées sur comment mieux agencer sa configuration pour avoir un minimum d’efforts à faire. Il existe quelques astuces pour éviter d’avoir à répéter les mêmes variables, les mêmes services pour différents hôtes :

Templates

Les templates sont très utiles pour vous éviter d’avoir à répéter les variables commune à chaque définition de vos hôtes et services. Ils vont nous aider aussi pour cette customisation de la configuration.

En utilisant les templates, nous allons jouer sur le principe d’héritage natif du Nagios Core.

Principe d'héritage des templates

Comme sur le schéma ci-dessus, on peut voir 2 templates “père” (generic-host et generic-service). C’est 2 templates contiennent toutes les variables récurrentes des déclarations d’hôtes et de services.

Bien sur, vous n’allez pas vous limitez qu’à ces 2 templates car vous avez des contacts, des périodes de notifications, des périodes de contrôles différents pour telle ou telle machines. Vous pouvez créer des sous-templates qui hériteront des templates generic grâce à la variable “use”. Cette variable est la clé du système d’héritage.

La règle primordiale de héritage est que la variable situé le plus près de la définition de l’hôte ou du service remporte sur le(s) héritage(s) parent(s)

Exemple

On peut partir de 2 templates basiques generic-host et generic-service

generic-host generic-service
define host{
        name                            generic-host
        initial_state                   o
        active_checks_enabled           1
        passive_checks_enabled          1
        notifications_enabled           1
        event_handler_enabled           0
        check_command                   check-host-alive
        flap_detection_enabled          1
        failure_prediction_enabled      1
        failure_prediction_options      d,u,r
        process_perf_data               1
        check_freshness                 0
        obsess_over_host                0
        check_period                    24x7
        check_interval                  0
        retry_interval                  1
        stalking_options                u,d
        max_check_attempts              10
        retain_status_information       1
        retain_nonstatus_information    1
        notification_period             24x7
        first_notification_delay        0
        contact_groups                  admins
        notification_options            d,u,r
        notification_interval           0
        register                        0
        notes                           generic-host
        }
define service{
        name                            generic-service
        active_checks_enabled           1
        passive_checks_enabled          1
        initial_state                   o
        parallelize_check               1
        obsess_over_service             0
        check_freshness                 0
        notifications_enabled           1
        event_handler_enabled           0
        flap_detection_enabled          1
        failure_prediction_enabled      1
        failure_prediction_options      w,c,u
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        is_volatile                     0
        check_period                    24x7
        flap_detection_options          o,u,c,w
        max_check_attempts              5
        normal_check_interval           5
        retry_check_interval            2
        contact_groups                  admins
        notification_options            w,u,c,r
        notification_interval           0
        notification_period             24x7
        first_notification_delay        0
        notes                           generic-service
        register                        0
        }

Bien sur à partir de ces 2 templates réunissant une grande partie des variables de déclarations, vous pouvez créer des sous-templates qui hériteront du generic-host et generic-service

Disons que nous allons avoir besoin d’un template pour nos serveurs Web. Ils sont en sauvegarde de 22h à 0h et nous voulons que ce soit l’équipe de support qui soit alertée par interface de 60 minutes.

Il faudra avoir créer préalablement un timeperiod pour la plage de sauvegarde des serveurs web, le contact “support”

tmpl-host-web tmpl-service-web
define host{
        use                             generic-host
        name                            tmpl-host-web
        check_command                   check-host-alive
        check_period                    24x7
        max_check_attempts              5
        notification_period             24x7
        contact_groups                  support
        notification_interval           60
        register                        0
        notes                           generic-host
        }
define service{
        use                             generic-service
        name                            tmpl-service-web
        check_period                    24x7
        max_check_attempts              5
        normal_check_interval           15
        retry_check_interval            2
        contact_groups                  support
        notification_interval           60
        notification_period             24x7
        register                        0
        }

Une autre clé majeure dans nagios à retenir est le register 0. Cette variable permet de faire apparaître ou non cette déclaration dans l’interface Web (vous commencez à voir ce que vont être nos pivots).

Il ne reste plus qu’à déclarer notre hôte avec au moins un service.

Déclaration de l’hôte Rainette Déclaration du service de réponse de l’interface Nagios
define host{
        use                     tmpl-host-web
        host_name               Rainette
        alias                   Serveur Web Rainette
        address                 xx.xx.xx.xx
        contact_groups          support,admins
        }
define service{
        use                             tmpl-service-web
        host_name                       Rainette
        service_description             Reponse interface Web Nagios
        check_command                   check_http!"http://xx.xx.xx.xx/nagios"
        }

On remarquera dans la déclaration de l’hôte Rainette, l’ajout d’une variable contact_groups où en plus du support, l’équipe admins y est. Selon la règle d’héritage, c’est cette dernière qui fera foi. Bien sur ceci fonctionne avec n’importe qu’elle autres variables de déclaration.

Les pivots

Les pivots sont les fruits d’une réflexion sur l’amélioration et la simplification du déploiement de la configuration Nagios.

Principe de fonctionnement

principes_pivots_conf.jpg

Comme vous pouvez le voir sur le schéma ci-dessus, nous utilisons les hostgroups comme pivot de la configuration de Nagios.

En gros, nous allons avoir des groupes d’hôtes et des sous-groupes qui vont être rattacher à des services. En fonction du rattachement de l’hôte à un groupe, des services s’ajouteront automatiquement.

Comme vous pouvez le voir, il peut y avoir des groupes d’hôtes en fonction du lieu géographique des hôtes ou alors de leur rôles.

Par exemple, pour un serveur Web, Que veux-t-on savoir ?

En rattachant tous ces services à un hostgroup du nom de SERV_WEB, tous hôtes membres de ce groupe se verront les contrôles ci-dessus ajoutés sans le moindre effort.

Bien sur le principe des pivots n’est pas une règle absolue, il est très utile dans le déploiement massif de services identiques pour vos machines.

Exemple

Pour cette exemple, nous allons laisser “rainette” tranquille et créer 2 nouveaux hôtes du nom de “crapaud” et “goliath”. Pour résumer, “crapaud” et goliath sont des serveurs faisant partie d’une batterie de serveur web. Admettons, notre politique d’entreprise veut que pour tous nos serveurs web des contrôles de base soit fait. Le souci c’est que l’on a X serveurs web et que l’on a pas envie de se repéter une multitude de fois dans la définition des services. Pour être clair, nous allons déclarer ces services par défaut en les liant à un hostgroup. Ensuite, nous n’aurons plus qu’à rattacher nos serveurs web à cet hostgroup et les services seront déployé automatiquement.

Définition des hôtes :

Vous pouvez créer un crapaud.cfg et un goliath.cfg contenant la définition pour chacun.

Goliath Crapaud
define host{
        use                     generic-host
        host_name               Goliath
        alias                   Goliath
        address                 127.0.0.1
        contact_groups          support
        }
define host{
        use                     generic-host
        host_name               Crapaud
        alias                   Crapaud
        address                 127.0.0.1
        contact_groups          support
        }

Définition de l’hostgroup :

Dans le fichier hostgroups.cfg, rajoutez la définition suivante :

define hostgroup {
        hostgroup_name          SERV_WEB
        alias                   Groupe des Serveurs WEB
        members                 Goliath,Crapaud
}

Définition de nos services :

Vous pouvez créer un fichier service-load.cfg et un fichier service-acces-http.cfg contenant pour chacun la définition ci-dessous.

Load Average Réponse HTTP
 Definition du service de Load Average
define service{
        use                             generic-service
        hostgroup_name                  SERV_WEB
        service_description             Load Average
        check_command                   check_load!5.0,4.0,3.0!10.0,8.0,6.0
        contact_groups                  support
        }
# Definition du service de controle d'url Web
define service{
        use                             generic-service
        hostgroup_name                  SERV_WEB
        service_description             Reponse HTTP
        check_command                   check_http
        }

On voit que dans nos définitions de service, ce n’est plus le traditionnel host_name mais hostgroup_name.

Maintenant regardons dans l’interface ce qui a été déployé :

Les astuces

A écrire