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.