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 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 ma osiągnąć, bez względu na to, 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 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 znajduje się 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 prognoz jako uzupełnienia zwykłej diagnostyki problemów, a nie jako jej zamiennika.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 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ć od teraz do tego momentu w przyszłości. Dla niektórych opcji fit (takich jak polynomial) prosta wartość z przyszłości może być myląca.

mode wynik forecast
value f(teraz + time)
max max~teraz\ <=\ t\ <=\ teraz\ +\ time~ f(t)
min min~teraz\ <=\ t\ <=\ teraz\ +\ time~ f(t)
delta max - min
avg średnia z f(t) (teraz <= t <= teraz + 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)