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)