2 Trigeris izteiksme
Pārskats
Izteiksmes, kas tiek izmantotas trigeros, ir ļoti elastīgas. Tās var izmantot, lai izveidotu sarežģītus loģiskus testus par uzraudzītajiem statistikas datiem.
Vienkārša izteiksme izmanto funkciju, kas tiek lietota vienumam ar noteiktiem parametriem. Funkcija atgriež rezultātu, kas tiek salīdzināts ar slieksni, izmantojot operatoru un konstanti.
Vienkāršas, noderīgas izteiksmes sintakse ir function(/host/key,parameter)<operator><constant>.
Piemēram:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
izraisīs trigeri, ja saņemto baitu skaits pēdējo piecu minūšu laikā vienmēr bija virs 100 kilobaitiem.
Lai gan sintakse ir tieši tāda pati, no funkcionālā viedokļa ir divu veidu trigeru izteiksmes:
- problēmas izteiksme - nosaka problēmas nosacījumus
- atjaunošanas izteiksme (neobligāta) - nosaka papildu nosacījumus problēmas atrisināšanai
Definējot tikai problēmas izteiksmi, šī izteiksme tiks izmantota gan kā problēmas slieksnis, gan kā problēmas atjaunošanas slieksnis. Tiklīdz problēmas izteiksme tiek novērtēta kā TRUE, ir problēma. Tiklīdz problēmas izteiksme tiek novērtēta kā FALSE, problēma ir atrisināta.
Definējot gan problēmas izteiksmi, gan papildu atjaunošanas izteiksmi, problēmas atrisināšana kļūst sarežģītāka: problēmas izteiksmei ir jābūt ne tikai FALSE, bet arī atjaunošanas izteiksmei ir jābūt TRUE. Tas ir noderīgi, lai izveidotu histerēzi un izvairītos no trigeru svārstīšanās.
Nav produktīvi izmantot {TRIGGER.VALUE} makro atjaunošanas izteiksmē, jo šī izteiksme tiek novērtēta tikai tad, kad trigeris ir "Problem" stāvoklī. Tāpēc {TRIGGER.VALUE} vienmēr tiks atrisināts uz "1" (kas norāda "Problem" stāvokli) izteiksmes novērtēšanas laikā.
Funkcijas
Funkcijas ļauj aprēķināt savāktās vērtības (vidējo, minimālo, maksimālo, summu), atrast virknes, atsaukties uz pašreizējo laiku un citiem faktoriem.
Pilns atbalstīto funkciju saraksts ir pieejams.
Parasti funkcijas atgriež skaitliskas vērtības salīdzināšanai. Atgriežot virknes, salīdzināšana ir iespējama ar operatoriem = un <> (skatiet piemēru).
Funkciju parametri
Funkciju parametri ļauj norādīt:
- hosta un vienuma atslēgu (funkcijas, kas atsaucas tikai uz hosta vienuma vēsturi)
- funkcijai specifiskus parametrus
- citas izteiksmes (nav pieejamas funkcijām, kas atsaucas uz hosta vienuma vēsturi; piemērus skatiet sadaļā citas izteiksmes)
Hosta un vienuma atslēgu var norādīt kā /host/key.
Hosta nosaukuma izlaišana pirmajā parametrā (t. i., kā function(//key,parameter,...)) ir atbalstīta tikai noteiktos kontekstos:
- Aprēķināto vienumu formulā
- Izteiksmju makrosos, kurus var izmantot:
- laukā Notikuma nosaukums
- grafika nosaukumā
- "Host" un "Trigger" kartes elementu etiķetē
Šajos kontekstos varat izmantot arī makro {HOST.HOST}.
{HOST.HOST<1-9>} var izmantot laukā Notikuma nosaukums un "Trigger" kartes elementā, lai atsauktos uz konkrētu vienumu trigeris izteiksmē.
Ja šajos kontekstos hosta nosaukums ir izlaists vai aizstāts ar {HOST.HOST}, atsauce norāda uz pirmo vienumu trigeris izteiksmē vai uz pirmo vienumu grafikā.
Ārpus šiem atbalstītajiem kontekstiem hosta nosaukuma izlaišana trigeris izteiksmēs radīs kļūdu.
Skatiet 18. piemēru, lai redzētu dubultās slīpsvītras izmantošanas ilustrāciju Notikuma nosaukums makrosos.
Atsauktajam vienumam jābūt atbalstītā stāvoklī (izņemot funkciju nodata(), kas tiek aprēķināta arī neatbalstītiem vienumiem).
Lai gan citi trigeris izteiksmes kā funkciju parametri trigeros ir ierobežoti līdz funkcijām, kas nav saistītas ar vēsturi, šis ierobežojums neattiecas uz aprēķinātajiem vienumiem.
Funkcijai specifiskie parametri
Funkcijai specifiskie parametri tiek ievietoti aiz vienuma atslēgas un no vienuma atslēgas tiek atdalīti ar komatu. Pilnu šo parametru sarakstu skatiet atbalstītajās funkcijās.
Lielākā daļa skaitlisko funkciju pieņem laiku kā parametru. Lai norādītu laiku, varat izmantot sekundes vai laika sufiksus. Ja parametra priekšā ir hash zīme, tam ir cita nozīme:
| Expression | Description |
|---|---|
| sum(/host/key,10m) | Pēdējo 10 minūšu vērtību summa. |
| sum(/host/key,#10) | Pēdējo desmit vērtību summa. |
Parametri ar hash zīmi funkcijā last nozīmē ko citu - tie apzīmē N-to iepriekšējo vērtību, tāpēc, ja ir dotas vērtības 30, 70, 20, 60, 50 (no jaunākās līdz vecākajai):
last(/host/key,#2)atgriezīs '70'last(/host/key,#5)atgriezīs '50'
Laika nobīde
Kā funkcijas parametru tiek atbalstīta izvēles laika nobīde ar laiku vai vērtību skaitu. Šis parametrs ļauj atsaukties uz datiem no pagātnes laika perioda.
Laika nobīde sākas ar now - norādot pašreizējo laiku, un tai seko +N<time unit> vai -N<time unit> - lai pieskaitītu vai atņemtu N laika vienības.
Piemēram, avg(/host/key,1h:now-1d) atgriezīs vidējo vērtību vienai stundai pirms vienas dienas.
Laika nobīde, kas norādīta mēnešos (M) un gados (y), tiek atbalstīta tikai tendences funkcijām. Citas funkcijas atbalsta sekundes (s), minūtes (m), stundas (h), dienas (d) un nedēļas (w).
Laika nobīde ar absolūtajiem laika periodiem
Absolūtie laika periodi tiek atbalstīti laika nobīdes parametrā, piemēram, no pusnakts līdz pusnaktij dienai, no pirmdienas līdz svētdienai nedēļai, no mēneša pirmās dienas līdz pēdējai dienai mēnesim.
Laika nobīde absolūtajiem laika periodiem sākas ar now - norādot pašreizējo laiku, un tai seko jebkurš skaits laika darbību: /<time unit> - nosaka laika vienības sākumu un beigas, piemēram, no pusnakts līdz pusnaktij dienai, +N<time unit> vai -N<time unit> - lai pieskaitītu vai atņemtu N laika vienības.
Lūdzu, ņemiet vērā, ka laika nobīdes vērtība var būt lielāka vai vienāda ar 0, savukārt laika perioda minimālā vērtība ir 1.
| Parameter | Description |
|---|---|
| 1d:now/d | Vakar |
| 1d:now/d+1d | Šodien |
| 2d:now/d+1d | Pēdējās 2 dienas |
| 1w:now/w | Pagājušā nedēļa |
| 1w:now/w+1w | Šī nedēļa |
Citi izteiksmes
Funkcijas parametri var saturēt citus izteiksmes, kā parādīts šādā sintaksē:
min(min(/host/key,1h),min(/host2/key2,1h)*10)
Ņemiet vērā, ka citus izteiksmes nevar izmantot, ja funkcija atsaucas uz vienuma vēsturi. Piemēram, šāda sintakse nav atļauta:
min(/host/key,#5*10)
Operatori
Tālāk norādītie operatori ir atbalstīti trigeriem (izpildes prioritātes dilstošā secībā):
| Priority | Operator | Definition | Notes for unknown values | Force cast operand to float 1 |
|---|---|---|---|---|
| 1 | - | Unārais mīnuss | -Unknown → Unknown | Yes |
| 2 | not | Loģiskais NOT | not Unknown → Unknown | Yes |
| 3 | * | Reizināšana | 0 * Unknown → Unknown (jā, Unknown, nevis 0 - lai nezaudētu Unknown aritmētiskajās darbībās) 1.2 * Unknown → Unknown |
Yes |
| / | Dalīšana | Unknown / 0 → error Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Yes | |
| 4 | + | Aritmētiskais plus | 1.2 + Unknown → Unknown | Yes |
| - | Aritmētiskais mīnuss | 1.2 - Unknown → Unknown | Yes | |
| 5 | < | Mazāks par. Operators ir definēts kā: A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | Yes |
| <= | Mazāks vai vienāds ar. Operators ir definēts kā: A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | Yes | |
| > | Lielāks par. Operators ir definēts kā: A>B ⇔ (A>B+0.000001) |
Yes | ||
| >= | Lielāks vai vienāds ar. Operators ir definēts kā: A>=B ⇔ (A≥B-0.000001) |
Yes | ||
| 6 | = | Vienāds ar. Operators ir definēts kā: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
No 1 | |
| <> | Nav vienāds ar. Operators ir definēts kā: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
No 1 | ||
| 7 | and | Loģiskais AND | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
Yes |
| 8 | or | Loģiskais OR | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
Yes |
1 String operands joprojām tiek pārveidots par skaitlisku, ja:
- otrs operands ir skaitlisks
- uz operanda tiek lietots operators, kas nav = vai <>
Relāciju operatoriem (<, <=, >, >=): ja pārveidošana neizdodas (piemēram, uz ""), izteiksmes rezultāts ir Unknown (nav virkņu salīdzināšanas rezerves mehānisma).
Vienādības operatoriem (=, <>): ja pārveidošana neizdodas, operandi tiek salīdzināti kā neapstrādātas virknes.
Operatori not, and un or ir reģistrjutīgi un tiem jābūt rakstītiem ar mazajiem burtiem. Tiem arī jābūt atdalītiem ar atstarpēm vai iekavām.
Visiem operatoriem, izņemot unāro - un not, ir asociativitāte no kreisās uz labo pusi. Unārie - un not nav asociatīvi (tas nozīmē, ka jāizmanto -(-1) un not (not 1), nevis --1 un not not 1).
Izvērtēšanas rezultāts:
- operatori <, <=, >, >=, =, <> trigeru izteiksmē atgriež '1', ja norādītā attiecība ir patiesa, un '0', ja tā ir aplama. Ja vismaz viens operands ir Unknown, rezultāts ir Unknown;
- and zināmiem operandiem atgriež '1', ja abi tā operandi salīdzinājumā nav vienādi ar '0'; citādi tas atgriež '0'; nezināmiem operandiem and atgriež '0' tikai tad, ja viens operands salīdzinājumā ir vienāds ar '0'; citādi tas atgriež 'Unknown';
- or zināmiem operandiem atgriež '1', ja vismaz viens no tā operandiem salīdzinājumā nav vienāds ar '0'; citādi tas atgriež '0'; nezināmiem operandiem or atgriež '1' tikai tad, ja viens operands salīdzinājumā nav vienāds ar '0'; citādi tas atgriež 'Unknown';
- loģiskās noliegšanas operatora not rezultāts zināmam operandam ir '0', ja tā operanda vērtība salīdzinājumā nav vienāda ar '0'; '1', ja tā operanda vērtība salīdzinājumā ir vienāda ar '0'. Nezināmam operandam not atgriež 'Unknown'.
Vērtību kešošana
Vērtības, kas nepieciešamas trigeru novērtēšanai, tiek kešotas Zabbix serverī. Tāpēc pēc servera restartēšanas trigeru novērtēšana kādu laiku rada lielāku datubāzes noslodzi.
Vērtību kešatmiņa netiek notīrīta, kad vienuma vēstures vērtības tiek noņemtas (vai nu manuāli, vai ar housekeeper palīdzību), tāpēc serveris izmantos kešotās vērtības, līdz tās kļūs vecākas par laika periodiem, kas definēti trigeru funkcijās, vai līdz serveris tiks restartēts.
Ja kešatmiņā nav nesenu datu un funkcijā nav definēts vaicājuma periods, Zabbix pēc noklusējuma vaicās datubāzi par vēsturiskajām vērtībām, meklējot datus līdz pat vienai nedēļai pagātnē.
Trigeru piemēri
Piemērs 1
Procesora noslodze uz Zabbix serveris ir pārāk augsta.
last(/Zabbix server/system.cpu.load[all,avg1])>5
Izmantojot funkciju 'last()', mēs atsaucamies uz jaunāko vērtību.
/Zabbix server/system.cpu.load[all,avg1] norāda uz uzraudzītā parametra īso nosaukumu.
Tas nosaka, ka hosts ir 'Zabbix serveris' un uzraudzītais atslēgas nosaukums ir 'system.cpu.load[all,avg1]'.
Visbeidzot, >5 nozīmē, ka trigeris ir PROBLEM stāvoklī ikreiz, kad jaunākais procesora noslodzes mērījums no Zabbix serveris ir lielāks par 5.
Piemērs 2
www.example.com ir pārslogots.
last(/www.example.com/system.cpu.load[all,avg1])>5 or min(/www.example.com/system.cpu.load[all,avg1],10m)>2
Izteiksme ir patiesa, ja pašreizējā procesora slodze ir lielāka par 5 vai procesora slodze pēdējo 10 minūšu laikā bija lielāka par 2.
Piemērs 3
/etc/passwd ir mainīts.
last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)
Izteiksme ir patiesa, ja iepriekšējā /etc/passwd kontrolsummas vērtība atšķiras no jaunākās.
Līdzīgas izteiksmes var būt noderīgas, lai uzraudzītu izmaiņas svarīgos failos, piemēram, /etc/passwd, /etc/inetd.conf, /kernel u.c.
Piemērs 4
Kāds lejupielādē lielu failu no interneta.
Funkcijas min izmantošana:
min(/www.example.com/net.if.in[eth0,bytes],5m)>100K
Izteiksme ir patiesa, ja saņemto baitu skaits uz eth0 pēdējo 5 minūšu laikā ir lielāks par 100 KB.
Piemērs 5
Abi klasterizētā SMTP servera mezgli ir nedarbojas.
Ņemiet vērā divu dažādu hostu izmantošanu vienā izteiksmē:
last(/smtp1.example.com/net.tcp.service[smtp])=0 and last(/smtp2.example.com/net.tcp.service[smtp])=0
Izteiksme ir patiesa, ja abi SMTP serveri ir nedarbojas gan smtp1.example.com, gan smtp2.example.com.
Piemērs 6
Zabbix aģents ir jājaunina.
Funkcijas find() izmantošana:
find(/example.example.com/agent.version,,"like","beta8")=1
Izteiksme ir patiesa, ja Zabbix aģenta versija ir beta8.
Piemērs 7
Serveris nav sasniedzams.
count(/example.example.com/icmpping,30m,,"0")>5
Izteiksme ir patiesa, ja hosts "example.example.com" pēdējo 30 minūšu laikā nav sasniedzams vairāk nekā 5 reizes.
Piemērs 8
Nav sirdspukstu pēdējo 3 minūšu laikā.
Funkcijas nodata() izmantošana:
nodata(/example.example.com/tick,3m)=1
Lai izmantotu šo trigeri, 'tick' ir jābūt definētam kā Zabbix trapper vienumam. Hostam periodiski jānosūta dati šim vienumam, izmantojot zabbix_sender. Ja 180 sekunžu laikā netiek saņemti dati, trigeris kļūst par PROBLEM.
Piezīme, ka 'nodata' var izmantot jebkura veida vienumam.
Piemērs 9
CPU aktivitāte nakts laikā.
Funkcijas time() izmantošana:
min(/Zabbix server/system.cpu.load[all,avg1],5m)>2 and time()<060000
Trigeris var mainīt savu stāvokli uz problēmu tikai nakts laikā (00:00 - 06:00).
Piemērs 10
CPU aktivitāte jebkurā laikā ar izņēmumu.
Funkcijas time() un operatora not izmantošana:
min(/zabbix/system.cpu.load[all,avg1],5m)>2
and not (dayofweek()=7 and time()>230000)
and not (dayofweek()=1 and time()<010000)
Trigeris var jebkurā laikā mainīt savu stāvokli uz problēmu, izņemot 2 stundas nedēļas maiņas laikā (svētdiena, 23:00 - pirmdiena, 01:00).
Piemērs 11
Pārbaudiet, vai klienta lokālais laiks ir sinhronizēts ar Zabbix servera laiku.
Funkcijas fuzzytime() izmantošana:
fuzzytime(/MySQL_DB/system.localtime,10s)=0
Trigeris pāries problēmas stāvoklī, ja lokālais laiks serverī MySQL_DB un Zabbix serverī atšķirsies par vairāk nekā 10 sekundēm. Ņemiet vērā, ka 'system.localtime' Zabbix aģentam ir jākonfigurē kā pasīva pārbaude; Zabbix agent 2 to var konfigurēt kā aktīvu pārbaudi.
Piemērs 12
Salīdzinot šodienas vidējo slodzi ar tā paša laika vidējo slodzi vakar (izmantojot laika nobīdi kā now-1d).
avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2
Trigeris nostrādās, ja pēdējās stundas vidējā slodze pārsniegs tā paša vakardienas stundas vidējo slodzi vairāk nekā divas reizes.
Piemērs 13
Izmantojot cita vienuma vērtību, lai iegūtu trigeris slieksni:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
Trigeris nostrādās, ja brīvās krātuves apjoms samazināsies zem 10 procentiem.
Piemērs 14
Izmantojot novērtējuma rezultātu, lai iegūtu trigeru skaitu virs sliekšņa:
(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
Trigeris aktivizēsies, ja vismaz divi no izteiksmē iekļautajiem trigeriem būs problēmas stāvoklī.
15. piemērs
Divu vienumu virkņu vērtību salīdzināšana - operandi šeit ir funkcijas, kas atgriež virknes.
Problēma: izveidot brīdinājumu, ja Ubuntu versija atšķiras dažādos hostos
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Piemērs 16
Salīdzinot divas virknes vērtības - operandi ir:
- funkcija, kas atgriež virkni
- makro un virkņu kombinācija
Problēma: noteikt izmaiņas DNS vaicājumā
Vienuma atslēga ir:
net.dns.record[192.0.2.1,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1]
ar definētiem makro
{$WEBSITE_NAME} = example.com
{$DNS_RESOURCE_RECORD_TYPE} = MX
un parasti atgriež:
example.com MX 0 mail.example.com
Tātad mūsu trigeris izteiksme, lai noteiktu, vai DNS vaicājuma rezultāts ir novirzījies no sagaidāmā rezultāta, ir:
last(/Zabbix server/net.dns.record[192.0.2.1,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME} {$DNS_RESOURCE_RECORD_TYPE} 0 mail.{$WEBSITE_NAME}"
Ņemiet vērā pēdiņas ap otro operandu.
Piemērs 17
Salīdzinot divas virknes vērtības - operandi ir:
- funkcija, kas atgriež virkni
- virknes konstante ar speciālajām rakstzīmēm \ un "
Problēma: noteikt, vai faila /tmp/hello saturs ir vienāds ar:
\" //hello ?\"
- variants. Ierakstiet virkni tieši:
last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""
Ņemiet vērā, kā rakstzīmes \ un " tiek ekrānētas, kad virkne tiek salīdzināta tieši.
- variants. Izmantojiet makro
{$HELLO_MACRO} = \" //hello ?\"
izteiksmē:
last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Piemērs 18
Ilgtermiņa periodu salīdzināšana.
Problēma: Exchange servera slodze pagājušajā mēnesī palielinājās par vairāk nekā 10%
trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)
Varat arī izmantot lauku Notikuma nosaukums trigeru konfigurācijā, lai izveidotu jēgpilnu brīdinājuma ziņojumu, piemēram, lai saņemtu kaut ko līdzīgu
"Exchange servera slodze jūlijā palielinājās par 24% (0.69), salīdzinot ar jūniju (0.56)"
notikuma nosaukumam jābūt definētam šādi:
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)})
Šāda veida problēmai trigeru konfigurācijā ir arī lietderīgi atļaut manuālu aizvēršanu.
Vai jums ir trigeru izteiksmes piemērs, kas varētu būt noderīgs citiem? Izmantojiet Example suggestion form, lai nosūtītu to Zabbix izstrādātājiem.
Histerēze
Dažkārt starp problēmas un atkopšanās stāvokļiem ir nepieciešams intervāls, nevis vienkāršs slieksnis. Piemēram, ja vēlamies definēt trigeri, kas ziņo par problēmu, kad servera telpas temperatūra pārsniedz 20°C, un vēlamies, lai tas paliek problēmas stāvoklī, līdz temperatūra nokrītas zem 15°C, ar vienkāršu trigera slieksni pie 20°C nepietiks.
Tā vietā vispirms ir jādefinē trigeris izteiksme problēmas notikumam (temperatūra virs 20°C). Pēc tam ir jādefinē papildu atkopšanās nosacījums (temperatūra zem 15°C). To veic, definējot papildu Recovery expression parametru, kad definē trigeri.
Šajā gadījumā problēmas atkopšanās notiks divos soļos:
- Vispirms problēmas izteiksmei (temperatūra virs 20°C) jānovērtējas kā FALSE
- Pēc tam atkopšanās izteiksmei (temperatūra zem 15°C) jānovērtējas kā TRUE
Atkopšanās izteiksme tiks novērtēta tikai tad, kad problēmas notikums vispirms būs atrisināts.
Ja vien atkopšanās izteiksme ir TRUE, ar to vien nepietiek, lai atrisinātu problēmu, ja problēmas izteiksme joprojām ir TRUE!
Piemērs 1
Temperatūra servera telpā ir pārāk augsta.
Problēmas izteiksme:
last(/server/temp)>20
Atjaunošanās izteiksme:
last(/server/temp)<=15
Piemērs 2
Brīvās diska vietas ir pārāk maz.
Problēmas izteiksme: tā ir mazāka par 10 GB pēdējo 5 minūšu laikā
max(/server/vfs.fs.size[/,free],5m)<10G
Atjaunošanās izteiksme: tā ir lielāka par 40 GB pēdējo 10 minūšu laikā
min(/server/vfs.fs.size[/,free],10m)>40G
Izteiksmes ar nezināmiem operandiem
Parasti nezināms operands (piemēram, neatbalstīts vienums) izteiksmē nekavējoties padarīs trigeri par Unknown.
Tomēr dažos gadījumos nezināmi operandi (neatbalstīti vienumi, funkciju kļūdas) tiek pieļauti izteiksmes novērtēšanā:
- Funkcija
nodata()tiek novērtēta neatkarīgi no tā, vai atsauces vienums tiek atbalstīts vai nē. - Loģiskās izteiksmes ar OR un AND var tikt novērtētas līdz zināmām vērtībām divos gadījumos neatkarīgi no nezināmiem operandiem:
- 1. gadījums: "
1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." var tikt novērtēta līdz zināmam rezultātam ('1' vai "Problem"), - 2. gadījums: "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." var tikt novērtēta līdz zināmam rezultātam ('0' vai "OK").
Zabbix mēģina novērtēt šādas loģiskās izteiksmes, uzskatot neatbalstītos vienumus par nezināmiem operandiem. Abos iepriekš minētajos gadījumos tiks iegūta zināma vērtība ("Problem" vai "OK" attiecīgi); visos citos gadījumos trigeris tiks novērtēts kāUnknown.
- 1. gadījums: "
- Ja funkcijas novērtēšana atbalstītam vienumam beidzas ar kļūdu, funkcijas vērtība kļūst par
Unknownun tā piedalās kā nezināms operands turpmākajā izteiksmes novērtēšanā.
Ņemiet vērā, ka nezināmi operandi var "pazust" tikai loģiskajās izteiksmēs, kā aprakstīts iepriekš.
Aritmētiskajās izteiksmēs nezināmi operandi vienmēr noved pie rezultāta Unknown (izņemot dalīšanu ar 0).
Izteiksme, kuras rezultāts ir Unknown, nemaina trigeris stāvokli ("Problem/OK").
Tātad, ja tas bija "Problem" (skatiet 1. gadījumu), tas paliek tajā pašā problēmas stāvoklī pat tad, ja zināmā daļa tiek atrisināta ('1' kļūst par '0'), jo izteiksme tagad tiek novērtēta kā Unknown, un tas nemaina trigeris stāvokli.
Ja trigeris izteiksme ar vairākiem neatbalstītiem vienumiem tiek novērtēta kā Unknown, kļūdas ziņojums lietotāja saskarnē attiecas uz pēdējo novērtēto neatbalstīto vienumu.