As express?es usadas em triggers s?o flex¨ªveis. Voc¨º pode us¨¢-las para criar testes l¨®gicos complexos em rela??o 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 threshold, usando um operador e uma constante.
A sintaxe de uma express?o simples ¨²til ¨¦ function(/host/key,parameter)<operator><constant>
.
Por exemplo:
disparar¨¢ o trigger se o n¨²mero de bytes recebidos nos ¨²ltimos cinco minutos estiver sempre acima de 100 kilobytes.
Embora a sintaxe seja exatamente a mesma, do ponto de vista funcional existem dois tipos de express?es de trigger:
Ao definir apenas uma express?o de problema, essa express?o ser¨¢ usada tanto como o threshold do problema quanto o threshold de recupera??o. Assim que a express?o de problema for avaliada como VERDADEIRA, h¨¢ um problema. Assim que a express?o de problema for avaliada como FALSA, o problema ser¨¢ resolvido.
Ao definir tanto a express?o de problema quanto a express?o de recupera??o suplementar, a resolu??o do problema se torna mais complexa: n?o somente a express?o de problema precisa ser FALSA, mas tamb¨¦m a express?o de recupera??o precisa ser VERDADEIRA. Isso ¨¦ ¨²til para criar hysteresis e evitar oscila??o do trigger.
? improdutivo usar a macro {TRIGGER.VALUE} em uma express?o de recupera??o porque esta express?o s¨® ¨¦ avaliada quando o trigger est¨¢ no estado de "Problema". Consequentemente, {TRIGGER.VALUE} sempre ser¨¢ resolvido como "1" (o que indica um estado de "Problema") ao avaliar a express?o.
As fun??es permitem calcular os valores coletados (m¨¦dia, m¨ªnimo, m¨¢ximo, soma), localizar strings, 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 trigger como par?metros de fun??o sejam limitadas a fun??es n?o hist¨®ricas em triggers, 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 fun??es suportadas 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 o tempo ou contagem de valor como par?metro da fun??o. Esse par?metro permite fazer refer¨ºncia a dados de um per¨ªodo no passado.
O deslocamento de tempo come?a com now
- especificando o tempo atual, e ¨¦ seguido 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 de um dia atr¨¢s.
O deslocamento de tempo especificado em meses (M) e anos (y) ¨¦ suportado apenas para trend functions. Outras fun??es suportam segundos (s), minutos (m), horas (h), dias (d) e semanas (w).
Deslocamento de tempo com per¨ªodos absolutos
Per¨ªodos de tempo absolutos s?o suportados no par?metro de deslocamento de tempo, por exemplo, da meia-noite ¨¤ meia-noite para um dia, de segunda a domingo para uma semana, do primeiro ao ¨²ltimo dia do m¨ºs para um m¨ºs.
O deslocamento de tempo para per¨ªodos absolutos come?a com now
- especificando o tempo atual, e ¨¦ seguido por qualquer n¨²mero de opera??es de tempo: /<time unit>
- define o in¨ªcio e o fim da unidade de tempo, por exemplo, da meia-noite ¨¤ meia-noite para 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.
Par?metro | Descri??o |
---|---|
1d:now/d | Ontem |
1d:now/d+1d | Hoje |
2d:now/d+1d | Dois ¨²ltimos dias |
1w:now/w | Semana passada |
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 triggers (em ordem decrescente de prioridade de execu??o):
Prioridade | Operador | Defini??o | Notas para valores desconhecidos | For?a a convers?o do operando para float 1 |
---|---|---|---|---|
1 | - | Un¨¢rio negativo | -Desconhecido ¡ú Desconhecido | Sim |
2 | not | L¨®gico NOT | n?o 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 ¡ú error 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 <= UDesconhecido ¡ú 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) |
No 1 | |
<> | N?o igual. O operador ¨¦ definido como: A<>B ? (A<B-0.000001) ou (A>B+0.000001) |
No 1 | ||
7 | and | L¨®gico AND | 0 and Desconhecido ¡ú 0 1 and Desconhecido ¡ú Desconhecido Desconhecido and Desconhecido ¡ú Desconhecido |
Sim |
8 | or | L¨®gico OR | 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 o operando string e ambos os operandos s?o comparados como strings.)
Os operadores not, and e or s?o sens¨ªveis a mai¨²sculas e min¨²sculas e devem ser escritos em min¨²sculas. Eles tamb¨¦m precisam estar cercados por espa?os ou par¨ºnteses.
Todos os operadores, exceto o un¨¢rio - e not, t¨ºm associatividade da esquerda para a direita. Os operadores un¨¢rios - 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:
Os valores necess¨¢rios para a avalia??o de trigger s?o armazenados em cache pelo servidor Áú»¢¶Ä²©. Devido a isso, a avalia??o de triggers causa uma maior carga no banco de dados por algum tempo ap¨®s a reinicializa??o do servidor. O cache de valores n?o ¨¦ limpo quando os valores hist¨®ricos dos itens s?o removidos (seja manualmente ou pelo housekeeper), ent?o o servidor continuar¨¢ usando os valores armazenados em cache at¨¦ que eles sejam mais antigos do que os per¨ªodos de tempo definidos nas fun??es de trigger ou at¨¦ que o servidor seja reiniciado.
A carga do processador est¨¢ muito alta no servidor Áú»¢¶Ä²©.
Ao usar a fun??o "last()", estamos fazendo refer¨ºncia ao valor mais recente. o /Áú»¢¶Ä²© server/system.cpu.load[all,avg1]
fornece um nome curto do par?metro monitorado o par?metro monitorado. Ele especifica que o host ¨¦ "Áú»¢¶Ä²© server e a chave que est¨¢ sendo monitorada ¨¦ 'system.cpu.load[all,avg1]'. Finalmente, >5
significa que o trigger est¨¢ no estado PROBLEM sempre que a medi??o de carga do processador mais recente do Áú»¢¶Ä²© for maior que 5.
O 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 /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 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 Áú»¢¶Ä²© precisa ser atualizado.
Uso da fun??o find():
A express?o ser¨¢ verdadeira se o Áú»¢¶Ä²© 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 5 vezes nos ¨²ltimos 30 minutos.
Nenhum batimento card¨ªaco nos ¨²ltimos 3 minutos.
Uso da fun??o nodata():
Para utilizar esse trigger, o 'tick' deve ser definido como um Áú»¢¶Ä²© trapper. O host deve enviar periodicamente dados para esse item usando zabbix_sender. Se nenhum dado for recebidos em 180 segundos, o valor do trigger se tornar¨¢ PROBLEM.
Observe que "nodata" pode ser usado para qualquer tipo de item.
Atividade da CPU durante a noite.
Uso da fun??o time():
O trigger pode alterar seu estado para problema apenas durante o 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 trigger 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 Áú»¢¶Ä²©.
Uso da fun??o fuzzytime():
O trigger mudar¨¢ para o estado de problema caso a hora local no servidor MySQL_DB e do servidor Áú»¢¶Ä²© 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 trigger 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 trigger:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
O trigger ser¨¢ disparado se o armazenamento livre cair abaixo de 10%.
Usando resultado da avalia??o para obter o n¨²mero de triggers 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 trigger ser¨¢ acionado se pelo menos dois dos triggers 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 Áú»¢¶Ä²© server/vfs.file.contents[/etc/os-release])<>last(/LA Áú»¢¶Ä²© 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 trigger para detectar se o resultado da consulta ao DNS se desviou do resultado esperado ¨¦:
last(/Áú»¢¶Ä²© 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% no m¨ºs passado
Voc¨º tamb¨¦m pode usar a op??o Event name na configura??o do trigger para criar uma mensagem de alerta significativa, por exemplo, para receber algo como
"A carga do servidor Exchange aumentou em 24% em 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 trigger para esse tipo de problema esse tipo de problema.
?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 trigger que reporte um problema quando a temperatura da sala de servidores ultrapassar 20¡ãC e queremos que ele permane?a no estado de problema at¨¦ que a temperatura caia abaixo de 15¡ãC, um simples limite de trigger em 20¡ãC n?o ser¨¢ suficiente.
Em vez disso, precisamos definir primeiro uma express?o de trigger para o evento problema (temperatura acima de 20¡ãC). Em seguida, precisamos definir uma condi??o adicional de recupera??o (temperatura abaixo de 15¡ãC). Isso ¨¦ feito definindo um par?metro de express?o de recupera??o adicional ao definir defining um trigger.
Neste caso, a recupera??o do problema ocorrer¨¢ em duas etapas:
A express?o de recupera??o ser¨¢ avaliada apenas quando o evento problema for resolvido primeiro.
A express?o de recupera??o sendo VERDADEIRA sozinha n?o resolve o problema se a express?o problema ainda for VERDADEIRA!
A temperatura na sala do servidor est¨¢ muito alta.
Express?o problema:
Express?o de recupera??o:
O espa?o livre em disco ¨¦ muito baixo.
Express?o problema: ¨¦ inferior a 10 GB nos ¨²ltimos 5 minutos
Express?o de recupera??o: ¨¦ mais de 40 GB nos ¨²ltimos 10 minutos
Geralmente, um operando desconhecido (como um item n?o suportado) na express?o far¨¢ com que o valor do trigger seja imediatamente definido comoUnknown
.
Contudo, alguns casos de operandos desconhecidos (itens n?o suportados, erros de fun??o) s?o admitidos na avalia??o da express?o:
nodata()
¨¦ avaliada independentemente de o item referenciado ser suportado ou n?o.1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ...
" pode ser avaliado para um resultado conhecido ('1' ou "Problema"),0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ...
" pode ser avaliado para um resultado conhecido ('0' ou "OK").Unknown
.Unknown
e participa como um operando desconhecido na avalia??o posterior da express?o.Observe que operandos desconhecidos podem "desaparecer" apenas em express?es l¨®gicas, como descrito acima. Em express?es aritm¨¦ticas, operandos desconhecidos sempre levam ao resultado Unknown
(exceto divis?o por 0).
Uma express?o que resulta em Unknown
n?o altera o estado do trigger ("Problema/OK"). Portanto, se estava em "Problema" (veja o Caso 1), ele permanece no mesmo estado de problema, mesmo que a parte conhecida seja resolvida ('1' se torne '0'), pois a express?o agora ¨¦ avaliada como Unknown
, e isso n?o muda o estado do trigger.
Se uma express?o de trigger com v¨¢rios itens n?o suportados for avaliada como Unknown
, a mensagem de erro na interface se referir¨¢ ao ¨²ltimo item n?o suportado avaliado.