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:
Funkcje wyzwalaczy pozwalają odwołać się do zebranych danych, aktualnego czasu i innych informacji.
Dostępna jest kompletna lista wspieranych 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.
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 |
Obciążenie procesora jest zbyt duże na www.zabbix.com
'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.
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.
Zmieniono /etc/passwd
Użyjemy funkcji diff:
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.
Ktoś ściąga duże pliki z internetu
Użyjemy funkcji min:
Wyrażenie jest prawdziwe, gdy liczba otrzymanych bajtów na eth0 jest większa od 100 KB w przeciągu ostatnich 5 minut.
Oba węzły klastrowego serwera SMTP nie działają
Zauważ, że używamy dwóch różnych hostów w jednym wyrażeniu:
Wyrażenie jest prawdziwe, gdy oba serwery SMTP smtp1.zabbix.com i smtp2.zabbix.com, nie działają.
Należy zaktualizować agenta Zabbix
Użyjemy funkcji str():
Wyrażenie jest prawdziwe, gdy agent Zabbix jest w wersji beta8 (na przykład 1.0beta8).
Serwer jest niedostępny
Wyrażenie jest prawdziwe, gdy host "zabbix.zabbix.com" jest niedostępny dłużej niż 5 minut w przeciągu ostatnich 30 minut.
Brak pulsu w ostatnich 3 minutach
Użyjemy funkcji nodata():
'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.
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).
Sprawdzenie, czy czas klienta jest zsynchronizowany z czasem serwera Zabbix
Użyjemy funkcji fuzzytime():
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.
Porównanie dzisiejszego średniego obciążenia z obciążeniem wczorajszym o tej samej porze (przy użyciu drugiego parametru przesunięcia_czasu
).
Wyrażenie zadziała jeżeli średnie obciążenie z ostatniej godziny przekroczy dwukrotne średnie obciążenie z godziny z poprzedniego dnia.
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:
Temperatura w pokoju serwera jest zbyt wysoka
Zauważ, że używamy makra {TRIGGER.VALUE}. Makro zwraca aktualną wartość wyzwalacza.
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.