7 Funkcje wyzwalaczy predykcyjnych
Przegląd
Czasami pojawiają się oznaki nadchodzącego problemu. Oznaki te można dostrzec, aby można było podjąć działania z wyprzedzeniem i zapobiec problemowi lub przynajmniej zminimalizować jego skutki.
Zabbix udostępnia narzędzia do przewidywania przyszłego zachowania monitorowanego systemu na podstawie danych historycznych. Narzędzia te są realizowane za pomocą predykcyjnych funkcji wyzwalacza.
Funkcje
Przed skonfigurowaniem wyzwalacza konieczne jest zdefiniowanie, czym jest stan problemowy i ile czasu potrzeba na podjęcie działania. Następnie istnieją dwa sposoby skonfigurowania wyzwalacza sygnalizującego potencjalnie niepożądaną sytuację. Po pierwsze: wyzwalacz musi się uruchomić, gdy oczekuje się, że system będzie w stanie problemowym po upływie "time to act". Po drugie: wyzwalacz musi się uruchomić, gdy system ma osiągnąć stan problemowy za mniej niż "time to act". Odpowiednie funkcje wyzwalacza do użycia to forecast i timeleft. Należy zauważyć, że podstawowa analiza statystyczna jest w zasadzie identyczna dla obu funkcji. Możesz skonfigurować wyzwalacz w dowolny preferowany sposób, uzyskując podobne rezultaty.
Parametry
Obie funkcje używają niemal tego samego zestawu parametrów. Skorzystaj z listy obsługiwanych funkcji jako odniesienia.
Przedział czasu
Przede wszystkim należy określić historyczny okres, który Zabbix ma
analizować, aby wygenerować prognozę. Robi się to w znany sposób za
pomocą parametru time period oraz opcjonalnego przesunięcia czasu,
tak jak w przypadku funkcji avg, count, delta, max, min
i sum.
Horyzont prognozowania
(tylko forecast)
Parametr time określa, jak daleko w przyszłość Zabbix ma
ekstrapolować zależności znalezione w danych historycznych. Niezależnie od tego, czy używasz
time_shift, czy nie, time jest zawsze liczony od bieżącego momentu.
Próg do osiągnięcia
(tylko timeleft)
Parametr threshold określa wartość, którą analizowana pozycja musi osiągnąć,
nie ma znaczenia, czy od góry, czy od dołu. Gdy wyznaczymy f(t)
(patrz poniżej), należy rozwiązać równanie f(t) = threshold i zwrócić
pierwiastek, który jest bliżej bieżącego momentu i znajduje się na prawo od niego, albo
1.7976931348623158E+308, jeśli taki pierwiastek nie istnieje.
Gdy wartości pozycji zbliżają się do progu, a następnie go przekraczają,
timeleft zakłada, że przecięcie już nastąpiło w przeszłości, i
w związku z tym przełącza się na następne przecięcie z poziomem threshold, jeśli
istnieje. Najlepszą praktyką jest używanie prognoz jako uzupełnienia
zwykłej diagnostyki problemów, a nie jako jej zastępstwa.1
Funkcje dopasowania
Domyślną funkcją fit jest funkcja liniowa. Jeśli jednak monitorowany system jest bardziej złożony, masz do wyboru więcej opcji.
fit |
x = f(t) |
|---|---|
| liniowa | x = a + b*t |
| wielomianowaN2 | x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn |
| wykładnicza | x = a*exp(b*t) |
| logarytmiczna | x = a + b*log(t) |
| potęgowa | x = a*tb |
Tryby
(tylko forecast)
Za każdym razem, gdy funkcja wyzwalacza jest oceniana, pobiera dane z
określonego okresu historii i dopasowuje do nich określoną funkcję. Jeśli
więc dane są nieco inne, dopasowana funkcja również będzie nieco inna.
Jeśli po prostu obliczymy wartość dopasowanej funkcji w określonym
momencie w przyszłości, nie będziesz wiedzieć nic o tym, jak
analizowana pozycja ma się zachowywać między teraz a tym momentem w
przyszłości. W przypadku niektórych opcji fit (na przykład polynomial)
prosta wartość z przyszłości może być myląca.
mode |
wynik forecast |
|---|---|
| value | f(now + time) |
| max | max~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| min | min~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| delta | max - min |
| avg | średnia f(t) (now <= t <= now + time) zgodnie z definicją |
Szczegóły
Aby uniknąć obliczeń z ogromnymi liczbami, przyjmujemy znacznik czasu pierwszej wartości w określonym okresie plus 1 ns jako nowy czas zerowy (bieżący czas epoki ma rząd 109, kwadrat epoki to 1018, a precyzja podwójna wynosi około 10-16). Dodanie 1 ns ma na celu zapewnienie wszystkich dodatnich wartości czasu dla dopasowań logarytmicznych i potęgowych, które obejmują obliczanie log(t). Przesunięcie czasu nie wpływa na dopasowania liniowe, wielomianowe ani wykładnicze (poza łatwiejszymi i dokładniejszymi obliczeniami), ale zmienia kształt funkcji logarytmicznych i potęgowych.
Potencjalne błędy
Funkcje zwracają -1 w następujących sytuacjach:
- określony okres oceny nie zawiera danych;
- wynik operacji matematycznej nie jest zdefiniowany3;
- komplikacje numeryczne (niestety, dla niektórych zestawów danych wejściowych zakres i precyzja formatu zmiennoprzecinkowego podwójnej precyzji stają się niewystarczające)4.
Nie są zgłaszane żadne ostrzeżenia ani błędy, jeśli wybrany dopasowany model słabo opisuje dostarczone dane lub danych jest po prostu zbyt mało, aby uzyskać dokładną prognozę.
Przykłady i radzenie sobie z błędami
Aby otrzymać ostrzeżenie, gdy zbliża się wyczerpanie wolnego miejsca na dysku na twoim hoście, możesz użyć wyrażenia wyzwalacza takiego jak to:
timeleft(/host/vfs.fs.size[/,free],1h,0)}<1h
Jednak kod błędu -1 może wejść do gry i wprowadzić twój wyzwalacz w stan problemu. Zasadniczo jest to dobre, ponieważ otrzymujesz ostrzeżenie, że twoje prognozy nie działają poprawnie i powinieneś przyjrzeć się im dokładniej, aby ustalić dlaczego. Ale czasami jest to złe, ponieważ -1 może po prostu oznaczać, że w ostatniej godzinie nie uzyskano żadnych danych o wolnym miejscu na dysku na hoście. Jeśli otrzymujesz zbyt wiele fałszywie dodatnich alertów, rozważ użycie bardziej złożonego wyrażenia wyzwalacza 5:
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1
Sytuacja jest nieco trudniejsza w przypadku forecast. Przede wszystkim,
-1 może, ale nie musi, wprowadzić wyzwalacz w stan problemu, w zależności od tego,
czy masz wyrażenie takie jak forecast(/host/item,(...))<... czy
takie jak forecast(/host/item,(...))>...
Ponadto, -1 może być prawidłową prognozą, jeśli normalne jest, że wartość
pozycji jest ujemna. Jednak prawdopodobieństwo takiej sytuacji w rzeczywistych
warunkach jest znikome (zobacz, jak działa operator = how). Dlatego dodaj
... or forecast(/host/item,(...))=-1 albo
... and forecast(/host/item,(...))<>-1, jeśli chcesz lub nie chcesz
odpowiednio traktować -1 jako problem.
Przypisy
1 Na przykład prosty wyzwalacz taki jak
timeleft(/host/item,1h,X) < 1h może przejść w stan problemu, gdy
wartość pozycji zbliża się do X, a następnie nagle odzyskać stan poprawny, gdy
zostanie osiągnięta wartość X. Jeśli problemem jest to, że wartość pozycji jest poniżej X, użyj:
last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Jeśli
problemem jest to, że wartość pozycji jest powyżej X, użyj:
last(/host/item) > X or timeleft(/host/item,1h,X) < 1h
2 Stopień wielomianu może wynosić od 1 do 6, polynomial1 jest równoważny linear. Jednak używaj wielomianów wyższego stopnia z ostrożnością. Jeśli okres oceny zawiera mniej punktów niż potrzeba do wyznaczenia współczynników wielomianu, stopień wielomianu zostanie obniżony (np. żądany jest polynomial5, ale dostępne są tylko 4 punkty, dlatego zostanie dopasowany polynomial3).
3 Na przykład dopasowanie funkcji exponential lub power obejmuje obliczanie log() wartości pozycji. Jeśli dane zawierają zera lub liczby ujemne, pojawi się błąd, ponieważ log() jest zdefiniowane tylko dla wartości dodatnich.
4 Dla dopasowań linear, exponential, logarithmic i power wszystkie niezbędne obliczenia można zapisać jawnie. Dla polynomial tylko value można obliczyć bez dodatkowych kroków. Obliczanie avg obejmuje wyznaczenie całki nieoznaczonej wielomianu (analitycznie). Obliczanie max, min i delta obejmuje wyznaczenie pochodnej wielomianu (analitycznie) i znalezienie jej miejsc zerowych (numerycznie). Rozwiązanie f(t) = 0 polega na znalezieniu miejsc zerowych wielomianu (numerycznie).
5 Jednak w tym przypadku -1 może spowodować, że twój wyzwalacz powróci
ze stanu problemu. Aby być w pełni zabezpieczonym, użyj:
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and ({TRIGGER.VALUE}=0 and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1 or {TRIGGER.VALUE}=1)