7 Funkcje wyzwalaczy predykcyjnych
Przegląd
Czasami pojawiają się oznaki nadchodzącego problemu. Oznaki te można dostrzec z wyprzedzeniem, aby można było podjąć działania wcześniej i zapobiec problemowi lub przynajmniej zminimalizować jego skutki.
Zabbix oferuje 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 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 zadziałać, gdy oczekuje się, że system będzie w stanie problemowym po upływie „czasu na działanie”. Po drugie: wyzwalacz musi zadziałać, gdy system ma osiągnąć stan problemowy za mniej niż „czas na działanie”. Odpowiednimi funkcjami wyzwalacza do użycia są forecast i timeleft. Należy zauważyć, że podstawowa analiza statystyczna jest w obu przypadkach zasadniczo identyczna. 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ąć,
niezależnie od tego, czy od góry, czy od dołu. Gdy już 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, 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 jest już w przeszłości, i dlatego 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) |
|---|---|
| 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 dla forecast)
Za każdym razem, gdy funkcja wyzwalacza jest oceniana, pobiera dane z
określonego okresu historii i dopasowuje do tych danych 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 dla określonego momentu 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) zwykła 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, za nowy punkt zerowy czasu przyjmujemy znacznik czasu pierwszej wartości w określonym okresie powiększony o 1 ns (bieżący czas epoki ma rząd 109, kwadrat czasu 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 żadnych 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 wybrana funkcja dopasowania słabo opisuje dostarczone dane lub jeśli danych jest po prostu zbyt mało, aby uzyskać dokładną prognozę.
Przykłady i postępowanie z błędami
Aby otrzymać ostrzeżenie, gdy na Twoim 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 spowodować, że Twój wyzwalacz przejdzie 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ć dlaczego. Czasami jednak jest to złe, ponieważ -1 może po prostu oznaczać, że w ciągu ostatniej godziny nie uzyskano żadnych danych o wolnym miejscu na dysku host. 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, spowodować przejście wyzwalacza w stan problemu, zależnie 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 =). Jeśli więc chcesz traktować -1 jako problem lub nie chcesz tego robić, dodaj odpowiednio ... or forecast(/host/item,(...))=-1 albo ... and forecast(/host/item,(...))<>-1.
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 wrócić do normalnego stanu, gdy wartość X zostanie osiągnięta. 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 wyższych stopni wielomianów 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. wymagany jest polynomial5, ale dostępne są tylko 4 punkty, więc zostanie dopasowany polynomial3).
3 Na przykład dopasowywanie funkcji exponential lub power obejmuje obliczanie log() wartości pozycji. Jeśli dane zawierają zera lub liczby ujemne, wystąpi 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 bez dodatkowych kroków można obliczyć tylko value. Obliczanie avg obejmuje wyznaczenie antypochodnej 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 wróci ze stanu problemu do normalnego. 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)