Изрази који се користе у окидачи су веома флексибилан. Можете их користити за креирање сложених логичких тестова у вези са праћене статистике.
Једноставан израз користи функцију која се примењује на ставку са неки параметри. Функција враћа резултат који се упоређује са праг, користећи оператор и константу.
Синтакса једноставног корисног израза је function(/host/key,parameter)<operator><constant>
.
на пример:
ће се покренути ако број примљених бајтова током последњих пет минута је увек била преко 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(/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).
Резултат евалуације:
Zabbix сервер кешује вредности потребне за процену окидача. Због овог окидача евалуација изазива веће оптерећење базе података за неко време након поновног покретања сервера. Кеш вредности се не брише када вредности историје предмета се уклањају (било ручно или од стране домаћице), тако да сервер ће користити кеширане вредности док не буду старије од времена периоде дефинисане у функцијама окидача или се сервер поново покреће.
Ако нема недавних података у кешу и нема дефинисаног периода упита у функцији, Zabbix ће се по подразумеваној вредности вратити у прошлост до једне недеље да би упитао базу података за историјске вредности.
Оптерећење процесора је превисоко на Zabbix серверу.
Коришћењем функције 'last()', позивамо се на најновије вредност. /Zabbix server/system.cpu.load[all,avg1]
даје кратко име праћени параметар. Наводи да је домаћин 'Zabbix сервер' а кључ који се надгледа је 'system.cpu.load[all,avg1]'. коначно, >5
значи да је окидач у стању ПРОБЛЕМ кад год је највише недавно мерење оптерећења процесора са Zabbix сервера је веће од 5.
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 минута.
/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, итд.
Неко преузима велику датотеку са Интернета.
Употреба функције мин:
Израз је тачан када је број примљених бајтова на eth0 већи од 100 KB у последњих 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.
Zabbix агент треба да се надогради.
Употреба функције find():
Израз је тачан ако Zabbix агент има верзију beta8.
Сервер је недоступан.
Израз је тачан ако је домаћин "example.example.com" недоступнији него 5 пута у последњих 30 минута.
Нема откуцаја срца у последња 3 минута.
Употреба функције nodata():
Да бисте користили овај окидач, 'tick' мора бити дефинисан као Zabbix trapper ставка. Домаћин би требао периодично шаљите податке за ову ставку користећи zabbix_sender. Ако нема података примљено у року од 180 секунди, вредност окидача постаје ПРОБЛЕМ.
Напомена да се 'nodata' може користити за било који тип ставке.
Активност CPU-а ноћу.
Употреба функције time():
Окидач може променити своје стање у проблем само ноћу (00:00 - 06:00).
Активност 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).
Проверите да ли је локално време клијента синхронизовано са временом Zabbix сервера.
Употреба функције fuzzytime():
Окидач ће се променити у стање проблема у случају да је укључено локално време сервер MySQL_DB и Zabbix сервер се разликују за више од 10 секунди. Напомена тај 'system.localtime' мора бити конфигурисан као пасивни провера.
Поређење просечног оптерећења данас са просечним оптерећењем у исто време јуче (користећи временски помак као now-1d
).
Окидач ће се активирати ако је просечно оптерећење последњег сата изнад просечно оптерећење истог сата јуче више од два пута.
Коришћење вредности друге ставке за добијање прага окидача:
last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1
Окидач ће се покренути ако бесплатно складиште падне испод 10 процената.
Коришћење резултата евалуације да бисте добили прекорачење броја окидача праг:
(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
Окидач ће се покренути ако су најмање два окидача у изразу су у проблематичном стању.
Поређење вредности низа две ставке – операнди су функције које повратни низови.
Проблем: креирајте упозорење ако се верзија Ubuntu разликује на другој домаћини
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Упоређивање две вредности низа - операнди су:
Проблем: откријте промене у DNS упиту
Кључ ставке је:
са макроима дефинисаним као
и обично враћа:
Дакле, наш израз окидача за откривање да ли је резултат 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}"
Обратите пажњу на наводнике око другог операнда.
Упоређивање две вредности низа - операнди су:
Проблем: откријте да ли је садржај датотеке /tmp/hello
једнак:
Опција 1) директно напишите стринг
Обратите пажњу на то како се знакови \ и " избегавају када се стринг упореди директно.
Опција 2) користите макро
у изразу:
Поређење дугорочних периода.
Проблем: Оптерећење Exchange сервера је порасло за више од 10% прошлог месеца
Такође можете користити Догађај име поље у окидачу конфигурацију за прављење значајне поруке упозорења, на пример за примити нешто као
"Оптерећење Екцханге сервера је порасло за 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). Ово се ради дефинисањем ан додатни параметар Израз за опоравак када дефинисање окидач.
У овом случају, опоравак од проблема ће се одвијати у два корака:
Израз за опоравак ће бити процењен само када је проблемски догађај прво решено.
Сам израз за опоравак који је TRUE није реши проблем ако је израз проблема и даље TRUE!
Температура у серверској просторији је превисока.
Израз проблема:
Израз за опоравак:
Слободног простора на диску је премало.
Израз проблема: то је мање од 10GB за последњих 5 минута
Израз за опоравак: то је више од 40GB за последњих 10 минута
Генерално, непознати операнд (као што је неподржана ставка) у изразу ће одмах приказати вредност окидача у Непознато
.
Међутим, у неким случајевима непознати операнди (неподржане ставке, грешке функције) се прихватају у евалуацију израза:
nodata()
се процењује без обзира на то да ли је референтна ставка подржана или не.1 или some_function(unsupported_item1) или some_function(unsupported_item2) или ...
" може се проценити на познати резултат ('1' или "Пробле"),0 и нека_функција(неподржана_ставка1) и нека_функција(неподржана_ставка2) и ...
" могу се проценити на познати резултат ('0' или "ОК").Непознато
.Непознато
и учествује као непознати операнд у даљем вредновању израза.Имајте на уму да непознати операнди могу "нестати" само у логичким изразима као горе описано. У аритметичким изразима непознати операнди увек воде до резултат Непознато
(осим дељења са 0).
Израз који резултира са Непознато
не мења стање окидача ("Проблем/ОК"). Дакле, ако је то био "Проблем" (види случај 1), остаје у истом проблемском стању чак и ако је познато део је разрешен ('1' постаје '0'), јер је израз сада процењен на Непознато
а то не мења стање окидача.
Ако израз окидача са неколико неподржаних ставки процењује на Непознато
порука о грешци у корисничком интерфејсу се односи на последњу процењена неподржана ставка.