Chapitre 26. Utilisation des macros dans les commandes

Macros

Une des fonctionalités disponibles dans Nagios est la possibilité d'utiliser des macros [NdT: macro-commandes] dans les définitions de commandes. Avant d'exécuter une commande, Nagios remplacera toutes les macros dans celle-ci par les valeurs correspondantes. Cela vous permet de définir quelques commandes génériques que vous manipulerez à votre guise.

Substitution des macros

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 trouvera dans la définition de la commande par les valeurs correspondantes.

Certaines macros peuvent contenir elles-mêmes d'autres macros. Celles-ci incluent les macros $HOSTNOTES$, $HOSTNOTESURL$, $HOSTACTIONURL$, $SERVICENOTES$, $SERVICENOTESURL$, et $SERVICEACTIONURL$ .

Exemple 1: La macro d'adresse de l'hôte

Quand vous utilisez des macros d'hôte et de service dans les définitions de commandes, elles font référence aux valeurs de l'hôte ou du service pour lequel s'exécute la commande. Prenons un exemple. Supposons que nous ayons une définition d'hôte et une commande check_ping définies de la manière suivante :

define host {
    host_name         linuxbox
    address           192.168.1.2
    check_command     check_ping
    ...
}
            
define command {
    command_name   check_ping
    command_line   /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 100.0,90% -c 200.0,60%
}
        

La ligne de commande finale, après substitution, qui sera exécutée pour le contrôle de l'hôte ressemblera à ceci :

/usr/local/nagios/libexec/check_ping -H 192.168.1.2 -w 100.0,90% -c 200.0,60%

Ce qui est beau c'est que vous pouvez utilisez une simple commande de contrôle pour un nombre illimité d'hôtes. Chaque hôte va être contrôlé avec cette même commande parce que chaque adresse de vos hôtes seront automatiquement soumis pendant l'exécution de votre commande.

Exemple 2: Les commandes d'Argument de macros

Vous pouvez aussi passer des paramètres aux commandes, ce qui est pratique si vous voulez avoir des définitions de commandes plus génériques. Les paramètres sont spécifiés dans la définition de l'objet (c.-à-d. de l'hôte ou du service), en les séparant du nom de la commande par des points d'exclamation (!) comme ceci :

define service {        
    host_name             linuxbox
    service_description   PING
    check_command         check_ping!200.0,80%!400.0,40%
    ...
}
        

Dans l'exemple ci-dessus, la commande de contrôle du service a deux paramètres (auxquels on fait référence par les macros $ARGn$). La macro $ARG1$ vaudra 200.0,80% et $ARG2$ vaudra 400.0,40% (sans les guillemets). Supposons que nous utilisons la définition d'hôte ci-dessus et une commande check_ping définie comme ceci :

define command {
    command_name   check_ping
    command_line   /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}
        

La ligne de commande finale à exécuter pour le contrôle du service sera :

/usr/local/nagios/libexec/check_ping -H 192.168.1.2 -w 200.0,80% -c 400.0,40%

Si vous devez passer des points d'exclamations (!) dans vos arguments de commandes, vous pouvez faire ainsi en les espaçant avec un backslash (\). Si vous devez inclure des backslashes dans vos arguments de commandes, ils devront aussi être espacés avec un backslash.

Macro à la demande

Normalement, quand vous utilisez des macros d'hôte ou de service dans les définitions de commandes, elles font référence aux valeurs de l'hôte ou du service pour lequel s'exécute la commande. Par exemple, si la commande de contrôle d'un hôte s'exécute pour l'hôte appelé linuxbox, toutes les macros d'hôte listées dans le tableau ci-après font référence aux valeurs de cet hôte (linuxbox).

Si vous souhaitez faire référence aux valeurs d'un autre hôte ou service dans une commande (pour lequel ne s'exécute pas la commande), vous pouvez utiliser ce qu'on appellle des macros à la demande. Les macros à la demande ressemblent aux macros normales, mis à part qu'elle contiennent l'identifiant de l'hôte ou du service où aller chercher leur valeur. Voici la syntaxe de base pour les macros à la demande :

  • $HOSTMACRONAME:host_name$

  • $SERVICEMACRONAME:host_name:service_description$

Remplacez HOSTMACRONAME et SERVICEMACRONAME avec le nom d'une des macros standard d'hôte ou de service trouvé ici.

Notez que le nom de la macro est séparé de l'identifiant de l'hôte ou du service par deux points (:). Pour les macros de service à la demande, l'identifiant du service est composé d'un nom d'hôte et d'une description de service - qui sont séparés par deux point (:) également.

Le service de macros à la demande peut contenir un champ de nom d'hôte vide. Dans ce cas, le nom de l'hôte est automatiquement associé dès que le service est utilisé.

Voici des exemples de macros d'hôte et de service à la demande :

Exemple 26.1. Macro à la demande d'hôte

$HOSTDOWNTIME:myhost$


Exemple 26.2. Macro à la demande de service

$SERVICESTATEID:novellserver:DS Database$


Exemple 26.3. Macro à la demande de service, sans le champ d'hôte

$SERVICESTATEID::CPU Load$


Les macros à la demande sont aussi valables pour les macros des groupes d'hôtes, des groupes de services, des contacts et des groupes de contacts. Par exemple:

Exemple 26.4. Macro à la demande de contact

$CONTACTEMAIL:john$


Exemple 26.5. Macro à la demande de groupe de contacts

$CONTACTGROUPMEMBERS:linux-admins$


Exemple 26.6. Macro à la demande de groupe d'hôtes

$HOSTGROUPALIAS:linux-servers$


Exemple 26.7. Macro à la demande de groupe de services

$SERVICEGROUPALIAS:DNS-Cluster$


Les groupes de macros à la demande

Vous pouvez obtenir les valeurs d'une macro à travers tous les contacts, les hôtes, ou les services dans un groupe spécifique en utilisant un format spécial dans votre déclaration de macro à la demande. Vous le faites en vous référant à un groupe d'hôte spécifique, un groupe de service, ou le nom du groupe de contact dans une macro à la demande, comme ceci :

  • $HOSTMACRONAME:hostgroup_name:delimiter$

  • $SERVICEMACRONAME:servicegroup_name:delimiter$

  • $CONTACTMACRONAME:contactgroup_name:delimiter$

Remplacez HOSTMACRONAME, SERVICEMACRONAME, et CONTACTMACRONAME avec le nom de macro d'un hôte standard, un service, ou le contact trouvé ici. Le délimiteur que vous spécifiez est utilisé pour séparer des valeurs de macro pour chaque membre d'un groupe.

Par exemple, la macro suivante retournera une liste d'états hôtes séparés par des virgules pour les hôtes membres du groupe hg1:

$HOSTSTATEID:hg1:,$

La définition de cette macro retournera quelque chose ressemblant à ça:

0,2,1,1,0,0,2

Les macros de variable personnalisée

N'importe laquelle des variables d'objet personnalisées que vous spécifiez dans la définition de l'hôte, du service, ou du contact est aussi disponible comme macro. La macro de variable personnalisée est appelée comme suit :

  • $_HOSTvarname$

  • $_SERVICEvarname$

  • $_CONTACTvarnaem$

Prenez la définition d'hôte suivante avec une variable personnalisée appelée _MACADDRESS

define host {
    host_name      linuxbox
    address        192.168.1.1
    _MACADDRESS    00:01:02:03:04:05
    ...
}
        

La variable _MACADDRESS serait disponible dans une macro appelée $_HOSTMACADDRESS$. Plus d'informations sur les variables personnalisées d'objets et comment les utiliser dans des macros peuvent être trouvées ici.

Nettoyage des macros

Les valeurs de certaines macros sont dépouillées des métacaractères du shell potentiellement dangereux, avant d'être remplacées dans la commande à exécuter. Les caractères qui seront supprimés dans les macros sont définis par le paramètre illegal_macro_output_chars. Ce nettoyage s'applique aux macros suivantes :

Macros et variables d'environnement

A partir de la version 2.0 de Nagios, la plupart des macros sont disponibles sous forme de variables d'environnement. Cela signifie que les scripts lancés par Nagios (c.-à-d. les commandes de contrôle de service et d'hôte, les commandes de notification, etc...) peuvent faire référence à ces macros directement en tant que variables d'environnement standard. Pour des raisons de sécurité et de bon sens, $USERn$ et les macros d'hôte et de service à la demande ne sont pas disponibles comme variables d'environnement.

Les variables d'environnement qui contiennent des macros sont nommées comme les macros correspondantes (listées ici), avec le préfixe NAGIOS_. Par exemple, la macro $HOSTNAME$ est disponible à travers la variable d'environnement nommée NAGIOS_HOSTNAME.

Validité des macros

Une liste de tous les macros qui sont disponibles dans Nagios, aussi bien qu'un graphique d'utilisation, peut être trouvée ici.