As expressões usadas em triggers são muito flexíveis. Você pode usá-las para criar testes lógicos complexos relacionados a estatísticas monitoradas.
Uma expressão simples usa uma função que é aplicada ao item com alguns parâmetros. A função retorna um resultado que é comparado ao limiar, usando um operador e uma constante.
A sintaxe de uma expressão simples útil é função(/host/key,parâmetro)<operator><constant>
.
Por exemplo:
será acionado se o número de bytes recebidos durante os últimos cinco minutos foi sempre superior a 100 kilobytes.
Embora a sintaxe seja exatamente a mesma, do ponto de vista funcional existem dois tipos de expressões de acionamento:
Ao definir apenas uma expressão de problema, essa expressão será usada como o limite do problema e o limite de recuperação do problema. Assim que assim que a expressão do problema for avaliada como TRUE, haverá um problema. Assim que assim que a expressão do problema for avaliada como FALSE, o problema será resolvido.
Ao definir tanto a expressão do problema quanto a expressão de recuperação suplementar suplementar, a resolução do problema se torna mais complexa: não apenas a a expressão do problema precisa ser FALSA, mas também a expressão de recuperação precisa ser deve ser VERDADEIRA. Isso é útil para criar histerese (#hysteresis) e evitar disparo de gatilho.
As funções permitem calcular os valores coletados (média, mínimo, máximo, soma), localizar cadeias de caracteres, fazer referência à hora atual e outros fatores.
Uma lista completa de funções suportadas está disponível.
Normalmente, as funções retornam valores numéricos para comparação. Ao retornar strings, a comparação é possível com os operadores = e <> (consulte example).
Os parâmetros de função permitem especificar:
O host e a chave do item podem ser especificados como /host/key
. O item referenciado deve estar em um estado suportado (exceto para a função nodata(), que também é calculada para itens sem suporte).
Embora outras expressões de acionamento como parâmetros de função sejam limitadas a funções não históricas em acionadores, essa limitação não se aplica em itens calculados.
Os 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. Consulte a seção supported funções para obter uma lista completa desses parâmetros.
A maioria das funções numéricas aceita a hora como parâmetro. Você pode usar segundos ou time suffixes para indicar o tempo. Precedido por uma marca de hash, 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 últimos dez valores. |
Os parâmetros com uma marca de hash têm um significado diferente com a função last - eles denotam o enésimo valor anterior, portanto, dados os valores 3, 7, 2, 6, 5 (do mais recente para o menos recente):
last(/host/key,#2)
retornaria '7'last(/host/key,#5)
retornaria '5'Um deslocamento de tempo opcional é suportado com contagem de tempo ou valor como parâmetro de função parâmetro de função. Esse parâmetro permite fazer referência a dados de um período de tempo no passado.
O deslocamento de tempo começa com now
- especificando a hora atual, e é seguida por +N<time unit>
ou -N<time unit>
- para adicionar ou subtrair N unidades de tempo.
Por exemplo, avg(/host/key,1h:now-1d)
retornará o valor médio para uma hora, um dia atrás.
A mudança de horário especificada em meses (M) e anos (y) é compatível apenas com funções de tendência. Outras funções suportam segundos (s), minutos (m), horas (h), dias (d) e semanas (w).
Mudança de horário com períodos de tempo absolutos
Períodos de tempo absolutos são aceitos no parâmetro de mudança de horário, por exemplo, meia-noite à meia-noite para um dia, de segunda a domingo para uma semana, do primeiro dia ao último dia do mês para um mês do mês para um mês.
A mudança de horário para períodos de tempo absolutos começa com now
- especificando a hora atual, e é seguida por qualquer número de operações de tempo: /<time unit>
- define o início e o fim da unidade de tempo, por por exemplo, da meia-noite à meia-noite de um dia, +N<time unit>
ou -N<time unit>
- 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.
Parameter | Description |
---|---|
1d:now/d | Yesterday |
1d:now/d+1d | Today |
2d:now/d+1d | Últimos 2 dias |
1w:now/w | Última semana |
1w:now/w+1w | Esta semana |
Os parâmetros da função podem conter outras expressões, como as seguintes sintaxe:
Observe que outras expressões não poderão ser usadas se a função fizer referência ao histórico do item. Por exemplo, a sintaxe a seguir não é permitida:
`min(/host/key,#5*10)
Os seguintes operadores são suportados para acionadores (em ordem decrescente de prioridade de execução):
Prioridade | Operador | Definição | Notas para valores desconhecidos | Force cast operand to float 1 |
---|---|---|---|---|
1 | - | Unário menos | -Desconhecido → Desconhecido | Sim |
2 | not | Logical NOT | not* Desconhecido → Desconhecido | Sim |
**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 | ||
/ | Division | Unknown / 0 → error Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Yes | |
4 | + | Aritmética mais | 1,2 + Desconhecido → Desconhecido | Sim |
- | Menos aritmética | 1,2 - Desconhecido → Desconhecido | Sim | |
5 | < | Menos que. O operador é definido como: A<B ⇔ (A<B-0.000001) |
1.2 < Desconhecido → Desconhecido | Sim |
<= | Menos que ou igual a. O operador é definido como: A<=B ⇔ (A≤B+0,000001) |
Desconhecido <= Desconhecido → Desconhecido | Sim | |
> | Mais de. O operador é definido como: A>B ⇔ (A>B+0,000001) |
Sim | ||
>= | Mais que ou igual a. O operador é definido como: A>=B ⇔ (A≥B-0.000001) |
Sim | ||
6 | = | É igual. O operador é definido como: A=B ⇔ (A≥B-0,000001) e (A≤B+0,000001) |
No 1 | |
<> | Não é igual. O operador é definido como: A<>B ⇔ (A<B-0.000001) or (A>B+0,000001) |
No 1 | ||
7 | e | Logical AND | 0 e Desconhecido → 0 1 e Desconhecido → Desconhecido Desconhecido e Desconhecido → Desconhecido |
Sim |
8 | or | Logical OR | 1 ou Desconhecido → 1 0 ou Desconhecido → Desconhecido Desconhecido ou Desconhecido → Desconhecido |
Sim |
1 O operando de cadeia de caracteres ainda é convertido em numérico se:
(Se a conversão falhar, o operando numérico é convertido em um operando de cadeia de caracteres 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 os unários - e not, têm associatividade da esquerda para a direita associatividade da esquerda para a direita. Os unários - e not são não associativos (ou seja -(-1) e not (not 1) devem ser usados em vez de --1 e não não 1).
Resultado da avaliação:
Os valores necessários para a avaliação da trigger são armazenados em cache pelo Zabbix Server. Por esse motivo, a avaliação do acionador causa uma carga maior no banco de dados por banco de dados por algum tempo após a reinicialização do servidor. O cache de valores não é limpo quando os valores do histórico do item são removidos (manualmente ou pelo housekeeper), portanto o servidor usará os valores armazenados em cache até que eles sejam mais antigos do que os períodos de tempo definidos nas funções de acionamento ou o servidor seja reiniciado.
A carga do processador está muito alta no servidor Zabbix.
Ao usar a função "last()", estamos fazendo referência ao valor mais recente mais recente. o /Zabbix server/system.cpu.load[all,avg1]
fornece um nome curto do parâmetro monitorado o parâmetro monitorado. Ele especifica que o host é "Zabbix server e a chave que está sendo monitorada é 'system.cpu.load[all,avg1]'. Finalmente, >5
significa que o acionador está no estado PROBLEM sempre que a medição de carga do processador mais recente do Zabbix mais recente da carga do processador do servidor Zabbix for maior que 5.
o site www.example.com está sobrecarregado.
last(/www.example.com/system.cpu.load[all,avg1])>5 or min(/www.example.com/system.cpu.load[all,avg1],10m)>2
A expressão é verdadeira quando a carga atual do processador é maior que 5 ou a carga do processador foi superior a 2 nos últimos 10 minutos.
o arquivo /etc/passwd foi alterado.
last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)
A expressão é verdadeira quando o valor anterior da soma de verificação de /etc/passwd for diferente do mais recente.
Expressões semelhantes podem ser úteis para monitorar alterações em arquivos arquivos importantes, como /etc/passwd, /etc/inetd.conf, /kernel etc.
Alguém está baixando um arquivo grande da Internet.
Uso da função min:
A expressão é verdadeira quando o número de bytes recebidos na eth0 é maior que de 100 KB nos últimos 5 minutos.
Os dois nós do servidor SMTP em cluster estão fora do ar.
Observe o uso de dois hosts diferentes em uma expressão:
A expressão é verdadeira quando os dois servidores SMTP estão inativos em ambos smtp1.example.com e smtp2.example.com.
O agente Zabbix precisa ser atualizado.
Uso da função find():
A expressão será verdadeira se o Zabbix Agent tiver a versão beta8.
O servidor não pode ser acessado.
A expressão será verdadeira se o host "example.example.com" estiver inacessível mais de mais de 5 vezes nos últimos 30 minutos.
Nenhum batimento cardíaco nos últimos 3 minutos.
Uso da função nodata():
Para utilizar esse acionador, o 'tick' deve ser definido como um Zabbix trapper. O host deve enviar periodicamente dados para esse item usando zabbix_sender. Se nenhum dado for recebidos em 180 segundos, o valor do acionador se tornará PROBLEM.
Observe que "nodata" pode ser usado para qualquer tipo de item.
Atividade da CPU no período noturno.
Uso da função time():
O acionador pode mudar seu estado para problema somente no período noturno (00:00 - 06:00).
Atividade da CPU a qualquer momento com exceção.
Uso da função time() e do operador not:
min(/zabbix/system.cpu.load[all,avg1],5m)>2
e não (dayofweek()=7 e time()>230000)
and not (dayofweek()=1 and time()<010000)
O acionador pode mudar seu estado para problema a qualquer momento, exceto por 2 horas em uma mudança de semana (domingo, 23:00 - segunda-feira, 01:00).
Verificar se a hora local do cliente está sincronizada com a hora do servidor Zabbix.
Uso da função fuzzytime():
O acionador mudará para o estado de problema caso a hora local no servidor do servidor MySQL_DB e do servidor Zabbix for diferente em mais de 10 segundos. Observe que que o "system.localtime" deve ser configurado como uma verificação [passiva check] (/manual/appendix/items/activepassive#passive_checks).
Comparação da carga média de hoje com a carga média do mesmo horário ontem (usando a mudança de horário como now-1d
).
Esse acionador será disparado se a carga média da última hora superar a carga média da mesma hora de ontem mais de duas vezes.
Usar o valor de outro item para obter um limite de acionamento:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
O acionador será disparado se o armazenamento livre cair abaixo de 10%.
Usando resultado da avaliação para obter o número de acionadores acima de um limite:
(last(/server1/system.cpu.load[all,avg1])>5) + (last(/server2/system.cpu.load[all,avg1])>5) + (last(/server3/system.cpu.load[all,avg1])>5)>=2
O acionador será acionado se pelo menos dois dos acionadores na expressão estiverem em um estado problemático.
Comparação de valores de string de dois itens - os operandos aqui são funções que retornam strings.
Problema: criar um alerta se a versão do Ubuntu for diferente em diferentes hosts
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Comparação de dois valores de string - os operandos são:
Problema: detectar alterações na consulta DNS
A chave do item é:
com macros definidas como
e normalmente retorna:
Portanto, nossa expressão de acionamento para detectar se o resultado da consulta ao DNS se desviou do resultado esperado é:
last(/Zabbix server/net.dns.record[8.8.8.8,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME} {$DNS_RESOURCE_RECORD_TYPE} 0 mail.{$WEBSITE_NAME}"
Observe as aspas ao redor do segundo operando.
Comparação de dois valores de string - os operandos são:
Problema: detectar se o conteúdo do arquivo /tmp/hello
é igual a:
Opção 1) escrever a string diretamente
Observe como os caracteres \ e " são escapados quando a cadeia de caracteres é comparada diretamente.
Opção 2) usar uma macro
na expressão:
Comparação de períodos de longo prazo.
Problema: a carga do servidor Exchange aumentou em mais de 10% lameses
Você também pode usar a opção Event name na configuração do acionador para criar uma mensagem de alerta significativa, por exemplo, para receber algo como
"A carga do servidor Exchange aumentou em 24% in de julho (0,69) em comparação com junho (0,56)"
o nome do evento deve ser definido como:
Load of {HOST.HOST} server increased by {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% in {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) comparing to {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})
Também é útil permitir o fechamento manual na configuração do acionador para esse tipo de problema esse tipo de problema.
Você tem um exemplo de trigger expressions que pode ser útil para outras pessoas? Utilize o formulário Example suggestion form para enviá-lo aos desenvolvedores do Zabbix.
Às vezes, é necessário um intervalo entre os estados de problema e de recuperação, em vez de um simples limite. Por exemplo, se quisermos definir um que informe um problema quando a temperatura da sala do servidor for superior a 20°C e quisermos que ele permaneça no estado de problema até que a temperatura caia para menos de 15°C, um simples limite de disparo de 20°C não será suficiente.
Em vez disso, precisamos definir uma expressão de acionamento para o evento problemático primeiro (temperatura acima de 20°C). Em seguida, precisamos definir uma condição de recuperação adicional (temperatura abaixo de 15°C). Isso é feito definindo um parâmetro parâmetro adicional Expressão de recuperação quando defining um acionador.
Nesse caso, a recuperação do problema ocorrerá em duas etapas:
A expressão de recuperação será avaliada somente quando o evento de problema for resolvido primeiro.
O fato de a expressão de recuperação ser VERDADEIRA por si só não resolve um problema se a expressão do problema ainda for VERDADEIRA!
A temperatura na sala do servidor está muito alta.
Expressão do problema:
Expressão de recuperação:
O espaço livre em disco é muito baixo.
Expressão do problema: é inferior a 10 GB nos últimos 5 minutos
Expressão de recuperação: é mais de 40 GB nos últimos 10 minutos
Em geral, um operando desconhecido (como um item não suportado) na expressão fará com que o valor do acionador seja imediatamente convertido em Unknown
.
Entretanto, em alguns casos, operandos desconhecidos (itens não suportados, erros de função) são admitidos na avaliação da expressão:
nodata()
é avaliada independentemente do fato de o item referenciado ser suportado ou não.1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ...
" pode ser avaliada para um resultado conhecido ("1" ou "Problema"),0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ...
" pode ser avaliado com um resultado conhecido ('0' ou "OK") O Zabbix tenta avaliar essas expressões lógicas usando itens não suportados itens não suportados como operandos desconhecidos. Nos dois casos acima, será produzido um valor conhecido ("Problema" ou "OK", respectivamente); em todos os outros casos, o acionador será avaliado como "Desconhecido".Desconhecido
e participa como operando desconhecido em outras avaliações de expressão.Observe que os operandos desconhecidos podem "desaparecer" somente em expressões lógicas, conforme descritas acima. Em expressões aritméticas, os operandos desconhecidos sempre levam ao o resultado Desconhecido
(exceto divisão por 0).
Uma expressão que resulta em Unknown
não altera o estado do acionador ("Problem/OK"). Portanto, se era "Problema" (consulte o Caso 1), ele permanece no mesmo estado de problema mesmo que a parte conhecida seja resolvida ("1" se torna "OK") seja resolvida ('1' se torna '0'), porque a expressão agora é avaliada como Unknown
e isso não altera o estado do acionador.
Se uma expressão de acionamento com vários itens não suportados for avaliada como Unknown
, a mensagem de erro no frontend se refere ao último item item sem suporte avaliado.