Изрази који се користе у тригерима су веома флексибилни. Можете их користити за креирање сложених логичких тестова у вези са праћеном статистиком.
Једноставан израз користи функцију која се примењује на ставку са неким параметрима. Функција враћа резултат који се упоређује са прагом, користећи оператор и константу.
Синтакса једноставног корисног израза је function(/host/key,parameter)<operator><constant>
.
На пример:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
ће се покренути ако је број примљених бајтова током последњих пет минута увек био преко 100 килобајта.
Иако је синтакса потпуно иста, са функционалне тачке гледишта постоје две врсте израза за окидање:
Када се дефинише само израз проблема, овај израз ће се користити и као праг проблема и као праг за опоравак проблема. Чим се израз проблема процени као ТАЧНО, постоји проблем. Чим се израз проблема процени као НЕТАЧНО, проблем је решен.
Када се дефинишу и израз проблема и додатни израз за опоравак, решавање проблема постаје сложеније: не само да израз проблема мора бити НЕТАЧАН, већ и израз за опоравак мора бити ТАЧАН. Ово је корисно за креирање hysteresis и избегавање клацања окидача.
Непродуктивно је користити макро {TRIGGER.VALUE} у изразу за опоравак јер се овај израз процењује само када је окидач у стању "Проблем". Сходно томе, {TRIGGER.VALUE} ће увек бити "1" (што указује на стање "Проблем") приликом извршавања израза.
Функције омогућавају израчунавање прикупљених вредности (просечне, минималне, максимум, збир), пронађите низове, референтно тренутно време и друге факторе.
Комплетна листа подржаних функција је доступан.
Функције обично враћају нумеричке вредности за поређење. Приликом повратка стрингове, поређење је могуће са = и <> оператори (погледајте пример).
Параметри функције омогућавају да се наведе:
Кључ домаћина и ставке може се навести као /host/key
.
Ако је домаћин изостављен (нпр. као у function(//key,parameter,...)
), функција ће референцирати тренутног домаћина.
Референцирана ставка мора бити у подржаном стању (осим за функцију nodata(), која се израчунава и за неподржане ставке).
Док су други изрази окидача као параметри функције ограничени на функције које нису историјске у окидачима, ово ограничење се не примењује на израчунате ставке.
Параметри специфични за функцију се налазе после кључа ставке и одвојени су од кључа ставке зарезом. Погледајте подржане функције за комплетну листу ових параметара.
Већина нумеричких функција прихвата време као параметар. Можете користити секунде или временске суфиксе да бисте означили време. Претходи му знак хеш, параметар има другачије значење:
Expression | Description |
---|---|
sum(/host/key,10m) | Збир вредности у последњих 10 минута. |
sum(/host/key,#10) | Збир последњих десет вредности. |
Параметри са ознаком хеш имају другачије значење са функцијом last - они означавају N-ту претходну вредност, тако да су за вредности 30, 70, 20, 60, 50 (од најновије до најмање скорије):
last(/host/key,#2)
би вратило '70'last(/host/key,#5)
би вратило '50'Опциони временски помак је подржан са временом или бројачем вредности као параметром функције. Овај параметар омогућава референцирање података из временског периода у прошлости.
Временски помак почиње са now
- што одређује тренутно време, а затим следи +N<time unit>
или -N<time unit>
- за додавање или одузимање N временских јединица.
На пример, avg(/host/key,1h:now-1d)
ће вратити просечну вредност за сат времена пре једног дана.
Временски помак наведен у месецима (M) и годинама (y) је подржан само за функције тренда. Друге функције подржавају секунде (s), минуте (m), сате (h), дане (d) и недеље (w).
Временски помак са апсолутним временским периодима
Апсолутни временски периоди су подржани у параметру временског помака, на пример, од поноћи до поноћи за дан, понедељак-недеља за недељу дана, први дан-последњи дан у месецу за месец.
Временски помак за апсолутне временске периоде почиње са now
- што одређује тренутно време, а затим следи било који број временских операција: /<time unit>
- дефинише почетак и крај временске јединице, на пример, од поноћи до поноћи за дан, +N<time unit>
или -N<time unit>
- за додавање или одузимање N временских јединица.
Имајте на уму да вредност временског помака може бити већа или једнака 0, док је минимална вредност временског периода 1.
Parameter | Description |
---|---|
1d:now/d | Yesterday |
1d:now/d+1d | Today |
2d:now/d+1d | Last 2 days |
1w:now/w | Last week |
1w:now/w+1w | This week |
Параметри функције могу садржати друге изразе, као у наставку синтакса:
Имајте на уму да се други изрази не могу користити ако се функција позива историја ставке. На пример, следећа синтакса није дозвољена:
min(/host/key,#5*10)
The following operators are supported for triggers (in descending priority of execution):
Priority | Operator | Definition | Notes for unknown values | Force cast operand to float 1 |
---|---|---|---|---|
1 | - | Unary minus | -Unknown → Unknown | Yes |
2 | not | Logical NOT | not Unknown → Unknown | Yes |
3 | * | Multiplication | 0 * Unknown → Unknown (yes, Unknown, not 0 - to not lose Unknown in arithmetic operations) 1.2 * Unknown → Unknown |
Yes |
/ | Division | Unknown / 0 → error Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Yes | |
4 | + | Arithmetical plus | 1.2 + Unknown → Unknown | Yes |
- | Arithmetical minus | 1.2 - Unknown → Unknown | Yes | |
5 | < | Less than. The operator is defined as: A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | Yes |
<= | Less than or equal to. The operator is defined as: A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | Yes | |
> | More than. The operator is defined as: A>B ⇔ (A>B+0.000001) |
Yes | ||
>= | More than or equal to. The operator is defined as: A>=B ⇔ (A≥B-0.000001) |
Yes | ||
6 | = | Is equal. The operator is defined as: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
No 1 | |
<> | Not equal. The operator is defined as: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
No 1 | ||
7 | and | Logical AND | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
Yes |
8 | or | Logical OR | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
Yes |
1 String operand is still cast to numeric if:
(If the cast fails - numeric operand is cast to a string operand and both operands get compared as strings.)
not, and and or operators are case-sensitive and must be in lowercase. They also must be surrounded by spaces or parentheses.
All operators, except unary - and not, have left-to-right associativity. Unary - and not are non-associative (meaning -(-1) and not (not 1) should be used instead of --1 and not not 1).
Evaluation result:
Values required for trigger evaluation are cached by Zabbix server. Because of this trigger evaluation causes a higher database load for some time after the server restarts. The value cache is not cleared when item history values are removed (either manually or by housekeeper), so the server will use the cached values until they are older than the time periods defined in trigger functions or server is restarted.
If there is no recent data in the cache and there is no defined querying period in the function, Zabbix will by default go as far back in the past as one week to query the database for historical values.
Оптерећење процесора је превисоко на 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% прошлог месеца
Такође можете користити Догађај име поље у окидачу конфигурацију за прављење значајне поруке упозорења, на пример за примити нешто као
"Load of Exchange server increased by 24% in July (0.69) comparing to June (0.56)"
назив догађаја мора бити дефинисан као:
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)})
Такође је корисно дозволити ручно затварање у конфигурацији окидача за ова врста проблема.
Имате ли пример израза окидача који би могао бити користан другима? Користите Формулар предлога да га пошаљете Zabbix програмерима.
Понекад је потребан интервал између стања проблема и стања опоравка, уместо једноставног прага. На пример, ако желимо да дефинишемо окидач који пријављује проблем када температура у серверској соби пређе 20°C и желимо да остане у стању проблема док температура не падне испод 15°C, једноставан праг окидача на 20°C неће бити довољан.
Уместо тога, прво морамо дефинисати израз окидача за проблемски догађај (температура изнад 20°C). Затим морамо дефинисати додатни услов опоравка (температура испод 15°C). То се ради дефинисањем додатног параметра Израз опоравка приликом дефинисања окидача.
У овом случају, решавање проблема ће се одвијати у два корака:
Израз опоравка ће бити процењен само када се проблемски догађај прво реши.
Само чињеница да је израз опоравка ТАЧАН не решава проблем ако је израз проблема и даље ТАЧАН!
Температура у серверској просторији је превисока.
Израз проблема:
Израз за опоравак:
Слободног простора на диску је премало.
Израз проблема: то је мање од 10GB за последњих 5 минута
Израз за опоравак: то је више од 40GB за последњих 10 минута
Генерално, непознати операнд (као што је неподржана ставка) у изразу ће одмах приказати вредност окидача као Непознато
.
Међутим, у неким случајевима непознати операнди (неподржане ставке, грешке функција) се дозвољавају у израчунавање израза:
nodata()
се израчунава без обзира на то да ли је референцирана ставка подржана или не.1 или нека_функција(unsupported_item1) или нека_функција(unsupported_item2) или ...
" може се проценити у познати резултат ('1' или "Проблем"),0 и нека_функција(unsupported_item1) и нека_функција(unsupported_item2) и ...
" могу се проценити у познати резултат ('0' или "У реду").Непознато
.Непознато
и учествује као непознати операнд у даљој процени израза.Имајте на уму да непознати операнди могу "нестати" само у логичким изразима као што је горе описано. У аритметичким изразима непознати операнди увек воде до резултата Непознато
(осим дељења са 0).
Израз који резултира са Непознато
не мења стање окидача ("Проблем/У реду"). Дакле, ако је био "Проблем" (видети Случај 1), остаје у истом стању проблема чак и ако је познати део решен ('1' постаје '0'), јер се израз сада евалуира као Непознато
и то не мења стање окидача.
Ако се израз окидача са неколико неподржаних елемената евалуира као Непознато
, порука о грешци у корисничком интерфејсу се односи на последњи неподржани евалуирани елемент.