This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

2 Wyrażenie wyzwalacza

Przegląd

Wyrażenia używane w wyzwalaczach są bardzo elastyczne. Można ich użyć do tworzenia złożonych testów logicznych zależących od monitorowanych statystyk.

Proste wyrażenie może wyglądać następująco:

{<serwer>:<klucz>.<funkcja>(<parametr>)}<operator><stała>

1 Funkcje

Funkcje wyzwalaczy pozwalają odwołać się do zebranych danych, aktualnego czasu i innych informacji.

Dostępna jest kompletna lista wspieranych funkcji.

2 Parametry funkcji

Większość funkcji numerycznych traktuje parametr jako liczbę sekund.

Żeby zaznaczyć, że parametr ma inne znaczenie, należy użyć prefiksu #:

WYWOŁANIE FUNKCJI ZNACZENIE
sum(600) Suma wszystkich wartości z 600 sekund
sum(#5) Suma ostatnich pięciu wartości

Funkcja last inaczej traktuje wartości z prefiksem # - wybiera n-tą poprzednią wartość, zatem mając wartości 3, 7, 2, 6, 5 (od najnowszej do najstarszej), last(#2) zwróci 7 a last(#5) powinno zwrócić 5.

Funkcje avg, count, last, min i max obsługują dodatkowy, drugi parametr przesunięcie_czasu. Parametr ten pozwala odwołać się do okresu czasu w przeszłości. Na przykład, avg(1h,1d) zwróci wartość średnią z godziny, z poprzedniego dnia.

Wyzwalacze przetwarzają tylko informacje z historii. Jeżeli historia nie jest dostępna (szczególnie ważne przy przesunięciu czasu), nie będą używane dane trendów, zatem historia powinna być przechowywana przynajmniej dla okresu, jakiego oczekują funkcje wyzwalaczy.

W wyrażeniach wyzwalaczy można używać wspieranych jednostek miary, na przykład '5m' (minut) zamiast '300' sekund lub '1d' (dzień) zamiast '86400' sekund. '1K' oznaczać będzie '1024' bajty.

3 Operatory

Następujące operatory są obsługiwane przez wyzwalacze (w kolejności priorytetu wykonania):

PRIORYTET OPERATOR DEFINICJA
1 / Dzielenie
2 *** |Mnożenie | |3** - Minus arytmetyczny
4 + Plus arytmetyczny
5 < Mniejsze niż. Operator zdefiniowany jest jako:
A<B <=> (A<=B-0.000001)
6 > Większe niż. Operator zdefiniowany jest jako:
A>B <=> (A>=B+0.000001)
7 # Różne. Operator zdefiniowany jest jako:
A#B <=> (A<=B-0.000001) | (A>=B+0.000001)
8 = Równe. Operator zdefiniowany jest jako:
A=B <=> (A>B-0.000001) & (A<B+0.000001)
9 & Logiczne I
10 | Logiczne LUB

4 Przykłady wyzwalaczy

Przykład 1

Obciążenie procesora jest zbyt duże na www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last()}>5

'www.zabbix.com:system.cpu.load[all,avg1]' to nazwa skrócona monitorowanego parametru. Określa, że serwerem jest 'www.zabbix.com' a monitorowanym kluczem jest 'system.cpu.load[all,avg1]'. Używając funkcji 'last()', odwołujemy się do ostatniej wartości. Na koniec, '>5' oznacza, że wyzwalacz znajdzie się w stanie PROBLEM za każdym razem, gdy pomiar obciążenia procesora z www.zabbix.com przekroczy 5.

Przykład 2

www.zabbix.com jest przeciążony

{www.zabbix.com:system.cpu.load[all,avg1].last()}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2 

Wyrażenie to jest prawdziwe, gdy obciążenie procesora jest większe od 5 lub gdy obciążenie procesora było większe od 2 przez 10 ostatnich minut.

Przykład 3

Zmieniono /etc/passwd

Użyjemy funkcji diff:

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}>0

Wyrażenie jest prawdziwe, gdy poprzednia wartość sumy kontrolnej /etc/passwd będzie różna od aktualnej.

Podobnych wyrażeń można używać do monitorowania zmian w ważnych plikach, takich jak /etc/passwd, /etc/inetd.conf, /kernel, itp.

Przykład 4

Ktoś ściąga duże pliki z internetu

Użyjemy funkcji min:

{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

Wyrażenie jest prawdziwe, gdy liczba otrzymanych bajtów na eth0 jest większa od 100 KB w przeciągu ostatnich 5 minut.

Przykład 5

Oba węzły klastrowego serwera SMTP nie działają

Zauważ, że używamy dwóch różnych hostów w jednym wyrażeniu:

{smtp1.zabbix.com:net.tcp.service[smtp].last()}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last()}=0

Wyrażenie jest prawdziwe, gdy oba serwery SMTP smtp1.zabbix.com i smtp2.zabbix.com, nie działają.

Przykład 6

Należy zaktualizować agenta Zabbix

Użyjemy funkcji str():

{zabbix.zabbix.com:agent.version.str("beta8")}=1

Wyrażenie jest prawdziwe, gdy agent Zabbix jest w wersji beta8 (na przykład 1.0beta8).

Przykład 7

Serwer jest niedostępny

{zabbix.zabbix.com:icmpping.count(30m,0)}>5

Wyrażenie jest prawdziwe, gdy host "zabbix.zabbix.com" jest niedostępny dłużej niż 5 minut w przeciągu ostatnich 30 minut.

Przykład 8

Brak pulsu w ostatnich 3 minutach

Użyjemy funkcji nodata():

{zabbix.zabbix.com:tick.nodata(3m)}=1

'tick' musi być typu 'Zabbix trapper'. Żeby ten wyzwalacz zadziałał, należy zdefiniować pozycję 'tick'. Host powinien wysyłać okresowo dane dla tego parametru przy użyciu zabbix_sender. Jeżeli w przeciągu 180 sekund nie zostaną odebrane żadne dane, stan wyzwalacza zmieni się na PROBLEM.

Przykład 9

Aktywność CPU w godzinach nocnych

Użyjemy funkcji time():

{zabbix:system.cpu.load[all,avg1].min(5m)}>2&{zabbix:system.cpu.load[all,avg1].time()}>000000&{zabbix:system.cpu.load[all,avg1].time()}<060000

Wyzwalacz może zmienić swój stan jedynie w godzinach nocnych (00:00-06:00).

Przykład 10

Sprawdzenie, czy czas klienta jest zsynchronizowany z czasem serwera Zabbix

Użyjemy funkcji fuzzytime():

{MySQL_DB:system.localtime.fuzzytime(10)}=0

Wyzwalacz zmieni swój stan na problem w przypadku, gdy lokalny czas serwera MySQL_DB i czas serwera Zabbix różnią się więcej niż 10 sekund.

Przykład 11

Porównanie dzisiejszego średniego obciążenia z obciążeniem wczorajszym o tej samej porze (przy użyciu drugiego parametru przesunięcia_czasu).

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

Wyrażenie zadziała jeżeli średnie obciążenie z ostatniej godziny przekroczy dwukrotne średnie obciążenie z godziny z poprzedniego dnia.

5 Histereza

Czasami wyzwalacz musi mieć różne warunki dla różnych stanów. Na przykład, chcemy zdefiniować wyzwalacz, który zmieni stan na PROBLEM, gdy temperatura w pokoju serwera przekroczy 20C i powinien w nim pozostać aż temperatura obniży się poniżej 15C.

Żeby to zrobić definiujemy następujący wyzwalacz:

Przykład 1

Temperatura w pokoju serwera jest zbyt wysoka

({TRIGGER.VALUE}=0&{server:temp.last()}>20)|
       ({TRIGGER.VALUE}=1&{server:temp.last()}>15)

Zauważ, że używamy makra {TRIGGER.VALUE}. Makro zwraca aktualną wartość wyzwalacza.

Przykład 2

Zbyt mało wolnej przestrzeni na dysku

Problem: jest mniej niż 10GB wolnej przestrzeni w ciągu ostatnich 5 minut

Odzyskanie: jest więcej niż 40GB wolnej przestrzeni w ciągu ostatnich 10 minut

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |
       ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

Zauważ, że używamy makra {TRIGGER.VALUE}. Makro zwraca aktualną wartość wyzwalacza.