2 Trigger-expressie

Overzicht

De expressies die worden gebruikt in triggers zijn zeer flexibel. Je kunt ze gebruiken om complexe logische tests te maken met betrekking tot gemonitorde statistieken.

Een eenvoudige expressie maakt gebruik van een functie die wordt toegepast op het item met enkele parameters. De functie retourneert een resultaat dat wordt vergeleken met de drempelwaarde, met behulp van een operator en een constante.

De syntax van een eenvoudige nuttige expressie is function(/host/key,parameter)<operator><constant>.

Bijvoorbeeld:

min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

zal een trigger activeren als het aantal ontvangen bytes gedurende de laatste vijf minuten altijd meer dan 100 kilobytes was.

Hoewel de syntax precies hetzelfde is, zijn er vanuit functioneel oogpunt twee soorten triggerexpressies:

  • probleemexpressie - definieert de voorwaarden voor het probleem
  • hersteluitdrukking (optioneel) - definieert aanvullende voorwaarden voor het oplossen van het probleem

Bij het alleen definiëren van een probleemexpressie wordt deze expressie zowel als de drempelwaarde voor het probleem als de drempelwaarde voor het herstel van het probleem gebruikt. Zodra de probleemexpressie evalueert naar TRUE, is er een probleem. Zodra de probleemexpressie evalueert naar FALSE, is het probleem opgelost.

Bij het definiëren van zowel de probleemexpressie als de aanvullende hersteluitdrukking wordt het probleemoplossingsproces complexer: niet alleen moet de probleemexpressie FALSE zijn, maar ook de hersteluitdrukking moet TRUE zijn. Dit is handig om hysteresis te creëren en triggerflappen te voorkomen.

Functies

Functies maken het mogelijk om de verzamelde waarden te berekenen (gemiddelde, minimum, maximum, som), strings te vinden, de huidige tijd en andere factoren te refereren.

Een volledige lijst van ondersteunde functies is beschikbaar.

Normaal gesproken retourneren functies numerieke waarden voor vergelijking. Bij het retourneren van strings is vergelijking mogelijk met de = en <> operators (zie voorbeeld).

Functieparameters

Functieparameters maken het mogelijk om te specificeren:

  • host en item sleutel (functies die alleen verwijzen naar de geschiedenis van het host-item)
  • functie-specifieke parameters
  • andere expressies (niet beschikbaar voor functies die verwijzen naar de geschiedenis van het host-item, zie andere expressies voor voorbeelden)

De host en item sleutel kunnen worden gespecificeerd als /host/key. Het aangegeven item moet zich in een ondersteunde status bevinden (behalve voor de nodata() functie, die ook wordt berekend voor niet-ondersteunde items).

Terwijl andere triggerexpressies als functieparameters beperkt zijn tot niet-geschiedenisfuncties in triggers, geldt deze beperking niet voor berekende items.

Functie-specifieke parameters

Functie-specifieke parameters worden na de item sleutel geplaatst en zijn gescheiden van de item sleutel door een komma. Zie de ondersteunde functies voor een volledige lijst van deze parameters.

De meeste numerieke functies accepteren tijd als parameter. U kunt seconden of tijdsachtervoegsels gebruiken om de tijd aan te geven. Voorafgegaan door een hashtag heeft de parameter een andere betekenis:

Uitdrukking Beschrijving
sum(/host/key,10m) Som van waarden in de laatste 10 minuten.
sum(/host/key,#10) Som van de laatste tien waarden.

Parameters met een hashtag hebben een andere betekenis bij de functie last - ze geven de N-de vorige waarde aan, dus gegeven de waarden 3, 7, 2, 6, 5 (van de meest recente naar de minst recente):

  • last(/host/key,#2) geeft '7' terug
  • last(/host/key,#5) geeft '5' terug
Tijdverschuiving

Een optionele tijdverschuiving wordt ondersteund met tijd of het aantal waarden als de functieparameter. Deze parameter maakt het mogelijk om gegevens te refereren uit een periode in het verleden.

Tijdverschuiving begint met now - waarbij de huidige tijd wordt aangegeven, gevolgd door +N<tijdeenheid> of -N<tijdeenheid> - om N tijdseenheden toe te voegen of af te trekken.

Bijvoorbeeld, avg(/host/key,1h:now-1d) zal de gemiddelde waarde teruggeven voor een uur één dag geleden.

Tijdverschuiving gespecificeerd in maanden (M) en jaren (y) wordt alleen ondersteund voor trend functies. Andere functies ondersteunen seconden (s), minuten (m), uren (h), dagen (d), en weken (w).

Tijdverschuiving met absolute tijdsperioden

Absolute tijdsperioden worden ondersteund in de tijdverschuivingsparameter, bijvoorbeeld, middernacht tot middernacht voor een dag, maandag-zondag voor een week, eerste dag-laatste dag van de maand voor een maand.

Tijdverschuiving voor absolute tijdsperioden begint met now - waarbij de huidige tijd wordt aangegeven, gevolgd door een willekeurig aantal tijdsbewerkingen: /<tijdeenheid> - definieert het begin en einde van de tijdsperiode, bijvoorbeeld, middernacht tot middernacht voor een dag, +N<tijdeenheid> of -N<tijdeenheid> - om N tijdsdelen toe te voegen of af te trekken.

Houd er rekening mee dat de waarde van de tijdverschuiving groter of gelijk kan zijn aan 0, terwijl de minimumwaarde van de tijdsperiode 1 is.

Parameter Beschrijving
1d:now/d Gisteren
1d:now/d+1d Vandaag
2d:now/d+1d Laatste 2 dagen
1w:now/w Vorige week
1w:now/w+1w Deze week
Andere uitdrukkingen

Functieparameters kunnen andere uitdrukkingen bevatten, zoals in de volgende syntax:

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

Let op dat andere uitdrukkingen niet kunnen worden gebruikt als de functie verwijst naar de geschiedenis van het item. Bijvoorbeeld, de volgende syntaxis is niet toegestaan:

min(/host/key,#5*10)

Operatoren

De volgende operatoren worden ondersteund voor triggers (in dalende prioriteit van uitvoering):

Prioriteit Operator Definitie Notities voor onbekende waarden Dwing de conversie van operand naar float af 1
1 - Unair min-teken -Onbekend → Onbekend Ja
2 not Logische NIET not Onbekend → Onbekend Ja
3 * Vermenigvuldiging 0 * Onbekend → Onbekend
(ja, Onbekend, niet 0 - om
Onbekend in rekenkundige bewerkingen niet te verliezen)
1,2 * Onbekend → Onbekend
Ja
/ Delen Onbekend / 0 → fout
Onbekend / 1,2 → Onbekend
0,0 / Onbekend → Onbekend
Ja
4 + Arithmetische plus 1,2 + Onbekend → Onbekend Ja
- Arithmetische min 1,2 - Onbekend → Onbekend Ja
5 < Kleiner dan. De operator wordt gedefinieerd als:

A<B ⇔ (A<B-0,000001)
1,2 < Onbekend → Onbekend Ja
<= Kleiner dan of gelijk aan. De operator wordt gedefinieerd als:

A<=B ⇔ (A≤B+0,000001)
Onbekend <= Onbekend → Onbekend Ja
> Groter dan. De operator wordt gedefinieerd als:

A>B ⇔ (A>B+0,000001)
Ja
>= Groter dan of gelijk aan. De operator wordt gedefinieerd als:

A>=B ⇔ (A≥B-0,000001)
Ja
6 = Is gelijk aan. De operator wordt gedefinieerd als:

A=B ⇔ (A≥B-0,000001) en (A≤B+0,000001)
Nee 1
<> Is niet gelijk aan. De operator wordt gedefinieerd als:

A<>B ⇔ (A<B-0,000001) of (A>B+0,000001)
Nee 1
7 and Logische EN 0 and Onbekend → 0
1 and Onbekend → Onbekend
Onbekend and Onbekend → Onbekend
Ja
8 or Logische OF 1 or Onbekend → 1
0 or Onbekend → Onbekend
Onbekend or Onbekend → Onbekend
Ja

1 De stringoperand wordt nog steeds omgezet naar numeriek als:

  • de andere operand numeriek is
  • een operator anders dan = of <> wordt gebruikt op een operand

(Als de conversie mislukt - wordt de numerieke operand omgezet naar een stringoperand en worden beide operanden als strings met elkaar vergeleken.)

not, and en or operatoren zijn hoofdlettergevoelig en moeten worden geschreven in kleine letters. Ze moeten ook worden omringd door spaties of haakjes.

Alle operatoren, behalve het unair - en not, hebben een links-naar-rechts associativiteit. Unair - en not zijn niet-associatief (wat betekent dat -(-1) en not (not 1) moeten worden gebruikt in plaats van --1 en not not 1).

Resultaat van evaluatie:

  • <, <=, >, >=, =, <> operatoren geven '1' in de triggeruitdrukking als de gespecificeerde relatie waar is en '0' als het onwaar is. Als minstens één operand Onbekend is, is het resultaat Onbekend;
  • and voor bekende operanden geeft '1' als beide operanden verschillend zijn van '0'; anders geeft het '0'; voor onbekende operanden geeft and '0' alleen als één operand gelijk is aan '0'; anders geeft het 'Onbekend';
  • or voor bekende operanden geeft '1' als een van de operanden verschillend is van '0'; anders geeft het '0'; voor onbekende operanden geeft or '1' alleen als een operand verschillend is van '0'; anders geeft het 'Onbekend';
  • Het resultaat van de logische negatie-operator not voor een bekende operand is '0' als de waarde van de operand ongelijk is aan '0'; '1' als de waarde van de operand gelijk is aan '0'. Voor onbekende operand not geeft 'Onbekend'.

Operatoren

De volgende operatoren worden ondersteund voor triggers (in aflopende prioriteit van uitvoering):

Prioriteit Operator Definitie Opmerkingen voor onbekende waarden Dwing conversie van operand naar float af 1
1 - Unair min-teken - Onbekend → Onbekend Ja
2 not Logische NIET not Onbekend → Onbekend Ja
3 * Vermenigvuldiging 0 * Onbekend → Onbekend
(ja, Onbekend, niet 0 - om Onbekend in rekenkundige bewerkingen niet te verliezen)
1,2 * Onbekend → Onbekend
Ja
/ Delen Onbekend / 0 → fout
Onbekend / 1,2 → Onbekend
0,0 / Onbekend → Onbekend
Ja
4 + Arithmetische plus 1,2 + Onbekend → Onbekend Ja
- Arithmetische min 1,2 - Onbekend → Onbekend Ja
5 < Kleiner dan. De operator wordt gedefinieerd als:

A<B ⇔ (A<B-0,000001)
1,2 < Onbekend → Onbekend Ja
<= Kleiner dan of gelijk aan. De operator wordt gedefinieerd als:

A<=B ⇔ (A≤B+0,000001)
Onbekend <= Onbekend → Onbekend Ja
> Groter dan. De operator wordt gedefinieerd als:

A>B ⇔ (A>B+0,000001)
Ja
>= Groter dan of gelijk aan. De operator wordt gedefinieerd als:

A>=B ⇔ (A≥B-0,000001)
Ja
6 = Is gelijk aan. De operator wordt gedefinieerd als:

A=B ⇔ (A≥B-0,000001) en (A≤B+0,000001)
Nee 1
<> Is niet gelijk aan. De operator wordt gedefinieerd als:

A<>B ⇔ (A<B-0,000001) of (A>B+0,000001)
Nee 1
7 and Logische EN 0 and Onbekend → 0
1 and Onbekend → Onbekend
Onbekend and Onbekend → Onbekend
Ja
8 or Logische OF 1 or Onbekend → 1
0 or Onbekend → Onbekend
Onbekend or Onbekend → Onbekend
Ja

1 De stringoperand wordt nog steeds omgezet naar numeriek als:

  • de andere operand numeriek is
  • een operator anders dan = of <> wordt gebruikt op een operand

(Als de conversie mislukt, wordt de numerieke operand omgezet naar een stringoperand en worden beide operanden als strings met elkaar vergeleken.)

not, and en or operatoren zijn hoofdlettergevoelig en moeten worden geschreven in kleine letters. Ze moeten ook worden omringd door spaties of haakjes.

Alle operatoren, behalve het unair - en not, hebben een links-naar-rechts associativiteit. Unair - en not zijn niet-associatief (wat betekent dat -(-1) en not (not 1) moeten worden gebruikt in plaats van --1 en not not 1).

Resultaat van evaluatie:

  • <, <=, >, >=, =, <> operatoren geven '1' in de triggeruitdrukking als de gespecificeerde relatie waar is en '0' als het onwaar is. Als minstens één operand Onbekend is, is het resultaat Onbekend;
  • and voor bekende operanden geeft '1' als beide operanden verschillend zijn van '0'; anders geeft het '0'; voor onbekende operanden geeft and '0' alleen als één operand gelijk is aan '0'; anders geeft het 'Onbekend';
  • or voor bekende operanden geeft '1' als een van de operanden verschillend is van '0'; anders geeft het '0'; voor onbekende operanden geeft or '1' alleen als een operand verschillend is van '0'; anders geeft het 'Onbekend';
  • Het resultaat van de logische negatie-operator not voor een bekende operand is '0' als de waarde van de operand ongelijk is aan '0'; '1' als de waarde van de operand gelijk is aan '0'. Voor onbekende operand not geeft 'Onbekend'.

Waardes caching

Waardes die nodig zijn voor de evaluatie van triggers worden gecached door de Zabbix-server. Hierdoor zorgt trigger evaluatie voor een hogere belasting van de database gedurende enige tijd na het herstarten van de server. De waardecache wordt niet gewist wanneer itemgeschiedeniswaarden worden verwijderd (zowel handmatig als door housekeeper), dus de server zal de gecachte waarden gebruiken totdat ze ouder zijn dan de tijdsperiodes die zijn gedefinieerd in triggerfuncties of de server wordt herstart.

Voorbeelden van triggers

Voorbeeld 1

De processorbelasting is te hoog op de Zabbix-server.

last(/Zabbix server/system.cpu.load[all,avg1])>5

Door de functie 'last()' te gebruiken, verwijzen we naar de meest recente waarde. /Zabbix server/system.cpu.load[all,avg1] geeft een korte naam van de gemonitorde parameter. Het geeft aan dat de host 'Zabbix server' is en de sleutel die wordt gemonitord is 'system.cpu.load[all,avg1]'. Tot slot betekent >5 dat de trigger in de PROBLEM-toestand is wanneer de meest recente meting van de processorbelasting van de Zabbix-server groter is dan 5.

Voorbeeld 2

www.example.com is overbelast.

last(/www.example.com/system.cpu.load[all,avg1])>5 or min(/www.example.com/system.cpu.load[all,avg1],10m)>2 

De expressie is waar wanneer ofwel de huidige processorbelasting meer is dan 5 of de processorbelasting gedurende de laatste 10 minuten meer dan 2 was.

Voorbeeld 3

/etc/passwd is gewijzigd.

last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)

De expressie is waar wanneer de vorige waarde van de checksum van /etc/passwd verschilt van de meest recente waarde.

Vergelijkbare expressies kunnen nuttig zijn om wijzigingen in belangrijke bestanden te monitoren, zoals /etc/passwd, /etc/inetd.conf, /kernel, enz.

Voorbeeld 4

Iemand downloadt een groot bestand van internet.

Gebruik van de functie min:

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

De expressie is waar wanneer het aantal ontvangen bytes op eth0 meer is dan 100 KB in de afgelopen 5 minuten.

Voorbeeld 5

Beide nodes van de geclusterde SMTP-server zijn niet beschikbaar.

Merk op dat er twee verschillende hosts worden gebruikt in één expressie:

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

De expressie is waar wanneer beide SMTP-servers niet beschikbaar zijn op zowel smtp1.example.com als smtp2.example.com.

Voorbeeld 6

De Zabbix-agent moet worden bijgewerkt.

Gebruik van de functie find():

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

De expressie is waar als de Zabbix-agent de versie beta8 heeft.

Voorbeeld 7

De server is niet bereikbaar.

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

De expressie is waar als de host "example.example.com" meer dan 5 keer onbereikbaar is geweest in de afgelopen 30 minuten.

Voorbeeld 8

Geen hartslagen binnen de laatste 3 minuten.

Gebruik van de functie 'nodata()':

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

Om gebruik te kunnen maken van deze trigger, moet 'tick' worden gedefinieerd als een Zabbix trapper item. De host moet periodiek gegevens voor dit item verzenden met behulp van zabbix_sender. Als er gedurende 180 seconden geen gegevens worden ontvangen, wordt de triggerwaarde PROBLEEM.

Let op dat 'nodata' kan worden gebruikt voor elk type item.

Voorbeeld 9

CPU-activiteit 's nachts.

Gebruik van de functie 'time()':

min(/Zabbix server/system.cpu.load[all,avg1],5m)>2 and time()<060000

De trigger kan alleen van status veranderen naar 'probleem' gedurende de nachtelijke uren (00:00 - 06:00 uur).

Voorbeeld 10

CPU-activiteit op elk moment, met uitzondering.

Gebruik van de functie 'time()' en de not operator:

min(/zabbix/system.cpu.load[all,avg1],5m)>2
       and not (dayofweek()=7 and time()>230000)
       and not (dayofweek()=1 and time()<010000)

De trigger kan op elk moment van status veranderen naar 'probleem', met uitzondering van 2 uur bij een overgang van week (zondag, 23:00 uur - maandag, 01:00 uur).

Voorbeeld 11

Controleer of de lokale tijd van de client overeenkomt met de tijd van de Zabbix-server.

Gebruik van de functie 'fuzzytime()':

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

De trigger zal naar de probleemstatus veranderen in het geval dat de lokale tijd op server MySQL_DB meer dan 10 seconden afwijkt van de tijd van de Zabbix-server. Houd er rekening mee dat 'system.localtime' geconfigureerd moet zijn als een passieve check.

Voorbeeld 12

Vergelijking van de gemiddelde belasting vandaag met de gemiddelde belasting van dezelfde tijd gisteren (met behulp van tijdsverschuiving als now-1d).

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

Deze trigger zal afgaan als de gemiddelde belasting van het afgelopen uur de gemiddelde belasting van hetzelfde uur gisteren met meer dan twee keer overschrijdt.

Voorbeeld 13

Gebruik van de waarde van een ander item om een triggerdrempel te krijgen:

last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1

De trigger zal afgaan als de vrije opslagruimte onder de 10 procent zakt.

Voorbeeld 14

Gebruik van evaluatie resultaat om het aantal triggers boven een drempelwaarde te krijgen:

(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

De trigger zal afgaan als ten minste twee van de triggers in de expressie in een probleemstaat zijn.

Voorbeeld 15

Het vergelijken van tekenreekswaarden van twee items - operanden hier zijn functies die tekenreeksen retourneren.

Probleem: een melding maken als de Ubuntu-versie verschilt op verschillende hosts.

last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Voorbeeld 16

Het vergelijken van twee tekenreekswaarden - operanden zijn:

  • een functie die een tekenreeks retourneert
  • een combinatie van macro's en tekenreeksen

Probleem: wijzigingen in de DNS-query detecteren

De item-sleutel is:

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

met macro's gedefinieerd als

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

en normaal gesproken retourneert het:

example.com           MX       0 mail.example.com

Dus onze triggervoorwaarde om te detecteren of het resultaat van de DNS-query afwijkt van het verwachte resultaat is:

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}"

Let op de aanhalingstekens rond de tweede operand.

Voorbeeld 17

Het vergelijken van twee tekenreekswaarden - operanden zijn:

  • een functie die een tekenreeks retourneert
  • een tekenreeksconstante met speciale tekens \ en "

Probleem: detecteren of de inhoud van het bestand /tmp/hello gelijk is aan:

\" //hello ?\"

Optie 1) schrijf de tekenreeks rechtstreeks

last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""

Let op hoe \ en " tekens worden ontsnapt wanneer de tekenreeks rechtstreeks wordt vergeleken.

Optie 2) gebruik een macro

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

in de uitdrukking:

last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Voorbeeld 18

Lange-termijnperioden vergelijken.

Probleem: De belasting van de Exchange-server is de afgelopen maand met meer dan 10% gestegen

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

U kunt ook het veld Gebeurtenisnaam in de triggerconfiguratie gebruiken om een zinvolle waarschuwingsmelding op te bouwen, bijvoorbeeld om iets te ontvangen als

"Belasting van de Exchange-server is in juli met 24% gestegen (0,69) in vergelijking met juni (0,56)"

de gebeurtenisnaam moet als volgt worden gedefinieerd:

Belasting van {HOST.HOST} server is in {{TIME}.fmttime(%B,-1M)} met {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% gestegen ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) in vergelijking met {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})

Het is ook nuttig om in de triggerconfiguratie handmatig sluiten toe te staan voor dit soort problemen.

Hysteresis

Soms is er een interval nodig tussen probleem- en herstelstaten, in plaats van een eenvoudige drempelwaarde. Bijvoorbeeld, als we een trigger willen definiëren die een probleem rapporteert wanneer de temperatuur in een serverruimte boven de 20°C komt en we willen dat deze in de probleemstatus blijft totdat de temperatuur onder de 15°C zakt, dan is een eenvoudige drempelwaarde van 20°C niet voldoende.

In plaats daarvan moeten we eerst een triggerexpressie definiëren voor het probleemgeval (temperatuur boven 20°C). Vervolgens moeten we een aanvullende herstelvoorwaarde definiëren (temperatuur onder 15°C). Dit wordt gedaan door een aanvullende Hersteluitdrukking parameter te definiëren bij het definiëren van een trigger.

In dit geval zal het herstel van het probleem in twee stappen plaatsvinden:

  • Eerst moet de probleemexpressie (temperatuur boven 20°C) worden geëvalueerd als FALSE
  • Vervolgens moet de hersteluitdrukking (temperatuur onder 15°C) worden geëvalueerd als TRUE

De hersteluitdrukking wordt alleen geëvalueerd wanneer het probleemgeval eerst is opgelost.

De hersteluitdrukking die ALLEEN als TRUE wordt geëvalueerd, lost het probleem niet op als de probleemexpressie nog steeds TRUE is!

Voorbeeld 1

De temperatuur in de serverruimte is te hoog.

Probleemuitdrukking:

last(/server/temp)>20

Hersteluitdrukking:

last(/server/temp)<=15

In dit voorbeeld wordt de trigger geactiveerd wanneer de temperatuur in de serverruimte hoger is dan 20°C. De trigger blijft in de probleemstatus totdat de temperatuur weer daalt naar 15°C of lager, zoals aangegeven in de hersteluitdrukking. Pas als de temperatuur onder de 15°C zakt en de hersteluitdrukking waar is, wordt het probleem opgelost.

Voorbeeld 2

Er is te weinig vrije schijfruimte.

Probleemuitdrukking: het is minder dan 10 GB gedurende de laatste 5 minuten.

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

Hersteluitdrukking: het is meer dan 40 GB gedurende de laatste 10 minuten.

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

Uitdrukkingen met onbekende operanden

Over het algemeen zal een onbekende operand (zoals een niet-ondersteund item) in de uitdrukking de triggerwaarde onmiddellijk instellen op Onbekend.

Echter, in sommige gevallen worden onbekende operanden (niet-ondersteunde items, functiefouten) toegelaten in de uitdrukkingsbeoordeling:

  • De nodata()-functie wordt geëvalueerd, ongeacht of het gerefereerde item wordt ondersteund of niet.
  • Logische expressies met OF en EN kunnen in twee gevallen tot bekende waarden worden geëvalueerd, ongeacht onbekende operanden:
    • Geval 1: "1 of some_function(niet_ondersteund_item1) of some_function(niet_ondersteund_item2) of ..." kan worden geëvalueerd tot een bekend resultaat ('1' of "Probleem"),
    • Geval 2: "0 en some_function(niet_ondersteund_item1) en some_function(niet_ondersteund_item2) en ..." kan worden geëvalueerd tot een bekend resultaat ('0' of "OK").
      Zabbix probeert dergelijke logische expressies te evalueren door niet-ondersteunde items als onbekende operanden te beschouwen. In de twee bovengenoemde gevallen wordt een bekende waarde geproduceerd ("Probleem" of "OK", respectievelijk); in alle andere gevallen wordt de trigger geëvalueerd tot Onbekend.
  • Als de functie-evaluatie voor een ondersteund item resulteert in een fout, wordt de functiewaarde Onbekend en neemt deze deel als onbekende operand in verdere uitdrukkingsbeoordeling.

Merk op dat onbekende operanden alleen in logische expressies kunnen "verdwijnen", zoals hierboven beschreven. In aritmetische expressies leiden onbekende operanden altijd tot het resultaat Onbekend (behalve deling door 0).

Een uitdrukking die resulteert in Onbekend verandert de triggertoestand ("Probleem/OK") niet. Dus, als het "Probleem" was (zie Geval 1), blijft het in dezelfde probleemtoestand, zelfs als het bekende deel is opgelost ('1' wordt '0'), omdat de uitdrukking nu wordt geëvalueerd tot Onbekend en dat verandert de triggertoestand niet.

Als een triggertekst met meerdere niet-ondersteunde items wordt geëvalueerd tot Onbekend, verwijst het foutbericht in de frontend naar het laatste geëvalueerde niet-ondersteunde item.