2 Окидач израз

Преглед

Изрази који се користе у окидачи су веома флексибилан. Можете их користити за креирање сложених логичких тестова у вези са праћене статистике.

Једноставан израз користи функцију која се примењује на ставку са неки параметри. Функција враћа резултат који се упоређује са праг, користећи оператор и константу.

Синтакса једноставног корисног израза је function(/host/key,parameter)<operator><constant>.

на пример:

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

ће се покренути ако број примљених бајтова током последњих пет минута је увек била преко 100 килобајта.

Док је синтакса потпуно иста, са функционалне тачке гледишта постоје две врсте окидачких израза:

  • израз проблема - дефинише услове задатка
  • израз за опоравак (опционо) - дефинише додатне услове за решење проблема

Када дефинишете само израз проблема, овај израз ће се користити и као праг проблема и као праг за опоравак од проблема. Чим израз проблема добије вредност TRUE, постоји проблем. Чим се израз проблема процени на FALSE, проблем је решено.

Приликом дефинисања и израза проблема и додатног опоравка израз, решавање проблема постаје сложеније: не само израз проблема мора бити FALSE, али и израз за опоравак има да буде TRUE. Ово је корисно за стварање хистерезе и избегавање окидач млатарање.

Није продуктивно користити макро {TRIGGER.VALUE} у изразу за опоравак јер се овај израз процењује само када је окидач у стању "Проблем". Сходно томе, {TRIGGER.VALUE} ће се увек разрешити на "1" (што указује на стање "Проблем") док процењује израз.

Функције

Функције омогућавају израчунавање прикупљених вредности (просечне, минималне, максимум, збир), пронађите низове, референтно тренутно време и друге факторе.

Комплетна листа подржаних функција је доступан.

Функције обично враћају нумеричке вредности за поређење. Приликом повратка стрингове, поређење је могуће са = и <> оператори (погледајте пример).

Параметри функције

Параметри функције омогућавају да се наведе:

  • домаћин и кључ ставке (функције које се односе само на историју ставке домаћина)
  • параметри специфични за функцију
  • други изрази (није доступно за функције које упућују на домаћину историја ставке, погледајте други изрази за примери)

Домаћин и кључ ставке могу се навести као /host/key. Референтни ставка мора бити у подржаном стању (осим функције nodata(), који се рачуна и за неподржане ставке).

Док су други изрази окидача као параметри функције ограничени на не-историјске функције у окидачима, ово ограничење се не примењује у израчунате ставке.

Параметри специфични за функцију

Параметри специфични за функцију се постављају после кључа ставке и налазе се одвојено од кључа ставке зарезом. Погледајте подржано функције за комплетну листу ових параметрима.

Већина нумеричких функција прихвата време као параметар. Можете користити секунде или временски суфикси за означавање времена. Параметар којем претходи хеш ознака има другачије значење:

Expression Description
sum(/host/key,10m) Збир вредности у последњих 10 минута.
sum(/host/key,#10) Збир последњих десет вредности.

Параметри са хеш ознаком имају другачије значење са функцијом последњи - означавају N-ту претходну вредност, тако да с обзиром на вредности 30, 70, 20, 60, 50 (од најновијег до најмањег):

  • last(/host/key,#2) би вратио '70'
  • last(/host/key,#5) би вратио '50'
Временски помак

Опциони временски помак је подржан са рачунањем времена или вредности као параметар функције. Овај параметар омогућава референцирање података из а временски период у прошлости.

Временски помак почиње са сада - навођењем тренутног времена и јесте праћено +N<time unit> или -N<time unit> - за додавање или одузимање N временске јединице.

На пример, avg(/host/key,1h:now-1d) ће вратити просечну вредност за сат пре једног дана.

Временски помак наведен у месецима (M) и годинама (y) је подржан само за функције тренда. Остале функције подржавају секунде (s), минуте (m), сате (h), дане (d) и недеље (w).

Временски помак са апсолутним временским периодима

Апсолутни временски периоди су подржани у параметру временског померања, на пример, поноћ до поноћи за један дан, понедељак-недеља за недељу дана, први дан-последњи дан месец за месец дана.

Временски помак за апсолутне временске периоде почиње са сада - навођењем тренутно време, а прати га било који број временских операција: /<time unit> - дефинише почетак и крај јединице времена, за на пример, од поноћи до поноћи за дан, +N<time unit> или -N<time unit> - за додавање или одузимање N временских јединица.

Имајте на уму да вредност временског померања може бити већа или једнака 0, док је минимална вредност временског периода 1.

Parameter Description
1d:now/d Јуче
1d:now/d+1d Данас
2d:now/d+1d Последња 2 дана
1w:now/w Прошле недеље
1w:now/w+1w Ове седмице
Други изрази

Параметри функције могу садржати друге изразе, као у наставку синтакса:

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

Имајте на уму да се други изрази не могу користити ако се функција позива историја ставке. На пример, следећа синтакса није дозвољена:

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

Оператори

Следећи оператори су подржани за окидаче (у опадајућем приоритет извршења):

Priority Operator Definition Напомене за непознате вредности Принудно пребачени операнд да плута 1
1 - Унарни минус -Непознато → Непознато Да
2 не Логички НЕ не Непознато → Непознато Да
3 * Множење 0 * Непознато → Непознато
(да, Непознато, не 0 - да се не изгуби
Непознато у аритметичким операцијама)<br >1.2 * Непознато → Непознато
Да
/ Одсек Непознато / 0 → грешка
Непознато / 1.2 → Непознато
0.0 / Непознато → Непознато
Да
4 + Аритметички плус 1.2 + Непознато → Непознато Да
- Аритметички минус 1.2 - Непознато → Непознато Да
5 < Мање од. Оператор је дефинисан као:

А<B ⇔ (А<B-0,000001)
1.2 < Непознато → Непознато Да
<= Мање или једнако. Оператор је дефинисан као:

А<=B ⇔ (А≤B+0,000001)
Непознато <= Непознато → Непознато Да
> Више од. Оператор је дефинисан као:

А>B ⇔ (А>B+0,000001)
Да
>= Више од или једнако. Оператор је дефинисан као:

А>=B ⇔ (А≥B-0,000001)
Да
6 = Је једнако. Оператор је дефинисан као:

А=B ⇔ (А≥B-0,000001) и (А≤B+0,000001)
Не 1
<> Није једнако. Оператор је дефинисан као:

А<>B ⇔ (А<B-0,000001) или (А>B+0,000001)
Не 1
7 и Логички AND 0 и Непознато → 0
1 и Непознато → Непознато
Непознато и Непознато → Непознато
Да
8 или Логички OR 1 или Непознато → 1
0 или Непознато → Непознато
Непознато или Непознато → Непознато
Да

1 Операнд стринга се и даље претвара у нумерички ако:

  • други операнд је нумерички
  • оператор који није = или <> се користи за операнд

(Ако пребацивање не успе - нумерички операнд се пребацује на стринг операнд и оба операнда се пореде као стрингови.)

Оператори not, and и or разликују велика и мала слова и морају бити укључени мала слова. Они такође морају бити окружени размацима или заградама.

Сви оператори, осим унарног - и не, имају слева надесно асоцијативност. Унарни - и не су неасоцијативни (значење -(-1) и не (не 1) треба користити уместо --1 и не не 1).

Резултат евалуације:

  • <, <=, >, >=, =, <> оператори ће дати '1' у изразу окидача ако је наведено релација је тачна и '0' ако је нетачна. Ако је бар један операнд Непознато резултат је Непознат;
  • и за познате операнде ће дати '1' ако оба његова операнда упореди неједнако са '0'; иначе, даје '0'; за непознато операнди и доносе '0' само ако је један операнд једнак са '0'; у супротном, добија се 'Непознато';
  • или за познате операнде ће дати '1' ако било који од његових операнда упореди неједнако са '0'; иначе, даје '0'; за непознато операнди или даје '1' само ако је један операнд у поређењу са неједнаким '0'; у супротном, добија се 'Непознато';
  • Резултат оператора логичке негације није за познато операнд је '0' ако је вредност његовог операнда неједнака са '0'; '1' ако је вредност његовог операнда у поређењу са '0'. За непознато операнд не даје 'Непознато'.

Кеширање вредности

Zabbix сервер кешује вредности потребне за процену окидача. Због овог окидача евалуација изазива веће оптерећење базе података за неко време након поновног покретања сервера. Кеш вредности се не брише када вредности историје предмета се уклањају (било ручно или од стране домаћице), тако да сервер ће користити кеширане вредности док не буду старије од времена периоде дефинисане у функцијама окидача или се сервер поново покреће.

Ако нема недавних података у кешу и нема дефинисаног периода упита у функцији, Zabbix ће се по подразумеваној вредности вратити у прошлост до једне недеље да би упитао базу података за историјске вредности.

Примери окидача

Пример 1

Оптерећење процесора је превисоко на Zabbix серверу.

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

Коришћењем функције 'last()', позивамо се на најновије вредност. /Zabbix server/system.cpu.load[all,avg1] даје кратко име праћени параметар. Наводи да је домаћин 'Zabbix сервер' а кључ који се надгледа је 'system.cpu.load[all,avg1]'. коначно, >5 значи да је окидач у стању ПРОБЛЕМ кад год је највише недавно мерење оптерећења процесора са Zabbix сервера је веће од 5.

Пример 2

www.example.com је преоптерећен.

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

Израз је тачан када је или тренутно оптерећење процесора веће од 5 или је оптерећење процесора било више од 2 током последњих 10 минута.

Пример 3

/etc/passwd је промењен.

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

Израз је истинит када је претходна вредност /etc/passwd контролне суме разликује од најновијег.

Слични изрази могу бити корисни за праћење промена у важним датотеке, као што су /etc/passwd, /etc/inetd.conf, /kernel, итд.

Пример 4

Неко преузима велику датотеку са Интернета.

Употреба функције мин:

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

Израз је тачан када је број примљених бајтова на eth0 већи од 100 KB у последњих 5 минута.

Пример 5

Оба чвора кластеризованог SMTP сервера не раде.

Обратите пажњу на употребу два различита домаћина у једном изразу:

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

Израз је тачан када су оба SMTP сервера искључена на оба smtp1.example.com и smtp2.example.com.

Пример 6

Zabbix агент треба да се надогради.

Употреба функције find():

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

Израз је тачан ако Zabbix агент има верзију beta8.

Пример 7

Сервер је недоступан.

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

Израз је тачан ако је домаћин "example.example.com" недоступнији него 5 пута у последњих 30 минута.

Пример 8

Нема откуцаја срца у последња 3 минута.

Употреба функције nodata():

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

Да бисте користили овај окидач, 'tick' мора бити дефинисан као Zabbix trapper ставка. Домаћин би требао периодично шаљите податке за ову ставку користећи zabbix_sender. Ако нема података примљено у року од 180 секунди, вредност окидача постаје ПРОБЛЕМ.

Напомена да се 'nodata' може користити за било који тип ставке.

Пример 9

Активност CPU-а ноћу.

Употреба функције time():

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

Окидач може променити своје стање у проблем само ноћу (00:00 - 06:00).

Пример 10

Активност CPU-а у било ком тренутку са изузетком.

Употреба функције time() и оператора не:

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

Окидач може променити своје стање у проблем у било ком тренутку, осим 2 сата на недељној промени (недеља, 23:00 - понедељак, 01:00).

Пример 11

Проверите да ли је локално време клијента синхронизовано са временом Zabbix сервера.

Употреба функције fuzzytime():

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

Окидач ће се променити у стање проблема у случају да је укључено локално време сервер MySQL_DB и Zabbix сервер се разликују за више од 10 секунди. Напомена тај 'system.localtime' мора бити конфигурисан као пасивни провера.

Пример 12

Поређење просечног оптерећења данас са просечним оптерећењем у исто време јуче (користећи временски помак као now-1d).

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

Окидач ће се активирати ако је просечно оптерећење последњег сата изнад просечно оптерећење истог сата јуче више од два пута.

Пример 13

Коришћење вредности друге ставке за добијање прага окидача:

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

Окидач ће се покренути ако бесплатно складиште падне испод 10 процената.

Пример 14

Коришћење резултата евалуације да бисте добили прекорачење броја окидача праг:

(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

Окидач ће се покренути ако су најмање два окидача у изразу су у проблематичном стању.

Пример 15

Поређење вредности низа две ставке – операнди су функције које повратни низови.

Проблем: креирајте упозорење ако се верзија Ubuntu разликује на другој домаћини

last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Пример 16

Упоређивање две вредности низа - операнди су:

  • функција која враћа стринг
  • комбинација макроа и низова

Проблем: откријте промене у DNS упиту

Кључ ставке је:

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

са макроима дефинисаним као

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

и обично враћа:

example.com  MX  0 mail.example.com

Дакле, наш израз окидача за откривање да ли је резултат DNS упита одступио од очекиваног резултата је:

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

Обратите пажњу на наводнике око другог операнда.

Пример 17

Упоређивање две вредности низа - операнди су:

  • функција која враћа стринг
  • константа стринга са специјалним знаковима \ и "

Проблем: откријте да ли је садржај датотеке /tmp/hello једнак:

\" //hello ?\"

Опција 1) директно напишите стринг

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

Обратите пажњу на то како се знакови \ и " избегавају када се стринг упореди директно.

Опција 2) користите макро

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

у изразу:

last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
Пример 18

Поређење дугорочних периода.

Проблем: Оптерећење Exchange сервера је порасло за више од 10% прошлог месеца

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

Такође можете користити Догађај име поље у окидачу конфигурацију за прављење значајне поруке упозорења, на пример за примити нешто као

"Оптерећење Екцханге сервера је порасло за 24% у јулу (0,69) у поређењу са јуном (0,56)"

назив догађаја мора бити дефинисан као:

Оптерећење {HOST.HOST} сервера повећано за {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% у {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) у поређењу са {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})

Такође је корисно дозволити ручно затварање у конфигурацији окидача за ова врста проблема.

Имате ли пример израза окидача који би могао бити користан другима? Користите Формулар предлога да га пошаљете Zabbix програмерима.

Хистереза

Понекад је потребан интервал између проблема и стања опоравка, а не прости праг. На пример, ако желимо да дефинишемо а окидач који пријављује проблем када температура просторије сервера порасте изнад 20°C и желимо да остане у проблематичном стању до температуре падне испод 15°C, једноставан праг окидача на 20°C неће бити довољан.

Уместо тога, морамо да дефинишемо израз окидача за проблемски догађај прво (температура изнад 20°C). Затим морамо дефинисати додатну стање опоравка (температура испод 15°C). Ово се ради дефинисањем ан додатни параметар Израз за опоравак када дефинисање окидач.

У овом случају, опоравак од проблема ће се одвијати у два корака:

  • Прво, мораће да се изрази проблем (температура изнад 20°C). проценити на FALSE
  • Друго, израз опоравка (температура испод 15°C) ће имати да се процени на TRUE

Израз за опоравак ће бити процењен само када је проблемски догађај прво решено.

Сам израз за опоравак који је TRUE није реши проблем ако је израз проблема и даље TRUE!

Пример 1

Температура у серверској просторији је превисока.

Израз проблема:

last(/server/temp)>20

Израз за опоравак:

last(/server/temp)<=15
Пример 2

Слободног простора на диску је премало.

Израз проблема: то је мање од 10GB за последњих 5 минута

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

Израз за опоравак: то је више од 40GB за последњих 10 минута

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

Изрази са непознатим операндима

Генерално, непознати операнд (као што је неподржана ставка) у изразу ће одмах приказати вредност окидача у Непознато.

Међутим, у неким случајевима непознати операнди (неподржане ставке, грешке функције) се прихватају у евалуацију израза:

  • Функција nodata() се процењује без обзира на то да ли је референтна ставка подржана или не.
  • Логички изрази са ИЛИ и И могу се проценити на познате вредности у два случаја без обзира на непознате операнде:
    • Случај 1: "1 или some_function(unsupported_item1) или some_function(unsupported_item2) или ..." може се проценити на познати резултат ('1' или "Пробле"),
    • Случај 2: "0 и нека_функција(неподржана_ставка1) и нека_функција(неподржана_ставка2) и ..." могу се проценити на познати резултат ('0' или "ОК").
      Zabbix покушава да процени такве логичке изразе узимајући неподржане ставке као непознати операнди. У два горња случаја биће произведена позната вредност ("Проблем" или "ОК", респективно); у свим осталим случајевима окидач ће бити процењен на Непознато.
  • Ако евалуација функције за подржану ставку резултира грешком, вредност функције постаје Непознато и учествује као непознати операнд у даљем вредновању израза.

Имајте на уму да непознати операнди могу "нестати" само у логичким изразима као горе описано. У аритметичким изразима непознати операнди увек воде до резултат Непознато (осим дељења са 0).

Израз који резултира са Непознато не мења стање окидача ("Проблем/ОК"). Дакле, ако је то био "Проблем" (види случај 1), остаје у истом проблемском стању чак и ако је познато део је разрешен ('1' постаје '0'), јер је израз сада процењен на Непознато а то не мења стање окидача.

Ако израз окидача са неколико неподржаних ставки процењује на Непознато порука о грешци у корисничком интерфејсу се односи на последњу процењена неподржана ставка.