1 Obliczenia agregatowe

Przegląd

Obliczenia agregujące to typ pozycji obliczanej, który umożliwia zbieranie informacji z kilku pozycji przez serwer Zabbix, a następnie obliczanie wartości agregowanej w zależności od użytej funkcji agregującej.

Obliczenia agregujące nie wymagają uruchomionego agenta na monitorowanym hoście.

Składnia

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ść agregatu dla każdej wybranej pozycji. Pozycje są wybierane za pomocą filtra pozycji (/host/key?[group="host group"]), na podstawie historii pozycji. Więcej informacji znajdziesz w sekcji funkcje foreach.

Jeśli niektóre z pozycji nie mają danych dla żądanego okresu, są pomijane w obliczeniach. Jeśli żadna pozycja nie ma danych, funkcja zwróci błąd.

Alternatywnie możesz 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.

Jeśli wynik agregacji ma wartość zmiennoprzecinkową, zostanie ona obcięta do liczby całkowitej, jeśli zagregowany typ informacji pozycji to Numeric (unsigned).

Makra użytkownika i makra niskopoziomowego wykrywania są obsługiwane w:

  • parametrach klucza pozycji
  • parametrach funkcji
  • warunkach filtra (nazwa grupy hostów i nazwa tagu)
  • stałych wyrażenia

Obliczenie agregatu może stać się nieobsługiwane, jeśli:

  • nie zostanie znaleziony żaden z odwołanych elementów (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 użycia

Przykłady kluczy dla obliczeń agregowanych.

Przykład 1

Całkowita przestrzeń dyskowa host group 'MySQL Servers'.

sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))
Przykład 2

Suma najnowszych wartości wszystkich pozycji pasujących do net.if.in[*] na hoście.

sum(last_foreach(/host/net.if.in[*]))
Przykład 3

Średnie obciążenie procesora grupy hostów „MySQL Servers”.

avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))
Przykład 4

5-minutowa średnia liczby zapytań na sekundę dla grupy hostów 'MySQL Servers'.

avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))
Przykład 5

Średnie obciążenie CPU na wszystkich hostach w wielu grupach hostów, które mają określone tagi.

avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))
Przykład 6

Obliczenie używane dla sum wartości najnowszych pozycji w całej grupie hostów.

sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"])) 
Przykład 7

Łączna liczba nieobsługiwanych pozycji w grupie hostów 'Zabbix servers'.

sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))
Przykład 8

Suma najnowszych numerycznych wyników sprawdzeń DNS we wszystkich hostach. Pokazana forma pozycji to net.dns[192.0.2.1,example.com,A] jako przykład jednego z możliwych kluczy.

sum(last_foreach(/*/net.dns[*,*,*]))

Należy pamiętać, że symbole wieloznaczne muszą odpowiadać liczbie parametrów w kluczu (tutaj net.dns ma trzy parametry: ip, name, type).

Przykłady poprawnej/niepoprawnej składni

Wyrażenia (w tym wywołania funkcji) nie mogą być używane jako parametry history, trend ani foreach funkcji function. Jednak same te funkcje mogą być używane w innych parametrach funkcji (niehistorycznych).

Expression Example
Valid 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)))
Invalid sum(/host/key,10+2)
sum(/host/key, avg(10,2))
sum(/host/key,last(/host/key2))

Należy pamiętać, ż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.