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 :
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.
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.
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 sont les fruits d’une réflexion sur l’amélioration et la simplification du déploiement de la configuration Nagios.
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.
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é :