This is a translation of the original English documentation page. Help us make it better.

3 Macros utilisateur avec contexte

Aperçu

Un contexte facultatif peut être utilisé dans les macros utilisateur, permettant de remplacer la valeur par défaut par une valeur spécifique au contexte.

Le contexte est ajouté au nom de la macro ; la syntaxe varie selon que le contexte est une valeur de texte statique :

{$MACRO:"static text"}

ou une expression régulière :

{$MACRO:regex:"regular expression"} 

Notez qu'une macro avec un contexte d'expression régulière ne peut être définie que dans la configuration de la macro utilisateur. Si le préfixe regex: est utilisé ailleurs comme contexte de macro utilisateur, comme dans une expression de déclencheur, il sera traité comme un contexte statique.

La citation contextuelle est facultative (voir aussi notes importantes).

Exemples de contexte de macro :

Exemple Description
{$LOW_SPACE_LIMIT} Macro utilisateur sans contexte.
{$LOW_SPACE_LIMIT:/tmp} Macro utilisateur avec contexte (chaîne statique).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro utilisateur avec contexte (expression régulière). Identique à {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro utilisateur avec contexte (expression régulière). Correspond à toutes les chaînes préfixées par /var/log/.

Cas d'usage

Des macros utilisateur avec contexte peuvent être définies pour atteindre des seuils plus flexibles dans les expressions de déclenchement (basées sur les valeurs récupérées par la découverte de bas niveau). Par exemple, vous pouvez définir les macros suivantes :

  • {$LOW_SPACE_LIMIT} = 10
  • {$LOW_SPACE_LIMIT:/home} = 20
  • {$LOW_SPACE_LIMIT:regex:"^\/[a-z]+$"} = 30

Ensuite, une macro de découverte de bas niveau peut être utilisée comme contexte de macro dans un prototype de déclencheur pour la découverte du système de fichiers monté :

last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

Après la découverte, différents seuils d'espace réduit s'appliqueront dans les déclencheurs en fonction des points de montage ou des types de système de fichiers découverts. Des événements de problème seront générés si :

  • le dossier /home a moins de 20 % d'espace disque libre
  • les dossiers qui correspondent au modèle d'expression régulière (comme /etc, /tmp ou /var) ont moins de 30 % d'espace disque libre
  • les dossiers qui ne correspondent pas au modèle d'expression régulière et qui ne sont pas /home ont moins de 10 % d'espace disque libre

Notes importantes

  • S'il existe plusieurs macros utilisateur avec contexte, Zabbix essaiera d'abord de faire correspondre les macros de contexte simples, puis les macros de contexte avec des expressions régulières dans un ordre indéfini.

Ne créez pas de macros de contexte différentes correspondant à la même chaîne pour éviter un comportement indéfini.

  • Si une macro avec son contexte n'est pas trouvée sur l'hôte, sur les modèles liés ou globalement, la macro sans contexte est recherchée.
  • Seules les macros de découverte de bas niveau sont prises en charge dans le contexte. Toutes les autres macros sont ignorées et traitées comme du texte brut.

Techniquement, le contexte de la macro est spécifié à l'aide de règles similaires aux paramètres de la clé d'élément, sauf que le contexte de la macro n'est pas analysé comme plusieurs paramètres s'il y a un caractère , :

  • Le contexte de la macro doit être entre guillemets avec " si le contexte contient un caractère } ou commence par un caractère ". Les guillemets à l'intérieur du contexte entre guillemets doivent être échappés avec le caractère \.
  • Le caractère \ lui-même n'est pas échappé, ce qui signifie qu'il est impossible d'avoir un contexte entre guillemets se terminant par le caractère \ - la macro {$MACRO:"a:\b\c\"} est invalide.
  • Les espaces de début dans le contexte sont ignorés, les espaces de fin ne le sont pas :
    • Par exemple {$MACRO:A} est identique à {$MACRO: A}, mais pas à {$MACRO:A }.
  • Tous les espaces avant les guillemets de début et après les guillemets de fin sont ignorés, mais tous les espaces à l'intérieur des guillemets ne le sont pas :
    • Les macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } et {$MACRO: "A" } sont identiques, mais les macros {$MACRO:"A"} et {$MACRO:" A "} ne le sont pas.

Les macros suivantes sont toutes équivalentes, car elles ont le même contexte : {$MACRO:A}, {$MACRO:A} et {$MACRO:"A"}. Cela contraste avec les clés d'élément, où 'key[a]', 'key[ a]' et 'key["a"]' sont sémantiquement identiques, mais différents à des fins d'unicité.