Áú»¢¶Ä²©

3 Macros de usuario con contexto

¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô general

Se puede utilizar un contexto opcional en las macros de usuario, permitiendo reemplazar el valor predeterminado por uno espec¨ªfico del contexto.

El contexto se a?ade al nombre de la macro; la sintaxis depende de si el contexto es un valor de texto est¨¢tico:

{$MACRO:"texto est¨¢tico"}

o una expresi¨®n regular:

{$MACRO:regex:"expresi¨®n regular"}

Tenga en cuenta que una macro con contexto de expresi¨®n regular s¨®lo se puede definir en la configuraci¨®n de macros de usuario. Si el prefijo regex: se usa en otro lugar como contexto de macro de usuario, como en una expresi¨®n de iniciador, se tratar¨¢ como contexto est¨¢tico.

Las comillas contextuales son opcionales (ver tambi¨¦n las notas importantes).

Ejemplos de macros con contexto:

Ejemplo ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
{$LOW_SPACE_LIMIT} Macro de usuario sin contexto.
{$LOW_SPACE_LIMIT:/tmp} Macro de usuario con contexto (cadena est¨¢tica).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro de usuario con contexto (expresi¨®n regular). Igual que {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro de usuario con contexto (expresi¨®n regular). Coincide con todas las cadenas con el prefijo /var/log/.

Casos de uso

Se pueden definir macros de usuario con contexto para lograr umbrales m¨¢s flexibles en expresiones de activaci¨®n (seg¨²n los valores recuperados por la detecci¨®n de bajo nivel). Por ejemplo, puede definir las siguientes macros:

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

Luego, se puede utilizar una macro de detecci¨®n de bajo nivel como contexto de macro en un prototipo de iniciador para la detecci¨®n de sistemas de archivos montados:

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

Despu¨¦s de la detecci¨®n, se aplicar¨¢n diferentes umbrales de espacio reducido en los iniciadores seg¨²n los puntos de montaje o los tipos de sistemas de archivos detectados. Se generar¨¢n eventos problem¨¢ticos si:

  • La carpeta /home tiene menos del 20 % de espacio libre en disco
  • Las carpetas que coinciden con el patr¨®n de expresiones regulares (como /etc, /tmp o /var) tienen menos del 30 % de espacio libre en disco
  • Las carpetas que no coinciden con el patr¨®n de expresiones regulares y no son /home tienen menos del 10 % de espacio libre en disco

Notas importantes

  • Si existe m¨¢s de una macro de usuario con contexto, Áú»¢¶Ä²© intentar¨¢ hacer coincidir las macros de contexto simples primero y luego las macros de contexto con expresiones regulares en un orden indefinido.

No cree macros de contexto diferentes que coincidan con la misma cadena para evitar un comportamiento indefinido.

  • Si no se encuentra una macro con su contexto en el equipo, plantillas vinculadas o globalmente, entonces se busca la macro sin contexto.
  • En el contexto solo se admiten macros de descubrimiento de bajo nivel. Cualquier otras macros se ignoran y se tratan como texto sin formato.

T¨¦cnicamente, el contexto macro se especifica mediante reglas similares a los par¨¢metros de la clave de m¨¦trica, excepto que el contexto macro no se analiza como varios par¨¢metros si hay un car¨¢cter ,:

  • El contexto de macro debe ir entre comillas con " si el contexto contiene el car¨¢cter } o comienza con un car¨¢cter ". Las comillas dentro de un contexto entrecomillado deben tener como escape el car¨¢cter \.
  • El car¨¢cter \ en s¨ª no tiene escape, lo que significa que es imposible tener un contexto entre comillas que termine con el car¨¢cter \ - la macro {$MACRO:"a:\b\c\"} no es v¨¢lida.
  • Los espacios iniciales en el contexto se ignoran, los espacios finales no se ignoran:
    • Por ejemplo {$MACRO:A} es lo mismo que {$MACRO: A}, pero no los mismo que {$MACRO:A }.
  • Todos los espacios antes de las comillas iniciales y despu¨¦s de las comillas finales son ignorados, pero todos los espacios entre comillas no lo son:
    • Las macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } y {$MACRO:"A" } son iguales, pero las macros {$MACRO:"A"} y {$MACRO:" A "} no lo son.

Las siguientes macros son todas equivalentes porque tienen el mismo contexto: {$MACRO:A}, {$MACRO: A} y {$MACRO:"A"}. Esto es en contraste con las claves de m¨¦tricas, donde 'key[a]', 'key[ a]' y 'key["a"]' son lo mismo sem¨¢nticamente, pero diferente a efectos de unicidad.