De uitdrukkingen 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 uitdrukking 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 syntaxis van een eenvoudige bruikbare uitdrukking is functie(/host/sleutel,parameter)<operator><constante>
.
Bijvoorbeeld:
zal activeren als het aantal ontvangen bytes gedurende de laatste vijf minuten altijd meer dan 100 kilobytes was.
Hoewel de syntaxis precies hetzelfde is, zijn er vanuit functioneel oogpunt twee soorten triggeruitdrukkingen:
Bij het alleen definiëren van een probleemuitdrukking wordt deze uitdrukking zowel gebruikt als de drempelwaarde voor het probleem als voor het herstel van het probleem. Zodra de probleemuitdrukking waar is, is er een probleem. Zodra de probleemuitdrukking onwaar is, wordt het probleem opgelost.
Bij het zowel definiëren van een probleemuitdrukking als een aanvullende hersteluitdrukking wordt de probleemoplossing complexer: niet alleen moet de probleemuitdrukking onwaar zijn, maar ook de hersteluitdrukking moet waar zijn. Dit is handig om hysterese te creëren en triggerfladderen te voorkomen.
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 maken het mogelijk om te specificeren:
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 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 tijd-achtervoegsels gebruiken om de tijd aan te geven. Voorafgegaan door een hash-teken heeft de parameter een andere betekenis:
Expressie | 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 hash-teken hebben een andere betekenis bij de functie last - ze duiden op de N-de vorige waarde, dus gegeven de waarden 3, 7, 2, 6, 5 (van de meest recente tot de minst recente):
last(/host/key,#2)
zou '7' retournerenlast(/host/key,#5)
zou '5' retournerenEen optionele tijdverschuiving wordt ondersteund met tijd of een teller voor waarden als de functieparameter. Deze parameter maakt het mogelijk om gegevens van een periode in het verleden te raadplegen.
Tijdverschuiving begint met now
- waarbij de huidige tijd wordt gespecificeerd, en wordt gevolgd door +N<eenheid van tijd>
of -N<eenheid van tijd>
- om N eenheden van tijd toe te voegen of af te trekken.
Bijvoorbeeld, avg(/host/sleutel,1u:now-1d)
zal de gemiddelde waarde teruggeven voor een uur een dag geleden.
Tijdverschuiving gespecificeerd in maanden (M) en jaren (y) wordt alleen ondersteund voor trendfuncties. Andere functies ondersteunen seconden (s), minuten (m), uren (h), dagen (d) en weken (w).
Tijdverschuiving met absolute tijdsperioden
Absolute tijdsperioden worden ondersteund in de tijdverschuwingsparameter, bijvoorbeeld van middernacht tot middernacht voor een dag, maandag-zondag voor een week, de eerste dag-laatste dag van de maand voor een maand.
Tijdverschuiving voor absolute tijdsperioden begint met now
- waarbij de huidige tijd wordt gespecificeerd, en wordt gevolgd door een willekeurig aantal tijdsoperaties: /<eenheid van tijd>
- definieert het begin en einde van de tijdsperiode, bijvoorbeeld van middernacht tot middernacht voor een dag, +N<eenheid van tijd>
of -N<eenheid van tijd>
- om N eenheden van tijd toe te voegen of af te trekken.
Let op dat de waarde van de tijdverschuiving groter of gelijk aan 0 kan zijn, terwijl de minimale waarde 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 |
Functieparameters kunnen andere uitdrukkingen bevatten, zoals in de volgende syntax:
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)
De volgende operatoren worden ondersteund voor triggers (in aflopende prioriteit van uitvoering):
Prioriteit | Operator | Definitie | Notities voor onbekende waarden | Forceer omzetting van operand naar een float 1 |
---|---|---|---|---|
1 | - | Unaire negatie | -Onbekend → Onbekend | Ja |
2 | not | Logische NOT | not Onbekend → Onbekend | Ja |
3 | * | Vermenigvuldiging | 0 * Onbekend → Onbekend (ja, Onbekend, niet 0 - om Onbekend te behouden in rekenkundige bewerkingen) 1,2 * Onbekend → Onbekend |
Ja |
/ | Deling | Onbekend / 0 → fout Onbekend / 1,2 → Onbekend 0,0 / Onbekend → Onbekend |
Ja | |
4 | + | Rekenkundige optelling | 1,2 + Onbekend → Onbekend | Ja |
- | Rekenkundige aftrekking | 1,2 - Onbekend → Onbekend | Ja | |
5 | < | Kleiner dan. De operator is gedefinieerd als: A<B ⇔ (A<B-0,000001) |
1,2 < Onbekend → Onbekend | Ja |
<= | Kleiner dan of gelijk aan. De operator is gedefinieerd als: A<=B ⇔ (A≤B+0,000001) |
Onbekend <= Onbekend → Onbekend | Ja | |
> | Groter dan. De operator is gedefinieerd als: A>B ⇔ (A>B+0,000001) |
Ja | ||
>= | Groter dan of gelijk aan. De operator is gedefinieerd als: A>=B ⇔ (A≥B-0,000001) |
Ja | ||
6 | = | Is gelijk aan. De operator is gedefinieerd als: A=B ⇔ (A≥B-0,000001) en (A≤B+0,000001) |
Nee 1 | |
<> | Is niet gelijk aan. De operator is gedefinieerd als: A<>B ⇔ (A<B-0,000001) of (A>B+0,000001) |
Nee 1 | ||
7 | and | Logische AND | 0 and Onbekend → 0 1 and Onbekend → Onbekend Onbekend and Onbekend → Onbekend |
Ja |
8 | or | Logische OR | 1 or Onbekend → 1 0 or Onbekend → Onbekend Onbekend or Onbekend → Onbekend |
Ja |
1 Een string operand wordt nog steeds omgezet naar numeriek als:
(Als de omzetting mislukt - wordt een numerieke operand omgezet naar een string operand en worden beide operanden als strings vergeleken.)
not, and en or operatoren zijn hoofdlettergevoelig en moeten worden omgeven door spaties of haakjes.
Alle operatoren, behalve unaire - en not, hebben een associativiteit van links naar rechts. Unaire - en not zijn niet-associatief (wat betekent dat -(-1) en not (not 1) gebruikt moet worden in plaats van --1 en not not 1).
Evaluatieresultaat:
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.
De processorbelasting is te hoog op de Zabbix-server.
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.
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.
/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.
Iemand downloadt een groot bestand van internet.
Gebruik van de functie min:
De expressie is waar wanneer het aantal ontvangen bytes op eth0 meer is dan 100 KB in de afgelopen 5 minuten.
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.
De Zabbix-agent moet worden bijgewerkt.
Gebruik van de functie find():
De expressie is waar als de Zabbix-agent de versie beta8 heeft.
De server is niet bereikbaar.
De expressie is waar als de host "example.example.com" meer dan 5 keer onbereikbaar is geweest in de afgelopen 30 minuten.
Geen hartslagen binnen de laatste 3 minuten.
Gebruik van de functie 'nodata()':
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.
CPU-activiteit 's nachts.
Gebruik van de functie 'time()':
De trigger kan alleen van status veranderen naar 'probleem' gedurende de nachtelijke uren (00:00 - 06:00 uur).
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).
Controleer of de lokale tijd van de client overeenkomt met de tijd van de Zabbix-server.
Gebruik van de functie 'fuzzytime()':
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.
Vergelijking van de gemiddelde belasting vandaag met de gemiddelde belasting van dezelfde tijd gisteren (met behulp van tijdsverschuiving als now-1d
).
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.
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.
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.
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])
Het vergelijken van twee tekenreekswaarden - operanden zijn:
Probleem: wijzigingen in de DNS-query detecteren
De item-sleutel is:
met macro's gedefinieerd als
en normaal gesproken retourneert het:
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.
Het vergelijken van twee tekenreekswaarden - operanden zijn:
Probleem: detecteren of de inhoud van het bestand /tmp/hello
gelijk is aan:
Optie 1) schrijf de tekenreeks rechtstreeks
Let op hoe \ en " tekens worden ontsnapt wanneer de tekenreeks rechtstreeks wordt vergeleken.
Optie 2) gebruik een macro
in de uitdrukking:
Lange-termijnperioden vergelijken.
Probleem: De belasting van de Exchange-server is de afgelopen maand met meer dan 10% gestegen
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.
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 de serverruimte boven de 20°C komt, en we willen dat het in de probleemstaat blijft totdat de temperatuur onder de 15°C daalt, 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 parameter Herstel expressie te definiëren bij het definiëren van een trigger.
In dit geval zal het herstel van het probleem in twee stappen plaatsvinden:
De herstel expressie wordt alleen geëvalueerd wanneer het probleemgeval eerst is opgelost.
Alleen de waarheid van de herstel expressie op zich lost het probleem niet op als de probleemexpressie nog steeds WAAR is!
De temperatuur in de serverruimte is te hoog.
Probleemuitdrukking:
Hersteluitdrukking:
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.
Er is te weinig vrije schijfruimte.
Probleemuitdrukking: het is minder dan 10 GB gedurende de laatste 5 minuten.
Hersteluitdrukking: het is meer dan 40 GB gedurende de laatste 10 minuten.
Over het algemeen zal een onbekende operand (zoals een niet-ondersteund item) in de uitdrukking de triggerwaarde onmiddellijk op Onbekend
zetten.
Echter, in sommige gevallen worden onbekende operanden (niet-ondersteunde items, functiefouten) toegelaten in de evaluatie van de uitdrukking:
nodata()
-functie wordt geëvalueerd ongeacht of het gerefereerde item wordt ondersteund of niet.1 of some_function(niet_ondersteund_item1) of some_function(niet_ondersteund_item2) of ...
" kan worden geëvalueerd naar een bekend resultaat ('1' of "Probleem"),0 en some_function(niet_ondersteund_item1) en some_function(niet_ondersteund_item2) en ...
" kan worden geëvalueerd naar een bekend resultaat ('0' of "OK").Onbekend
.Onbekend
en neemt deze deel als onbekende operand in verdere uitdrukkingsevaluatie.Merk op dat onbekende operanden alleen kunnen "verdwijnen" in logische uitdrukkingen zoals hierboven beschreven. In rekenkundige uitdrukkingen 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 naar Onbekend
en dat verandert de triggertoestand niet.
Als een triggerevaluatie met meerdere niet-ondersteunde items resulteert in Onbekend
, verwijst het foutbericht in de frontend naar het laatste geëvalueerde niet-ondersteunde item.
Heb je een voorbeeld van triggerexpressies dat handig kan zijn voor anderen? Gebruik het Formulier voor suggesties van voorbeelden om het naar de Zabbix-ontwikkelaars te sturen.