Nagios possède une configuration orientée objets. Cela permet entre des fonctions d’héritage puissantes entre ceux-ci. Encore faut-il savoir quels sont les différents types d’objets qu’il est possible de manipuler. C’est l’objet de cette petite introduction aux objets de configuration Nagios.
Une définition d’hôte s’applique à un serveur « physique », une station de travail, un périphérique, un équipement, un serveur virtuel qui se trouve sur votre réseau. Tout équipement possédant une adresse IP peut être considéré comme hôte. Voici une définition d’objet de configuration de type host.
define host{ host_name host_name alias alias display_name display_name address address parents host_names hostgroups hostgroup_names check_command command_name initial_state [o,d,u] max_check_attempts # check_interval # retry_interval # active_checks_enabled [0/1] passive_checks_enabled [0/1] check_period timeperiod_name obsess_over_host [0/1] check_freshness [0/1] freshness_threshold # event_handler command_name event_handler_enabled [0/1] low_flap_threshold # high_flap_threshold # flap_detection_enabled [0/1] flap_detection_options [o,d,u] process_perf_data [0/1] retain_status_information [0/1] retain_nonstatus_information [0/1] contacts contacts contact_groups contact_groups notification_interval # first_notification_delay # notification_period timeperiod_name notification_options [d,u,r,f,s] notifications_enabled [0/1] stalking_options [o,d,u] notes note_string notes_url url action_url url icon_image image_file icon_image_alt alt_string vrml_image image_file statusmap_image image_file 2d_coords x_coord,y_coord 3d_coords x_coord,y_coord,z_coord }
La définition d’un service identifie un service tournant sur un hôte. Le terme service est très générique. Il peut s’appliquer à un service ( POP, SMTP, HTTP, etc.) ou bien tout autre type de mesures associé à l’hôte (temps de réponse à un ping, nombre d’utilisateurs connectés, usage des disques). En résumé, tout contrôle aboutit à un service. Voyons les options acceptées par un objet de configuration de type service.
define service{ host_name host_name hostgroup_name hostgroup_name service_description service_description display_name display_name servicegroups servicegroup_names is_volatile [0/1] check_command command_name initial_state [o,w,u,c] max_check_attempts # check_interval # retry_interval # active_checks_enabled [0/1] passive_checks_enabled [0/1] check_period timeperiod_name obsess_over_service [0/1] check_freshness [0/1] freshness_threshold # event_handler command_name event_handler_enabled [0/1] low_flap_threshold # high_flap_threshold # flap_detection_enabled [0/1] flap_detection_options [o,w,c,u] process_perf_data [0/1] retain_status_information [0/1] retain_nonstatus_information [0/1] notification_interval # first_notification_delay # notification_period timeperiod_name notification_options [w,u,c,r,f,s] notifications_enabled [0/1] contacts contacts contact_groups contact_groups stalking_options [o,w,u,c] notes note_string notes_url url action_url url icon_image image_file icon_image_alt alt_string }
Une définition de contact s’applique à la personne physique qui doit être contactée en cas de problèmes sur le système d’information supervisé.
define contact{ contact_name contact_name alias alias contactgroups contactgroup_names host_notification_period timeperiod_name service_notification_period timeperiod_name host_notification_options [d,u,r,f,n] service_notification_options [w,u,c,r,f,n] host_notification_commands command_name service_notification_commands command_name email email_address pager pager_number or pager_email_gateway addressx additional_contact_address }
Exemple de Définition:
define contact{ contact_name jdoe alias John Doe service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email jdoe@localhost.localdomain pager 555-5555@pagergateway.localhost.localdomain address1 xxxxx.xyyy@icq.com address2 555-555-5555 }
Une période est une liste de tranches horaires pour les différents jours de la semaine, qui sont “valides” pour l’envoi des notifications et les contrôles de service. Ces tranches sont elles-mêmes composées d’autres tranches de temps pour chaque jour de la semaine, qui “tournent” une fois que la semaine est terminée. Définition du Format:
define timeperiod{ timeperiod_name timeperiod_name alias alias sunday timeranges monday timeranges tuesday timeranges wednesday timeranges thursday timeranges friday timeranges saturday timeranges }
Exemple de définition
define timeperiod{ timeperiod_name nonworkhours alias Non-Work Hours sunday 00:00-24:00 monday 00:00-09:00,17:00-24:00 tuesday 00:00-09:00,17:00-24:00 wednesday 00:00-09:00,17:00-24:00 thursday 00:00-09:00,17:00-24:00 friday 00:00-09:00,17:00-24:00 saturday 00:00-24:00 }
Les groupes permettent de rassembler en entités logiques différents hôtes ou services. Il est par exemple d’usage de créer un groupe d’hôtes par type de système d’exploitation pour que chaque équipe système puisse avoir une vue globale du type de système dont elle s’occupe. Ainsi, l’équipe système Linux peut savoir si les machines de type Linux sont ok ou pas d’un seul coup d’œil.
Une définition de groupe d’hôtes est utilisée pour regrouper un ou plusieurs groupes ensemble pour les afficher sous une seule entité dans la console. Ci-dessous un exemple de définition
define hostgroup{ hostgroup_name linux-servers alias Linux Servers members jeos,hardy,olivier-desktop }
Une définition de groupe de services est utilisée pour regrouper un ou plusieurs services sous une seule entité dans la console. Ci-dessous un exemple de définition.
define servicegroup{ servicegroup_name dbservices alias Database Services members ms1,SQL Server,ms1,SQL Server Agent,ms1,SQL DTC }
Une définition de groupe de contacts permet de regrouper un ou plusieurs contacts pour émettre des notifications. Quand un hôte ou un service a un problème ou se rétablit, Nagios recherche les groupes de contacts à qui envoyer des notifications, et notifie tous les contacts de ces groupes.
define contactgroup{ contactgroup_name contactgroup_name alias alias members members }
Exemple de définition
define contactgroup{ contactgroup_name novell-admins alias Novell Administrators members jdoe,rtobert,tzach }
Les dépendances permettent à Nagios de tenir compte de la topologie réseau pour distinguer si un hôte est injoignable (UNREACHABLE) ou éteint (DOWN). Ceci est utilisé dans la logique de contrôle et de notifications.
Les définitions de dépendances d’hôte sont une fonctionnalité avancée de Nagios qui permet de supprimer des notifications et des contrôles actifs, à partir de l’état d’un ou plusieurs hôtes.
define hostdependency{ dependent_host_name host_name host_name host_name inherits_parent [0/1] execution_failure_criteria [o,d,u,p,n] notification_failure_criteria [o,d,u,p,n] }
Exemple de définition
define hostdependency{ host_name WWW1 dependent_host_name DBASE1 notification_failure_criteria d,u }
Les définitions de dépendances du service sont une fonctionnalité avancée de Nagios qui permet de supprimer des notifications et des contrôles actifs, à partir de l’état d’un ou plusieurs services. Elles sont optionnelles et sont principalement destinées aux utilisateurs avertis qui ont des configurations de supervision complexes.
define servicedependency{ dependent_host_name host_name dependent_service_description service_description host_name host_name service_description service_description execution_failure_criteria [o,w,u,c,n] notification_failure_criteria [o,w,u,c,n] }
Exemple de définition
define servicedependency{ host_name WWW1 service_description Apache Web Server dependent_host_name WWW1 dependent_service_description Main Web Site execution_failure_criteria n notification_failure_criteria w,u,c }
Les escalades permettent de notifier des personnes différentes suivant la durée de résolution d’un incident. Le concept est similaire aux escalades de support niveau 1,2 et 3.
Une définition d’escalade pour un hôte est complètement optionnelle et est utilisée pour escalader les notifications liées à un hôte particulier.
define hostescalation{ host_name host_name hostgroup_name hostgroup_name contact_groups contactgroup_name first_notification # last_notification # notification_interval # escalation_period timeperiod_name escalation_options [d,u,r] }
define hostescalation{ host_name router-34 first_notification 5 last_notification 8 notification_interval 60 contact_groups all-router-admins }
Une définition d’escalade pour un service est complètement optionnelle et est utilisée pour escalader les notifications liées à un service particulier.
define serviceescalation{ host_name host_name service_description service_description contact_groups contactgroup_name first_notification # last_notification # notification_interval # escalation_period timeperiod_name escalation_options [w,u,c,r] }
Exemple de définition
define serviceescalation{ host_name nt-3 service_description Processor Load first_notification 4 last_notification 0 notification_interval 30 contact_groups all-nt-admins,themanagers }
Une définition de commande est un appel depuis Nagios à un script ou à un binaire exécuté à différentes fins. Les commandes qu’on peut définir sont les contrôles de service, les notifications de service, les gestionnaires d’événements de service, les contrôles d’hôte, les notifications d’hôte et les gestionnaires d’événements d’hôte. Les définitions de commande peuvent contenir des macros.
define command{ command_name check_pop command_line /opt/nagios/libexec/check_pop -H $HOSTADDRESS$ } Cet objet possède son écran de configuration correspondant dans Centreon
Une des fonctionnalités disponibles dans Nagios est la possibilité d’utiliser des macros (lire macro-commandes) dans les définitions de commandes. Avant d’exécuter une commande, Nagios remplace toutes les macros dans celle-ci par les valeurs correspondantes. Avant qu’une commande (contrôles d’hôte et de service, notifications, gestionnaires d’évènements, etc.) soit exécutée, Nagios va remplacer toutes les macros qu’il trouve dans la définition de la commande par les valeurs correspondantes. Les macros d’hôte et de service dans les définitions de commandes font référence aux valeurs de l’hôte ou du service pour lequel s’exécute la commande.
La configuration des objets par héritage est le moyen le plus commode d’industrialiser la configuration de Nagios. L’héritage de propriétés d’objets s’accomplit de manière récursive lors de la lecture des fichiers de configurations par Nagios. Il y a trois variables concernant le principe de récursion et d’héritage qui sont disponibles dans toutes définitions d’objets.
define someobjecttype{ object-specific variables ... name template_name use name_of_template_to_use register [0/1] }
Voilà le tour du propriétaire des objets et directives de configuration disponibles dans Nagios terminé.