3 Macros de usuário com contexto

Visão geral

Um contexto opcional pode ser usado em macros de usuário, permitindo substituir o valor padrão por um valor específico do contexto.

O contexto é anexado ao nome da macro; a sintaxe depende de o contexto ser um valor de texto estático:

{$MACRO:"texto estático"}

ou uma expressão regular:

{$MACRO:regex:"expressão regular"} 

Observe que uma macro com contexto de expressão regular só pode ser definida na configuração de macro de usuário. Se o prefixo regex: for usado em outro lugar como contexto de macro de usuário, como em uma expressão de trigger, ele será tratado como contexto estático.

As aspas no contexto são opcionais (veja também as notas importantes).

Exemplos de contexto de macro:

Exemplo Descrição
{$LOW_SPACE_LIMIT} Macro de usuário sem contexto.
{$LOW_SPACE_LIMIT:/tmp} Macro de usuário com contexto (string estática).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro de usuário com contexto (expressão regular). Igual a {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro de usuário com contexto (expressão regular). Corresponde a todas as strings com o prefixo /var/log/.

Casos de uso

As macros de usuário com contexto podem ser definidas para alcançar limites de disparo mais flexíveis em expressões de trigger (com base nos valores recuperados pela descoberta de baixo nível). Por exemplo, você pode definir as seguintes macros:

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

Então, uma macro de descoberta de baixo nível pode ser usada como contexto de macro em um protótipo de trigger para descoberta de sistemas de arquivos montados:

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

Após a descoberta, diferentes limites de espaço livre serão aplicados nos triggers dependendo dos pontos de montagem ou tipos de sistema de arquivos descobertos. Eventos de problema serão gerados se:

  • a pasta /home tiver menos de 20% de espaço livre em disco
  • pastas que correspondam ao padrão regexp (como /etc, /tmp ou /var) tiverem menos de 30% de espaço livre em disco
  • pastas que não correspondam ao padrão regexp e não sejam /home tiverem menos de 10% de espaço livre em disco

Anotações importantes

  • Se existir mais de uma macro de usuário com contexto, o Zabbix tentará combinar as macros de contexto simples primeiro e depois as macros de contexto com expressões regulares em uma ordem indefinida.

::: aviso Não crie macros de contexto diferentes que correspondam ao mesma string para evitar comportamento indefinido. :::

  • Se uma macro com seu contexto não for encontrada no host, modelos vinculados ou globalmente, a macro sem contexto é pesquisada.
  • Somente macros de descoberta de baixo nível são suportadas no contexto. Algum outras macros são ignoradas e tratadas como texto simples.

Tecnicamente, o contexto macro é especificado usando regras semelhantes a item key, exceto que o contexto da macro é não analisado como vários parâmetros se houver um caractere ,:

  • O contexto da macro deve ser citado com " se o contexto contiver um } caractere ou começa com um caractere ". Aspas entre aspas contexto deve ser escapado com o caractere \.
  • O caractere \ em si não tem escape, o que significa que é impossível ter um contexto citado terminando com o caractere \ - a macro {$MACRO:"a:\b\c\"} é inválido.
  • Os espaços iniciais no contexto são ignorados, os espaços finais são não:
    • Por exemplo, {$MACRO:A} é igual a {$MACRO: A}, mas não {$MACRO:A }.
  • Todos os espaços antes das cotações iniciais e após as cotações finais são ignorado, mas todos os espaços entre aspas não são:
    • Macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } e {$MACRO: "A" } são iguais, mas as macros {$MACRO:"A"} e {$MACRO:" A "} não são.

As macros a seguir são todas equivalentes, pois possuem a mesma contexto: {$MACRO:A}, {$MACRO: A} e {$MACRO:"A"}. Isso está em contraste com chaves de item, onde 'key[a]', 'key[ a]' e 'key["a"]' são as mesmo semanticamente, mas diferente para fins de exclusividade.