Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

3 Macros de usuário com contexto

Visão geral

Um contexto opcional pode ser usado em user macros, permitindo substituir o valor padrão com um específico do contexto.

O contexto é anexado ao nome da macro; a sintaxe depende se o contexto é 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 em configuração de macro do usuário. Se o prefixo regex: for usado em outro lugar como contexto de macro do usuário, como em uma expressão de gatilho, será tratado como contexto estático.

A citação de contexto é opcional (veja também importante notas).

Exemplos de contexto de macro:

Exemplo Descrição
{$LOW_SPACE_LIMIT} Macro do usuário sem contexto.
{$LOW_SPACE_LIMIT:/tmp} Macro do usuário com contexto (string estática).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro de usuário com contexto (expressão regular). O mesmo que {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro de usuário com contexto (expressão regular). Corresponde a todas as strings prefixadas com /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.

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.