Esta página descreve a sintaxe da expressão do trigger e detalhes de avaliação.
A sintaxe de uma expressão simples é:
function(/host/item,time_period)<operator><constant>
Nesta expressão, o primeiro operando (à esquerda do operador) é uma função com seus parâmetros entre parênteses (normalmente o item de dados e o período de tempo).
A função é usada para analisar os dados recebidos durante o período de tempo definido, resultando em um valor calculado.
Este valor é então comparado ao segundo operando, usando o operador. Neste exemplo, o segundo operando é uma constante, mas também pode ser outra função.
Por exemplo:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
Este trigger dispara se o número de bytes recebidos em eth0 durante os últimos cinco minutos foi sempre superior a 100 kilobytes. Neste caso, a expressão é verdadeira e um problema é criado.
As expressões de trigger são extremamente flexíveis. Em expressões mais complexas, várias funções, operadores e constantes podem ser combinados.
Veja também:
As funções permitem analisar os valores coletados, por exemplo, calcular a média ou encontrar uma string específica.
Clique no respectivo grupo de funções para ver mais detalhes.
| Grupo de funções | Funções | |
|---|---|---|
| Funções agregadas | avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp | |
| Funções foreach | avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach | |
| Funções bitwise | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| Funções de data e hora | date, dayofmonth, dayofweek, now, time | |
| Funções de histórico | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| Funções de tendência | baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum | |
| Funções matemáticas | abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate | |
| Funções de operador | between, in | |
| Funções preditivas | forecast, timeleft | |
| Funções de string | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
Exceto quando indicado de outra forma, essas funções são suportadas em:
Funções foreach são suportadas apenas para cálculos agregados.
Normalmente, as funções retornam valores numéricos para comparação. Ao retornar strings, a comparação é possível com os operadores = e <> (veja o exemplo Detectar software não correspondente em hosts diferentes).
Os parâmetros da função permitem especificar:
/host/key) para funções que referenciam o histórico de um item do hostO item referenciado deve estar em um estado suportado (exceto para a função nodata(), que também é calculada para itens não suportados).
A omissão do nome do host no primeiro parâmetro (ou seja, como em function(//key,parameter,...)) só é suportada em determinados contextos:
Nesses contextos, você também pode usar a macro {HOST.HOST}. {HOST.HOST<1-9>} pode ser usado no caso do campo Nome do evento e do elemento de mapa "Trigger" para se referir a um item específico na expressão do trigger. Quando o nome do host é omitido ou substituído por {HOST.HOST} nesses contextos, a referência aponta para o primeiro item na expressão do trigger ou para o primeiro item no gráfico. Fora desses contextos suportados, omitir o nome do host em expressões de trigger resultará em erro. Veja o exemplo Comparar cargas de CPU de longo prazo para uma ilustração do uso de barra dupla em macros de nome de evento.
Parâmetros específicos da função são colocados após a chave do item e são separados da chave do item por uma vírgula.
A maioria das funções numéricas aceita período de tempo como parâmetro. Isso permite especificar o intervalo de tempo de interesse. Ele pode ser especificado como um período de tempo (30s, 10m, 1h) ou como um intervalo de valores (#5 - para os cinco valores mais recentes).
Você pode usar segundos ou sufixos de tempo para indicar o período de tempo. Precedido por um sinal de cerquilha, o parâmetro tem um significado diferente:
| Expressão | Descrição |
|---|---|
| sum(/host/key,10m) | Soma dos valores nos últimos 10 minutos. |
| sum(/host/key,#10) | Soma dos dez valores mais recentes. |
Parâmetros com cerquilha têm um significado diferente com a função last - eles denotam o N-ésimo valor anterior, então, dados os valores 30, 70, 20, 60, 50 (do mais recente para o menos recente):
last(/host/key,#2) retornaria '70'last(/host/key,#5) retornaria '50'O período de tempo é medido até o "agora" - onde "agora" é o momento mais recente de recálculo do trigger (veja Frequência de cálculo); "agora" não é o tempo "agora" do server.
O período de tempo especifica:
Observe que:
Um deslocamento de tempo opcional é suportado com tempo ou contagem de valores como parâmetro da função. Este parâmetro permite referenciar dados de um período de tempo no passado.
O deslocamento de tempo começa com now - especificando o tempo atual, e é seguido por +N<unidade de tempo> ou -N<unidade de tempo> - para adicionar ou subtrair N unidades de tempo.
Por exemplo, avg(/host/key,1h:now-1d) retornará o valor médio para uma hora de um dia atrás.
O deslocamento de tempo especificado em meses (M) e anos (y) é suportado apenas para funções de tendência. Outras funções suportam segundos (s), minutos (m), horas (h), dias (d) e semanas (w).
Deslocamento de tempo com períodos de tempo absolutos
Períodos de tempo absolutos são suportados no parâmetro de deslocamento de tempo, por exemplo, meia-noite até meia-noite para um dia, segunda-feira a domingo para uma semana, primeiro dia ao último dia do mês para um mês.
O deslocamento de tempo para períodos de tempo absolutos começa com now - especificando o tempo atual, e é seguido por qualquer número de operações de tempo: /<unidade de tempo> - define o início e o fim da unidade de tempo, por exemplo, meia-noite até meia-noite para um dia, +N<unidade de tempo> ou -N<unidade de tempo> - para adicionar ou subtrair N unidades de tempo.
Observe que o valor do deslocamento de tempo pode ser maior ou igual a 0, enquanto o valor mínimo do período de tempo é 1.
| Parâmetro | Descrição |
|---|---|
| 1d:now/d | Ontem |
| 1d:now/d+1d | Hoje |
| 2d:now/d+1d | Últimos 2 dias |
| 1w:now/w | Semana passada |
| 1w:now/w+1w | Esta semana |
Os parâmetros da função podem conter outras expressões, conforme a seguinte sintaxe:
Observe que outras expressões não podem ser usadas se a função fizer referência ao histórico do item. Por exemplo, a seguinte sintaxe não é permitida:
min(/host/key,#5*10)
Enquanto outras expressões de trigger como parâmetros de função são limitadas a funções que não usam histórico em triggers, essa limitação não se aplica em itens calculados.
Os seguintes operadores são suportados para triggers (em ordem decrescente de prioridade de execução):
| Prioridade | Operador | Definição | Notas para valores desconhecidos | Forçar conversão do operando para float 1 |
|---|---|---|---|---|
| 1 | - | Menos unário | -Desconhecido → Desconhecido | Sim |
| 2 | not | NOT lógico | not Desconhecido → Desconhecido | Sim |
| 3 | * | Multiplicação | 0 * Desconhecido → Desconhecido (sim, Desconhecido, não 0 - para não perder Desconhecido em operações aritméticas) 1.2 * Desconhecido → Desconhecido |
Sim |
| / | Divisão | Desconhecido / 0 → erro Desconhecido / 1.2 → Desconhecido 0.0 / Desconhecido → Desconhecido |
Sim | |
| 4 | + | Soma aritmética | 1.2 + Desconhecido → Desconhecido | Sim |
| - | Subtração aritmética | 1.2 - Desconhecido → Desconhecido | Sim | |
| 5 | < | Menor que. O operador é definido como: A<B ⇔ (A<B-0.000001) |
1.2 < Desconhecido → Desconhecido | Sim |
| <= | Menor ou igual a. O operador é definido como: A<=B ⇔ (A≤B+0.000001) |
Desconhecido <= Desconhecido → Desconhecido | Sim | |
| > | Maior que. O operador é definido como: A>B ⇔ (A>B+0.000001) |
Sim | ||
| >= | Maior ou igual a. O operador é definido como: A>=B ⇔ (A≥B-0.000001) |
Sim | ||
| 6 | = | Igual a. O operador é definido como: A=B ⇔ (A≥B-0.000001) e (A≤B+0.000001) |
Não 1 | |
| <> | Diferente de. O operador é definido como: A<>B ⇔ (A<B-0.000001) ou (A>B+0.000001) |
Não 1 | ||
| 7 | and | AND lógico | 0 and Desconhecido → 0 1 and Desconhecido → Desconhecido Desconhecido and Desconhecido → Desconhecido |
Sim |
| 8 | or | OR lógico | 1 or Desconhecido → 1 0 or Desconhecido → Desconhecido Desconhecido or Desconhecido → Desconhecido |
Sim |
1 O operando string ainda é convertido para numérico se:
(Se a conversão falhar - o operando numérico é convertido para string e ambos os operandos são comparados como strings.)
Os operadores not, and e or diferenciam maiúsculas de minúsculas e devem estar em minúsculas. Eles também devem ser cercados por espaços ou parênteses.
Todos os operadores, exceto - unário e not, têm associatividade da esquerda para a direita. - unário e not são não associativos (ou seja, -(-1) e not (not 1) devem ser usados em vez de --1 e not not 1).
Resultado da avaliação:
É possível que um operando desconhecido apareça em uma expressão de trigger quando:
Neste caso, a expressão do trigger geralmente é avaliada como Desconhecido (pois não pode ser avaliada)
É possível ser notificado sobre triggers desconhecidos.
Exceções
Apesar de um operando desconhecido, as expressões de trigger podem ser avaliadas para um resultado conhecido (Problema/OK) em alguns casos:
nodata() é avaliada independentemente de o item referenciado ser suportado ou não.1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." é avaliado para um resultado conhecido ('1' ou "Problema"),0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." é avaliado para um resultado conhecido ('0' ou "OK").Desconhecido e ela participa como operando desconhecido em avaliações posteriores da expressão.Operandos desconhecidos podem "desaparecer" apenas em expressões lógicas, conforme descrito acima. Em expressões aritméticas, operandos desconhecidos sempre levam a Desconhecido (exceto divisão por 0).
O estado de expressão desconhecido não altera o estado do trigger (Problema/OK). Portanto, se o estado do trigger era "Problema" (veja o Caso 1), ele permanece no estado de problema mesmo que a parte conhecida seja resolvida ('1' se torne '0'), porque a expressão agora é avaliada como Desconhecido e isso não altera o estado do trigger.
Se uma expressão de trigger com vários itens não suportados for avaliada como Desconhecido, a mensagem de erro no frontend se refere ao último item não suportado avaliado.
Os valores necessários para a avaliação do trigger são armazenados em cache pelo Zabbix server. Por causa disso, a avaliação do trigger causa uma carga maior no banco de dados por algum tempo após a reinicialização do server. O cache de valores não é limpo quando os valores do histórico do item são removidos (seja manualmente ou pelo housekeeper), então o server usará os valores em cache até que eles sejam mais antigos do que os períodos de tempo definidos nas funções do trigger ou até que o server seja reiniciado.
Se não houver dados recentes no cache e não houver um período de consulta definido na função, o Zabbix, por padrão, irá buscar no passado até uma semana para consultar o banco de dados por valores históricos.