Áú»¢¶Ä²©

Esta ¨¦ uma tradu??o da p¨¢gina de documenta??o original em ingl¨ºs. Ajude-nos a torn¨¢-la melhor.

2 Express?es de Trigger

Vis?o geral

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:

  min(/Áú»¢¶Ä²© server/net.if.in[eth0,bytes],5m)>100K

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:

  • express?o de problema - define as condi??es do problema
  • express?o de recupera??o (opcional) - define condi??es adicionais para a resolu??o do problema

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.

Fun??es

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).

Par?metros de fun??o

Os par?metros de fun??o permitem especificar:

  • chave do host e do item (fun??es que fazem refer¨ºncia apenas ao hist¨®rico do item do host)
  • par?metros espec¨ªficos da fun??o
  • outras express?es (n?o dispon¨ªveis para fun??es que fazem refer¨ºncia ao hist¨®rico de itens do host), consulte outras express?es para exemplos)

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.

Par?metros espec¨ªficos da fun??o

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'
Deslocamento de tempo

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
Outras express?es

Os par?metros da fun??o podem conter outras express?es, como as seguintes sintaxe:

min(min(/host/key,1h),min(/host2/key2,1h)*10)

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)

Operadores

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:

  • outro operando for num¨¦rico
  • um operador diferente de = ou <> for usado em um operando

(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:

  • <, <=, >, >=, =, <> Operadores retornar?o '1' na express?o do trigger se a rela??o especificada for verdadeira e '0' se for falsa. Se pelo menos um operando for Desconhecido, o resultado ser¨¢ Desconhecido;
  • and para operandos conhecidos retornar¨¢ '1' se ambos os operandos forem diferentes de '0'; caso contr¨¢rio, retornar¨¢ '0'; para operandos desconhecidos, and retornar¨¢ '0' somente se um dos operandos for igual a '0'; caso contr¨¢rio, retornar¨¢ 'Desconhecido';
  • or para operandos conhecidos retornar¨¢ '1' se qualquer um dos operandos for diferente de '0'; caso contr¨¢rio, retornar¨¢ '0'; para operandos desconhecidos, or retornar¨¢ '1' somente se um dos operandos for diferente de '0'; caso contr¨¢rio, retornar¨¢ 'Desconhecido';
  • O resultado do operador de nega??o l¨®gica not para um operando conhecido ¨¦ '0' se o valor do seu operando for diferente de '0'; '1' se o valor do seu operando for igual a '0'. Para um operando desconhecido, not retornar¨¢ 'Desconhecido'.

Cache de valores

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.

Exemplos de triggers

Exemplo 1

A carga do processador est¨¢ muito alta no servidor Áú»¢¶Ä²©.

last(/Áú»¢¶Ä²© server/system.cpu.load[all,avg1])>5

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.

Exemplo 2

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.

Exemplo 3

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.

Exemplo 4

Algu¨¦m est¨¢ baixando um arquivo grande da Internet.

Uso da fun??o min:

min(/www.example.com/net.if.in[eth0,bytes],5m)>100K

A express?o ¨¦ verdadeira quando o n¨²mero de bytes recebidos na eth0 ¨¦ maior que de 100 KB nos ¨²ltimos 5 minutos.

Exemplo 5

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:

last(/smtp1.example.com/net.tcp.service[smtp])=0 e last(/smtp2.example.com/net.tcp.service[smtp])=0

A express?o ¨¦ verdadeira quando os dois servidores SMTP est?o inativos em ambos smtp1.example.com e smtp2.example.com.

Exemplo 6

O agente Áú»¢¶Ä²© precisa ser atualizado.

Uso da fun??o find():

find(/example.example.com/agent.version,, "like", "beta8")=1

A express?o ser¨¢ verdadeira se o Áú»¢¶Ä²© Agent tiver a vers?o beta8.

Exemplo 7

O servidor n?o pode ser acessado.

count(/example.example.com/icmpping,30m,, "0")>5

A express?o ser¨¢ verdadeira se o host "example.example.com" estiver inacess¨ªvel mais de 5 vezes nos ¨²ltimos 30 minutos.

Exemplo 8

Nenhum batimento card¨ªaco nos ¨²ltimos 3 minutos.

Uso da fun??o nodata():

nodata(/example.example.com/tick,3m)=1

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.

Exemplo 9

Atividade da CPU durante a noite.

Uso da fun??o time():

min(/Áú»¢¶Ä²© server/system.cpu.load[all,avg1],5m)>2 and time()<060000

O trigger pode alterar seu estado para problema apenas durante o per¨ªodo noturno (00:00 - 06:00).

Exemplo 10

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).

Exemplo 11

Verificar se a hora local do cliente est¨¢ sincronizada com a hora do servidor Áú»¢¶Ä²©.

Uso da fun??o fuzzytime():

fuzzytime(/MySQL_DB/system.localtime,10s)=0

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).

Exemplo 12

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).

avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2

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.

Exemplo 13

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%.

Exemplo 14

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.

Exemplo 15

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])
Exemplo 16

Compara??o de dois valores de string - os operandos s?o:

  • uma fun??o que retorna uma string
  • uma combina??o de macros e strings

Problema: detectar altera??es na consulta DNS

A chave do item ¨¦:

net.dns.record[8.8.8.8,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1]

com macros definidas como

{$WEBSITE_NAME} = example.com
       {$DNS_RESOURCE_RECORD_TYPE} = MX

e normalmente retorna:

example.com MX 0 mail.example.com

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.

Exemplo 17

Compara??o de dois valores de string - os operandos s?o:

  • uma fun??o que retorna uma string
  • uma constante de string com caracteres especiais \ e "

Problema: detectar se o conte¨²do do arquivo /tmp/hello ¨¦ igual a:

\" //hello ?\"

Op??o 1) escrever a string diretamente

last(/Áú»¢¶Ä²© server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\\""

Observe como os caracteres \?e " s?o escapados quando a cadeia de caracteres ¨¦ comparada diretamente.

Op??o 2) usar uma macro

{$HELLO_MACRO} = \" //hello ?\"

na express?o:

last(/Áú»¢¶Ä²© server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Exemplo 18

Compara??o de per¨ªodos de longo prazo.

Problema: a carga do servidor Exchange aumentou em mais de 10% no m¨ºs passado

trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)

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.

Histerese

?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:

  • Primeiro, a express?o de problema (temperatura acima de 20¡ãC) ter¨¢ que ser avaliada como FALSA
  • Segundo, a express?o de recupera??o (temperatura abaixo de 15¡ãC) ter¨¢ que ser avaliada como VERDADEIRA

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!

Exemplo 1

A temperatura na sala do servidor est¨¢ muito alta.

Express?o problema:

last(/server/temp)>20

Express?o de recupera??o:

last(/server/temp)<=15
Exemplo 2

O espa?o livre em disco ¨¦ muito baixo.

Express?o problema: ¨¦ inferior a 10 GB nos ¨²ltimos 5 minutos

max(/server/vfs.fs.size[/,free],5m)<10G

Express?o de recupera??o: ¨¦ mais de 40 GB nos ¨²ltimos 10 minutos

min(/server/vfs.fs.size[/,free],10m)>40G

Express?es com operandos desconhecidos

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:

  • A fun??o nodata() ¨¦ avaliada independentemente de o item referenciado ser suportado ou n?o.
  • Express?es l¨®gicas com OR e AND podem ser avaliadas para valores conhecidos em dois casos, independentemente de operandos desconhecidos:
    • Caso 1: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." pode ser avaliado para um resultado conhecido ('1' ou "Problema"),
    • Caso 2: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." pode ser avaliado para um resultado conhecido ('0' ou "OK").
      O Áú»¢¶Ä²© tenta avaliar essas express?es l¨®gicas tratando itens n?o suportados como operandos desconhecidos. Nos dois casos acima, um valor conhecido ser¨¢ produzido ("Problema" ou "OK", respectivamente); em casos all other (todos os outros), o trigger ser¨¢ avaliado como Unknown.
  • Se a avalia??o da fun??o para um item suportado resultar em erro, o valor da fun??o se torna 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.