- 7 Pozycje obliczane
- Przegląd
- Konfigurowalne pola
- Formuła prostego obliczenia
- Agregacje danych
- Przykłady pozycji obliczanych
- (1) Całkowity ruch na interfejsie
- (2) Procent wolnego miejsca na dysku
- (3) Procent ruchu przychodzącego
- (4) Średnia liczba przetworzonych wartości
- (5) Całkowity ruch przychodzący dla hosta
- (6) Całkowita przestrzeń dyskowa dla grupy
- (7) Średnie obciążenie procesora dla grupy
- (8) Średnie obciążenie procesora dla grupy i tagu
- (9) Średnia liczba zapytań dla grupy
- (10) Łączna liczba pomyślnych kontroli DNS
- (11) Łączna liczba nieobsługiwanych pozycji dla grupy
- (12) Statystyki interfejsu dla grupy
- Przykłady poprawnej/niepoprawnej składni
7 Pozycje obliczane
Przegląd
Ten typ pozycji umożliwia wykonywanie obliczeń na metrykach, które już istnieją. Pozycja obliczana sama nie zbiera żadnych danych.
Na przykład możesz chcieć:
- Zliczyć dwie wartości.
- Obliczyć średnią z kilku wartości pozycji.
- Obliczyć łączną wartość dla grupy pozycji.
Wynikowa wartość jest przechowywana w bazie danych Zabbix tak jak w przypadku każdej innej pozycji; przechowywane są zarówno wartości historii, jak i trendy, a także mogą być generowane wykresy.
Obliczenia opierają się na formule. Składnia formuły jest wspólna ze składnią wyrażeń wyzwalaczy.
W rzeczywistości możliwe jest utrzymanie prostoty wyzwalaczy poprzez umieszczenie złożonej logiki przekształcania danych w pozycji obliczanej — a następnie odwoływanie się do pozycji obliczanej w wyzwalaczu przy użyciu klucza pozycji.
Istnieją dwie możliwości określenia źródła danych do obliczeń:
- Określenie pozycji w formule.
- Wykonanie agregacji danych na podstawie filtra wybierającego pozycje.
Druga opcja umożliwia obliczanie średnich grupowych, sum całkowitych itp.
Wszystkie obliczenia są wykonywane przez serwer Zabbix; proxy ani agenty nie są w to w ogóle zaangażowane. Należy pamiętać, że intensywne korzystanie z pozycji obliczanych z długimi okresami czasu może wpływać na wydajność serwera.
Konfigurowalne pola
Aby używać pozycji obliczanych, wybierz typ pozycji Calculated.

Klucz jest unikalnym identyfikatorem pozycji (w obrębie hosta). Możesz utworzyć dowolną nazwę klucza, używając obsługiwanych symboli. Klucz umożliwia odwoływanie się do pozycji obliczanej w wyzwalaczach.
Definicję obliczenia należy wprowadzić w polu Formula.
Nie ma żadnego powiązania między formułą a kluczem. Parametry klucza nie są w żaden sposób używane w formule.
W przeciwieństwie do wyrażeń wyzwalaczy, Zabbix przetwarza pozycje obliczane zgodnie z interwałem aktualizacji pozycji, a nie po otrzymaniu nowej wartości.
Pamiętaj, że jeśli jako typ informacji wybierzesz Numeric (unsigned), a wynik obliczenia będzie wartością zmiennoprzecinkową, zostanie on obcięty do liczby całkowitej.
Formuła prostego obliczenia
Składnia prostej formuły jest następująca:
function(/host/key,<parameter1>,<parameter2>,...)
gdzie:
| Element | Opis |
|---|---|
function |
Jedna z obsługiwanych funkcji: last, min, max, avg, count itd. |
host |
Host pozycji używanej do obliczeń. Bieżący host można pominąć (tj. jak w function(//key,parameter,...)). |
key |
Klucz pozycji używanej do obliczeń. Pozycje zwracające wartości z binarnym typem danych lub typem danych JSON nie są obsługiwane. Jeśli zmienisz klucz pozycji pozycji, do której istnieje odwołanie, klucz musi zostać ręcznie zaktualizowany w formule. Wszystkie pozycje, do których odwołują się funkcje historii, muszą istnieć i zbierać dane. |
parameter(s) |
Parametry funkcji, jeśli są wymagane. Obsługiwane są sufiksy czasu oraz sufiksy rozmiaru pamięci. |
Bardziej złożona formuła może wykorzystywać kombinację funkcji, operatorów i nawiasów.
Zobacz przykłady formuł pozycji obliczanych:
- (1) Całkowity ruch na interfejsie
- (2) Procent wolnego miejsca na dysku
- (3) Procent ruchu przychodzącego
- (4) Średnia liczba przetworzonych wartości
Niektóre zmienne mogą być przekazywane do formuły za pomocą makr użytkownika. Należy pamiętać, że makra użytkownika:
- będą rozwijane — jeśli są używane do odwołania do parametru funkcji, parametru filtra pozycji lub stałej.
- nie będą rozwijane — jeśli odwołują się do funkcji, nazwy hosta, klucza pozycji, parametru klucza pozycji lub operatora.
Dozwolone jest porównywanie ze stringami.
Jeśli w pamięci podręcznej nie ma aktualnych danych i w funkcji nie zdefiniowano okresu odpytywania, Zabbix domyślnie cofnie się maksymalnie o jeden tydzień w przeszłość, aby odpytać bazę danych o wartości historyczne.
Pozycja obliczana może stać się nieobsługiwana w kilku przypadkach:
- pozycja, do której istnieje odwołanie
- nie została znaleziona
- jest wyłączona lub należy do wyłączonego hosta
- nie jest obsługiwana (z wyjątkiem funkcji nodata() oraz operatorów z nieznanymi wartościami)
- brak danych do obliczenia funkcji
- dzielenie przez zero
- użyto nieprawidłowej składni
Agregacje danych
Agregacje danych opierają się na filtrze, który wybiera wiele pozycji. Agregacje danych są również typem pozycji obliczanej, jednak w formule używa się nieco innej składni.
Aby pobrać agregaty, użyj jednej z obsługiwanych funkcji agregujących: avg, max, min, sum itd.
Następnie dodaj funkcję foreach jako jedyny parametr oraz jej filtr pozycji, aby wybrać wymagane pozycje:
aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))
Funkcja foreach (np. avg_foreach, count_foreach itd.) zwraca jedną wartość agregowaną dla każdej wybranej pozycji.
Pozycje są wybierane przy użyciu filtra pozycji (/host/key?[group="host group"]) z historii pozycji.
Więcej informacji można znaleźć w sekcji funkcje foreach.
Jeśli niektóre pozycje nie mają danych dla żądanego okresu, są ignorowane podczas obliczeń. Jeśli żadna pozycja nie ma danych, funkcja zwróci błąd.
Alternatywnie można podać kilka pozycji jako parametry agregacji:
aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)
Zwróć uwagę, że function musi tutaj być funkcją historii/trendu.
Zobacz przykłady obliczeń agregujących:
- (5) Całkowity ruch przychodzący dla hosta
- (6) Całkowita przestrzeń dyskowa dla grupy
- (7) Średnie obciążenie procesora dla grupy
- (8) Średnie obciążenie procesora dla grupy i tagu
- (9) Średnia liczba przetworzonych wartości
- (10) Średnia liczba zapytań dla grupy
- (11) Całkowita liczba pomyślnych kontroli DNS
- (12) Całkowita liczba nieobsługiwanych pozycji dla grupy
- (13) Statystyki interfejsu dla grupy
Makra użytkownika i makra wykrywania niskopoziomowego są obsługiwane w:
- parametrach klucza pozycji
- parametrach funkcji
- warunkach filtra (nazwa grupy hostów i nazwa tagu)
- stałych wyrażenia
Obliczenie agregujące może stać się nieobsługiwane, jeśli:
- nie zostanie znaleziona żadna z odwoływanych pozycji (co może się zdarzyć, jeśli klucz pozycji jest nieprawidłowy, żadna z pozycji nie istnieje lub wszystkie uwzględnione grupy są nieprawidłowe)
- brak danych do obliczenia funkcji
Przykłady pozycji obliczanych
(1) Całkowity ruch na interfejsie
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
Oblicza całkowitą przepustowość na eth0.
(2) Procent wolnego miejsca na dysku
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])
Zabbix pobierze najnowsze wartości wolnego i całkowitego miejsca na dysku (na /) i obliczy wartość procentową zgodnie z podanym wzorem.
(3) Procent ruchu przychodzącego
100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))
Oblicz procent ruchu przychodzącego w całkowitym ruchu.
(4) Średnia liczba przetworzonych wartości
avg(/Zabbix server/zabbix[wcache,values],10m)
Oblicza 10-minutową średnią liczby wartości przetworzonych przez Zabbix.
(5) Całkowity ruch przychodzący dla hosta
sum(last_foreach(/host/net.if.in[*]))
Oblicza sumę wszystkich pozycji pasujących do net.if.in[*] na hoście.
(6) Całkowita przestrzeń dyskowa dla grupy
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))
Oblicz całkowitą przestrzeń dyskową dla wszystkich MySQL Servers.
(7) Średnie obciążenie procesora dla grupy
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))
Oblicz średnie obciążenie procesora dla wszystkich MySQL Servers.
(8) Średnie obciążenie procesora dla grupy i tagu
avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))
Oblicz średnie obciążenie CPU na wszystkich hostach w wielu grupach hostów, które mają określone tagi.
(9) Średnia liczba zapytań dla grupy
avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))
Oblicz 5-minutową średnią liczby zapytań na sekundę dla MySQL Servers.
(10) Łączna liczba pomyślnych kontroli DNS
sum(last_foreach(/*/net.dns[*,*,*]))
Oblicza łączną liczbę pomyślnych kontroli DNS dla wszystkich hostów.
Pokazana forma pozycji to net.dns[192.0.2.0,example.com,A] jako przykład jednego z możliwych kluczy.
Zwróć uwagę, że symbole wieloznaczne muszą odpowiadać liczbie parametrów w kluczu (tutaj net.dns ma trzy parametry: ip, name, type).
(11) Łączna liczba nieobsługiwanych pozycji dla grupy
sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))
Oblicz łączną liczbę nieobsługiwanych pozycji dla Zabbix servers.
(12) Statystyki interfejsu dla grupy
sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"]))
Oblicz statystyki interfejsu dla grupy video.
Przykłady poprawnej/niepoprawnej składni
Wyrażenia (w tym wywołania funkcji) nie mogą być używane jako parametry funkcji historii, trendów ani foreach. Jednak same te funkcje mogą być używane w innych (niehistorycznych) parametrach funkcji.
| Wyrażenie | Przykład |
|---|---|
| Poprawne | avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)max(avg(avg_foreach(/*/system.cpu.load?[group="Servers A"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers B"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers C"],5m))) |
| Niepoprawne | sum(/host/key,10+2)sum(/host/key, avg(10,2))sum(/host/key,last(/host/key2)) |
Zwróć uwagę, że w wyrażeniu takim jak:
sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))
nie można zagwarantować, że obie części równania zawsze będą miały ten sam zestaw wartości. Podczas obliczania jednej części wyrażenia może nadejść nowa wartość dla żądanego okresu, a wtedy druga część wyrażenia będzie miała inny zestaw wartości.