Les expressions emprades a [triggers(/manual/config/triggers) són molt flexibles. Podeu emprar-los per crear proves lògiques complexes de les estadístiques monitorades.
Una expressió senzilla empra una funció que s'aplica a l'element amb alguns paràmetres. La funció retorna un resultat que es compara amb el llindar, emprant un operador i una constant.
La sintaxi d'una expressió útil senzilla és function(/host/key,parameter)<operator><constant>
.
Per exemple: min(/Servidor Zabbix/net.if.in[eth0,bytes],5m)>100K
s'activarà si el nombre d'octets rebuts en els darrers cinc minuts sempre ha estat superior a 100 koctets.
Tot i que la sintaxi és exactament la mateixa, funcionalment hi ha dos tipus d'expressions triggers:
Quan es defineix una única expressió de problema, aquesta expressió s'emprarà tant com a llindar del problema com a llindar de recuperació del problema. Tan bon punt l'expressió del problema s'avalua com a "VERTADER", hi ha un problema. Tan bon punt l'expressió del problema s'avalua com a "FALS", el problema es resol.
Quan es defineix tant l'expressió del problema com l'expressió de recuperació addicional, la resolució del problema es fa més complexa: no només l'expressió del problema ha d'ésser "FALS", sinó que també l'expressió de recuperació ha de ser "VERTADER". Això és útil per evitar la fluctuació del trigger a la histèresi.
És improductiu emprar la macro {TRIGGER.VALUE} a una expressió de recuperació perquè aquesta expressió només s'avalua quan el trigger es troba en l'estat "Problema". En conseqüència, {TRIGGER.VALUE} sempre es resoldrà a "1" (que indica un estat "Problema") mentre s'avalua l'expressió.
Les funcions permeten calcular els valors recollits (mitjana, mínim, màxim, suma), cercar cadenes, fer referència a l'hora actual i altres factors.
Hi ha disponible una llista completa de funcions admeses.
En general, les funcions retornen valors numèrics amb finalitats de comparació. Quan tornen cadenes, la comparació és possible amb els operadors = i <> (veieu l'exemple).
Els paràmetres de funció permeten especificar:
L'equip i la clau de l'element es poden especificar com a "/host/key". L'element referenciat ha d'estar en un estat compatible (excepte per a la funció nodata(), que també es calcula per als elements no compatibles).
Mentre que altres triggers com a paràmetres de funció es limiten a funcions no històriques en triggers, aquesta limitació no s'aplica als elements calculats.
Els paràmetres específics de la funció es posen després de la clau d'element i es separen de la clau d'element per una coma. Veieu les funcions compatibles per obtindre una llista completa d'aquests paràmetres.
La majoria de les funcions numèriques accepten el temps com a paràmetre. Podeu emprar segons o sufixos de temps per indicar l'hora. Precedit d'una marca de hash, el paràmetre té un altre significat:
Expressió | Descripció |
---|---|
sum(/host/key,10m) | Suma dels valors dels darrers 10 minuts. |
sum(/host/key,#10) | Suma dels darrers deu valors. |
Els paràmetres amb una marca de hash tenen un significat diferent amb la funció darrera: denoten l'enèsim valor anterior, de manera que tinguent en compte els valors 3, 7, 2, 6, 5 (del més nou al més antic):
last(/host/key,#2)
retornaria '7'last(/host/key,#5)
retornaria '5'S'admet un desplaçament temporal opcional amb temps o nombre de valors com a paràmetre de funció. Empreu aquest paràmetre per fer referència a dades d'un període de temps anterior.
El desplaçament de temps comença amb "ara" - especificant l'hora actual, i va seguit de "+N<unitat de temps>" o "-N<unitat de temps>" - per sumar o restar N unitats de temps.
Per exemple, avg(/host/key,1h:now-1d)
retornarà el valor mitjà d'una hora de fa un dia.
Diferència horària amb períodes de temps absoluts
Els períodes de temps absoluts s'admeten a la configuració de compensació horària, per exemple, de mitjanit a mitjanit durant un dia, de dilluns a diumenge durant una setmana, del primer al darrer dia del mes durant un mes.
El desplaçament de temps per a períodes de temps absoluts comença amb "ara" - especificant el l'hora actual, i va seguida de qualsevol nombre d'operacions de temps: /<unitat de temps>
- defineix l'inici i el final de la unitat de temps, per exemple, de mitjanit a mitjanit durant un dia, +N<unitat de temps>
o -N<unitat de temps>
- per sumar o restar N unitats de temps.
Tingueu en compte que el valor de compensació temporal pot ser superior o igual a 0, mentre que el valor del període mínim és 1.
Paràmetre | Descripció |
---|---|
1d:now/d | Ahir |
1d:ara/d+1d | Avui |
2d:ara/d+1d | Darrers 2 dies |
1w:now/w | La setmana passada |
1w:now/w+1w | Aquesta setmana |
Els paràmetres de funció poden contindre altres expressions, com a la sintaxi següent:
Veieu que altres expressions no es poden pas emprar si la funció fa referència a l'històric de l'element. Per exemple, la sintaxi següent no és pas permesa:
min(/host/key,#5*10)
Els triggers admeten els operadors següents (en prioritat d'execució descendent):
Prioritat | Operador | Definició | Notes per a valors desconeguts | Forçar l'operand a flotant1 |
---|---|---|---|---|
1 | - | Menys unitari | -Desconegut → Desconegut | Sí |
2 | no | NO lògic | no Desconegut → Desconegut | Sí |
3 | * | Multiplicació | 0 * Desconegut → Desconegut (sí, Desconegut, no 0 - per no perdre Desconegut en operacions aritmètiques) <br >1,2 * Desconegut → Desconegut |
Sí |
/ | Divisió | Desconegut / 0 → error Desconegut / 1.2 → Desconegut 0.0 / Desconegut → Desconegut |
Sí | |
4 | + | Signe més aritmètic | 1,2 ***** Desconegut → Desconegut | Sí |
- | Signe menys aritmètic | 1,2 - Desconegut → Desconegut | Sí | |
5 | < | L'operador es defineix com a menor de: A<B ⇔ (A<B-0,000001) |
1,2 < Desconegut → Desconegut | Sí |
<= | L'operador es defineix com inferior o igual a: A<=B ⇔ (A≤B+0,000001) |
Desconegut <= Desconegut → Desconegut | Sí | |
> | L'operador es defineix com més gran que: A>B ⇔ (A>B+0,000001) |
Sí | ||
>= | L'operador es defineix com més gran o igual a: A>=B ⇔ (A≥B-0,000001) |
Sí | ||
6* | = | L'operador es defineix com a igual: A=B ⇔ (A≥B-0,000001) i (A≤B+0,000001) |
No 1 | |
<> | DL'operador es defineix com a diferent: A<>B ⇔ (A<B-0,000001) o (A>B+0,000001) |
No 1 | ||
7 | i | I lògic | 0 i Desconegut → 0 1 i Desconegut → Desconegut Desconegut i Desconegut → Desconegut |
Sí |
8 | o | O lògic | 1 o Desconegut → 1 0 o Desconegut → Desconegut Desconegut o Desconegut → Desconegut |
Sí |
1 L'operand de cadena sempre es converteix a numèric si:
(Si la conversió falla, l'operand numèric es converteix en un operand de cadena i els dos operands es comparen com a cadenes.)
Els operadors no, i i o distingeixen entre majúscules i minúscules i han d'ésser minúscules. També s'han d'envoltar per espais o parèntesis.
Tots els operadors excepte els unaris - i no tenen associativitat d'esquerra a dreta. Els unitaris - i no no són associatius (és a dir, -(-1) i no (no 1) s'han d'emprar en comptes de --1 i no no 1).
Resultat de l'avaluació:
El servidor Zabbix guarda a la memòria cau els valors necessaris per a l'avaluació del trigger. A causa d'aquesta avaluació del trigger, la càrrega de la base de dades és més alta durant un temps després de reiniciar el servidor. La memòria cau de valors no s'esborra quan s'esborren els valors de l'historial d'elements (manualment o mitjançant el procediment de neteja), de manera que el servidor emprarà els valors de la memòria cau fins que siguin més antics en els períodes definits a les funcions de trigger o el servidor es reiniciï.
Si no hi ha dades recents a la memòria cau i no hi ha un període de consulta definit a la funció, Zabbix es remuntarà per defecte a la darrera setmana per consultar a la base de dades els valors històrics.
La càrrega de la CPU és massa alta al servidor Zabbix.
Mitjançant la funció 'last()', ens referim al valor més nou. /Zabbix server/system.cpu.load[all,avg1]
dóna un nom curt del paràmetre monitorat. Especifica que l'equip és "servidor Zabbix" i la clau monitorada és "system.cpu.load[all,avg1]". Finalment, ">5" significa que el trigger és en estat PROBLEMA sempre que la mesura de càrrega de CPU més nova del servidor Zabbix sigui superior a 5.
www.example.com és sobrecarregat.
last(/www.example.com/system.cpu.load[all,avg1])>5 o min(/www.example.com/system.cpu.load[all,avg1],10m)>2
L'expressió és certa quan la càrrega actual de la CPU és superior a 5 o la càrrega de la CPU ha estat superior a 2 en els darrers 10 minuts.
/etc/passwd ha estat modificat.
last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)
L'expressió és certa quan el valor de la suma de comprovació /etc/passwd anterior difereix del més recent.
Expressions similars poden ésser útils per monitorar els canvis en fitxers importants, com ara /etc/passwd, /etc/inetd.conf, /kernel, etc.
Algú baixa un fitxer gran d'Internet.
Emprant la funció min:
L'expressió és certa quan el nombre d'octets rebuts a eth0 és superior a 100 Ko en els darrers 5 minuts.
Els dos nodes del servidor SMTP agrupats són aturats.
Tingueu en compte l'ús de dos equips diferents en una expressió:
L'expressió és certa quan els dos servidors SMTP siguin aturats a smtp1.example.com i smtp2.example.com.
S'ha d'actualitzar l'agent Zabbix.
Emprant la funció find():
L'expressió és certa si l'agent de Zabbix és a la versió beta8.
El servidor és inaccessible.
L'expressió és certa si l'equip "example.example.com" no és accessible després de 5 cops durant els darrers 30 minuts.
Cap heartbeat durant els darrers 3 minuts.
Emprant la funció nodata():
Per emprar aquest trigger, "tick" s'ha de definir com un element Zabbix trapper. L'equip hauria d'enviar periòdicament dades d'aquest element mitjançant zabbix_sender. Si no es reben dades en 180 segons, el valor trigger es converteix en PROBLEMA.
Tingueu en compte que "nodata" es pot emprar per a qualsevol tipus d'element.
Activitat de la CPU a la nit.
Emprant la funció time():
El trigger només pot canviar el seu estat a problema en horari nocturn (00:00-06:00).
Activitat de la CPU en tot moment excepte excepcions.
Emprant la funció time() i l'operador no:
min(/zabbix/system.cpu.load[all,avg1],5m)>2
i no (dia de la setmana()=7 i hora()>230000)
i no (dia de la setmana()=1 i hora()<010000)
El trigger pot canviar el seu estat a problema en qualsevol moment, excepte durant 2 hores durant un canvi de setmana (diumenge, 23:00 - dilluns, 01:00).
Comproveu si l'hora del client local és sincronitzada amb l'hora del servidor Zabbix.
Emprant la funció fuzzytime():
El trigger passarà a l'estat del problema si l'hora local al servidor MySQL_DB i al servidor Zabbix difereixen més de 10 segons. Tingueu en compte que 'system.localtime' s'ha de configurar com a comprovació passiva.
Comparació de la càrrega mitjana d'avui amb la càrrega mitjana de la mateixa hora d'ahir (emprant el desplaçament de temps com a ara-1d
).
El trigger s'activarà si la càrrega mitjana de la darrera hora supera la càrrega mitjana de la mateixa hora d'ahir més del doble.
Empreu el valor d'un altre element per obtindre un llindar d'activació:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
El trigger es dispararà si l'espai lliure baixa per sota del 10%.
Emprant resultat de l'avaluació per obtindre el nombre de triggers per sobre d'un llindar:
(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
El trigger s'activarà si almenys dos dels triggers de l'expressió són en estat problemàtic.
Comparant els valors de cadenes de dos elements: els operands aquí són funcions que retornen cadenes.
Problema: creeu una alerta si la versió d'Ubuntu és diferent a diferents equips
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Comparació de dos valors de cadena. Els operands són:
Problema: detectar canvis en la consulta de DNS
La clau de l'element és:
amb macros definides com
i normalment retorna:
Per tant, la nostra expressió trigger per detectar si el resultat de la consulta DNS es desvia del resultat esperat és:
last(/Zabbix server/net.dns.record[192.0.2.0,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME} {$DNS_RESOURCE_RECORD_TYPE} 0 mail.{$WEBSITE_NAME}"
Observeu les cometes al segon operand.
Comparació de dos valors de cadena. Els operands són:
Problema: detecteu si el contingut del fitxer /tmp/hello
és igual a:
Opció 1) escriure la cadena directament
Observeu com s'escapen els caràcters \ i " quan es compara directament la cadena.
Opció 2) emprar una macro
a l'expressió:
Compara llargs períodes de temps.
Problema: la càrrega del servidor Exchange ha pujat més d'un 10% durant el darrer mes
També podeu emprar el camp Nom de l'esdeveniment a la configuració del trigger per crear un missatge d'alerta significatiu, per exemple per rebre alguna cosa com ara
"La càrrega del servidor Exchange va pujar un 24% al juliol (0,69) en comparació amb el juny (0,56)"
el nom de l'esdeveniment s'ha de definir com:
La càrrega del servidor {HOST.HOST} ha pujat un {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M) }.fmtnum(0)}% en {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) en comparació amb {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})
També és útil permetre el tancament manual de la configuració del trigger per a aquest tipus de problema.
Teniu un exemple d'expressions de trigger que pugui ser útil per a altres? Empreu el Formulari de suggeriments d'exemple per enviar-lo als desenvolupadors de Zabbix.
De vegades cal un interval entre els estats de problema i de recuperació, en lloc de només un llindar. Per exemple, si volem establir un trigger per informar d'un problema quan la temperatura de la sala del servidor supera els 20 °C i volem que es mantingui en l'estat de problema fins que la temperatura baixi dels 15 °C, un llindar d'activació simple a 20 °C no serà suficient.
el que hem de fer és, primer, definir un trigger per a l'esdeveniment problemàtic (temperatura superior a 20 °C). Tot seguit, hem de definir una condició de recuperació addicional (temperatura inferior a 15 °C). Per fer-ho, definiu un paràmetre addicional Expressió de recuperació quan definiu el trigger.
En aquest cas, la recuperació del problema es farà en dues passes:
L'expressió de recuperació s'avaluarà només quan es resolgui primer l'esdeveniment problema.
L'expressió de recuperació per si sola a TRUE no resol el problema si l'expressió problema encara és TRUE!
La temperatura a la sala de servidors és massa alta.
Expressió del problema:
Expressió de recuperació:
L'espai lliure de disc és molt baix.
Expressió del problema: menys de 10 Go durant els darrers 5 minuts
Expressió de recuperació: més de 40Go durant els 10 darrers minuts
Normalment, un operand desconegut (com ara un element no admès) a l'expressió estableix immediatament el valor de trigger a "Desconegut".
Tanmateix, en alguns casos es permeten operands desconeguts (elements no admesos, errors de funció) en l'avaluació d'expressions:
nodata()
s'avalua si l'element referenciat és compatible o no.1 o some_function(unsupported_item1) o some_function(unsupported_item2) o ...
" es pot avaluar a un resultat conegut ('1' o "Problema"),0 and some_function(unsupported_item1) i some_function(unsupported_item2) i ...
" es poden avaluar en un resultat conegut ('0' o "OK").Tingueu en compte que els operands desconeguts només poden "desaparèixer" en expressions lògiques tal com es descriu anteriorment. En les expressions aritmètiques, els operands desconeguts sempre condueixen al resultat "Desconegut" (excepte la divisió per 0).
Una expressió el resultat de la qual és "Desconegut" no modifica l'estat del trigger ("Problema/D'acord"). Per tant, si era "Problema" (vegeu el cas 1), roman en el mateix estat encara que la part coneguda es resolgui ('1' es converteix a '0'), perquè l'expressió ara s'avalua com a 'Desconegut' i no canvia l'estat del trigger.
Si un trigger amb diversos elements no admesos s'avalua com a "Desconegut", el missatge d'error de la interfície fa referència al darrer element no admès avaluat.