Predykcyjne funkcje wyzwalaczy

Przegląd

Czasami pojawiają się oznaki nadchodzącego problemu. Oznaki te można wykryć, aby z wyprzedzeniem podjąć działania zapobiegające problemowi lub przynajmniej zminimalizować jego wpływ.

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 ustawieniem wyzwalacza należy określić, czym jest stan problemowy i ile czasu potrzeba na podjęcie działania. Następnie są dwa sposoby skonfigurowania wyzwalacza sygnalizującego potencjalną niepożądaną sytuację. Po pierwsze: wyzwalacz musi zostać uruchomiony, gdy oczekuje się, że system będzie w stanie problemowym po upływie „czasu na działanie”. Po drugie: wyzwalacz musi zostać uruchomiony, gdy system osiągnie stan problemowy w czasie krótszym niż „czas na działanie”. Odpowiadające funkcje wyzwalacza, których należy użyć, to forecast oraz timeleft. Należy pamiętać, że podstawowa analiza statystyczna jest zasadniczo identyczna dla obu funkcji. Możesz skonfigurować wyzwalacz w dowolny preferowany sposób, uzyskując podobne wyniki.

Parametry

Obie funkcje używają niemal tego samego zestawu parametrów. Aby uzyskać informacje, skorzystaj z listy obsługiwanych funkcji.

Przedział czasu

Przede wszystkim należy określić historyczny okres, który Zabbix ma analizować, aby przygotować 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 powinien ekstrapolować zależności wykryte w danych historycznych. Niezależnie od tego, czy używasz time_shift, czy nie, time jest zawsze liczone od bieżącego momentu.

Próg do osiągnięcia

(tylko timeleft)
Parametr threshold określa wartość, którą analizowana pozycja ma osiągnąć, bez względu na to, czy od góry, czy od dołu. Gdy wyznaczymy f(t) (zob. poniżej), należy rozwiązać równanie f(t) = threshold i zwrócić pierwiastek, który jest bliżej chwili obecnej i znajduje się na prawo od niej, lub 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 punkt przecięcia jest już w przeszłości, i dlatego przełącza się na następne przecięcie z poziomem threshold, jeśli takie istnieje. Zalecaną praktyką jest używanie predykcji jako uzupełnienia zwykłej diagnostyki problemów, a nie jej substytutu.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)
linear x = a + b*t
polynomialN2 x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn
exponential x = a*exp(b*t)
logarithmic x = a + b*log(t)
power x = a*tb
Tryby

(tylko forecast)\
Za każdym razem, gdy funkcja wyzwalacza jest obliczana, pobiera dane z określonego okresu historii i dopasowuje do nich wskazaną funkcję. Tak więc, jeśli dane nieznacznie się różnią, dopasowana funkcja również będzie się nieznacznie różnić. Jeśli po prostu obliczymy wartość dopasowanej funkcji dla określonego momentu w przyszłości, nie będzie wiadomo nic o tym, jak analizowana pozycja ma się zachowywać między teraz a tym przyszłym momentem. Dla niektórych opcji fit (takich jak wielomian) 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 z f(t) (now <= t <= now + time) zgodnie z definicją

Szczegóły

Aby uniknąć obliczeń na bardzo dużych liczbach, traktujemy znacznik czasu pierwszej wartości w określonym okresie plus 1 ns jako nowy czas zerowy (aktualny czas epoki jest rzędu 109, kwadrat epoki to 1018, precyzja podwójna wynosi około 10-16). 1 ns dodaje się, aby zapewnić wyłącznie dodatnie wartości czasu dla dopasowań logarytmicznych i potęgowych, które obejmują obliczanie log(t). Przesunięcie czasu nie wpływa na funkcje liniowe, wielomianowe, 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 liczb zmiennoprzecinkowych podwójnej precyzji okazują się niewystarczające)4.

Nie są zgłaszane żadne ostrzeżenia ani błędy, jeśli wybrane dopasowanie słabo opisuje dostarczone dane lub jeśli danych jest po prostu zbyt mało do dokładnego przewidywania.

Przykłady i obsługa błędów

Aby otrzymać ostrzeżenie, gdy na host zaczyna brakować wolnego miejsca na dysku, 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ść w grę i wprowadzić wyzwalacz w stan problemu. Ogólnie jest to dobre, ponieważ otrzymujesz ostrzeżenie, że Twoje prognozy nie działają poprawnie i powinieneś przyjrzeć się im dokładniej, aby ustalić przyczynę. Czasami jednak jest to niepożądane, ponieważ -1 może po prostu oznaczać, że w ciągu ostatniej godziny nie uzyskano danych o wolnym miejscu na dysku hosta. 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 ujemna wartość pozycji jest czymś normalnym. Jednak prawdopodobieństwo takiej sytuacji w rzeczywistych warunkach jest znikome (zobacz, jak działa operator =). Dlatego dodaj ... or forecast(/host/item,(...))=-1 lub ... and forecast(/host/item,(...))<>-1, jeśli odpowiednio chcesz lub nie chcesz traktować -1 jako problemu.

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 powrócić do stanu OK po osiągnięciu wartości X. Jeśli problem polega na tym, że wartość pozycji jest poniżej X, użyj: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h Jeśli problem polega na tym, ż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 wielomianów wyższego stopnia należy używać ostrożnie. 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 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, otrzymasz błąd, ponieważ log() jest zdefiniowany tylko dla wartości dodatnich.

4 Dla dopasowań linear, exponential, logarithmic i power wszystkie niezbędne obliczenia można zapisać jawnie. Dla polynomial bez dodatkowych kroków można obliczyć tylko value. Obliczenie avg obejmuje wyznaczenie funkcji pierwotnej wielomianu (analitycznie). Obliczenie max, min i delta obejmuje wyznaczenie pochodnej wielomianu (analitycznie) i znalezienie jej pierwiastków (numerycznie). Rozwiązanie f(t) = 0 obejmuje znalezienie pierwiastków wielomianu (numerycznie).

5 Jednak w tym przypadku -1 może spowodować, że wyzwalacz wyjdzie ze stanu problemu. Aby zapewnić pełną ochronę, 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)