3 Macros de usuario con contexto

Descripción 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 Descripción
{$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, Zabbix 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.