- Вычисляемый элемент данных
- Обзор
- Настраиваемые поля
- Формула простого вычисления
- Агрегация данных
- Примеры вычисляемых элементов данных
- (1) Общий трафик на интерфейсе
- (2) Процент свободного дискового пространства
- (3) Процент входящего трафика
- (4) Среднее количество обработанных значений
- (5) Общий входящий трафик для узла сети
- (6) Общее дисковое пространство для группы
- (7) Средняя загрузка процессора для группы
- (8) Средняя загрузка процессора для группы и тега
- (9) Среднее количество запросов для группы
- (10) Общее количество успешных DNS-проверок
- (11) Общее количество неподдерживаемых элементов данных для группы
- (12) Статистика интерфейса для группы
- Примеры правильного/неправильного синтаксиса
Вычисляемый элемент данных
Обзор
Этот тип элемента данных позволяет выполнять вычисления над уже существующими метриками. Вычисляемый элемент данных сам по себе не собирает никаких данных.
Например, вы можете:
- Подсчитать два значения.
- Вычислить среднее значение нескольких значений элементов данных.
- Вычислить суммарное значение для группы элементов данных.
Полученное значение хранится в базе данных Zabbix, как и для любого другого элемента данных; сохраняются как значения истории, так и трендов, и могут быть построены графики.
Вычисление основано на формуле. Синтаксис формулы совпадает с синтаксисом выражений триггеров.
Фактически, можно упростить триггеры, перенеся сложную логику преобразования данных в вычисляемый элемент данных, а затем сослаться на этот вычисляемый элемент данных в триггере, используя ключ элемента данных.
Для указания источника данных для вычислений доступны два варианта:
- Указать элементы данных в формуле.
- Выполнить агрегацию данных на основе фильтра, который выбирает элементы данных.
Второй вариант позволяет вычислять средние значения по группе, суммы и т. д.
Все вычисления выполняются сервером Zabbix; прокси или агенты при этом не задействуются. Обратите внимание, что интенсивное использование вычисляемых элементов данных с большими временными интервалами может повлиять на производительность сервера.
Настраиваемые поля
Чтобы использовать вычисляемые элементы данных, выберите тип элемента данных Calculated.

key — это уникальный идентификатор элемента данных (для каждого узла сети). Вы можете создать любое имя key, используя поддерживаемые символы. key позволяет ссылаться на вычисляемый элемент данных в триггерах.
Определение вычисления необходимо указать в поле Formula.
Между формулой и key нет связи. Параметры key никак не используются в формуле.
В отличие от выражений триггеров, Zabbix обрабатывает вычисляемые элементы данных в соответствии с интервалом обновления элемента данных, а не при получении нового значения.
Обратите внимание: если в качестве типа информации выбрано Numeric (unsigned) и результат вычисления имеет тип float, он будет усечен до целого числа.
Формула простого вычисления
Синтаксис простой формулы:
function(/host/key,<parameter1>,<parameter2>,...)
где:
| Элемент | Описание |
|---|---|
function |
Одна из поддерживаемых функций: last, min, max, avg, count и т. д. |
host |
Узел сети элемента данных, который используется для вычисления. Текущий узел сети можно не указывать (то есть как в function(//key,parameter,...)). |
key |
Ключ элемента данных, который используется для вычисления. Элементы данных, возвращающие значения с типом данных binary или JSON, не поддерживаются. Если вы измените ключ элемента данных у элемента данных, на который есть ссылка, ключ необходимо будет вручную обновить в формуле. Все элементы данных, на которые ссылаются функции истории, должны существовать и собирать данные. |
parameter(s) |
Параметры функции, если требуются. Поддерживаются суффиксы времени и суффиксы размера памяти. |
Более сложная формула может использовать комбинацию функций, операторов и скобок.
См. примеры формул вычисляемых элементов данных:
- (1) Общий трафик на интерфейсе
- (2) Процент свободного места на диске
- (3) Процент входящего трафика
- (4) Среднее количество обработанных значений
Некоторые переменные могут передаваться в формулу с помощью пользовательских макросов. Обратите внимание, что пользовательские макросы:
- будут разрешены — если используются для ссылки на параметр функции, параметр фильтра элемента данных или константу.
- не будут разрешены — если ссылаются на функцию, имя узла сети, ключ элемента данных, параметр ключа элемента данных или оператор.
Допускается сравнение со строками.
Если в кэше нет недавних данных и в функции не определен период запроса, Zabbix по умолчанию будет запрашивать исторические значения из базы данных, уходя в прошлое максимум на одну неделю.
Вычисляемый элемент данных может стать неподдерживаемым в нескольких случаях:
- элемент данных, на который есть ссылка,
- не найден
- отключен или принадлежит отключенному узлу сети
- не поддерживается (кроме функции nodata() и операторов с неизвестными значениями)
- нет данных для вычисления функции
- деление на ноль
- используется некорректный синтаксис
Агрегация данных
Агрегация данных основана на фильтре, который выбирает несколько элементов данных. Агрегация данных также является типом вычисляемого элемента данных, однако в формуле используется немного другой синтаксис.
Чтобы получить агрегированные значения, используйте одну из поддерживаемых агрегирующих функций: avg, max, min, sum и т. д.
Затем добавьте функцию foreach как единственный параметр и её фильтр элементов данных для выбора нужных элементов данных:
aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))
Функция foreach (например, avg_foreach, count_foreach и т. д.) возвращает одно агрегированное значение для каждого выбранного элемента данных.
Элементы данных выбираются с помощью фильтра элементов данных (/host/key?[group="host group"]) из истории элементов данных.
Подробнее см. в разделе функции foreach.
Если у некоторых элементов данных нет данных за запрошенный период, они игнорируются при вычислении. Если данных нет ни у одного элемента данных, функция вернёт ошибку.
В качестве альтернативы можно перечислить несколько элементов данных как параметры для агрегации:
aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)
Обратите внимание, что function здесь должна быть функцией history/trend.
См. примеры агрегирующих вычислений:
- (5) Общий входящий трафик для узла сети
- (6) Общее дисковое пространство для группы
- (7) Средняя загрузка процессора для группы
- (8) Средняя загрузка процессора для группы и тега
- (9) Среднее количество обработанных значений
- (10) Среднее количество запросов для группы
- (11) Общее количество успешных DNS-проверок
- (12) Общее количество неподдерживаемых элементов данных для группы
- (13) Статистика интерфейса для группы
Пользовательские макросы и макросы low-level discovery поддерживаются в:
- параметрах ключа элемента данных
- параметрах функции
- условиях фильтра (имя группы узлов сети и имя тега)
- константах выражения
Агрегирующее вычисление может стать неподдерживаемым, если:
- не найден ни один из указанных элементов данных (это может произойти, если ключ элемента данных указан неверно, ни один из элементов данных не существует или все включённые группы указаны неверно)
- отсутствуют данные для вычисления функции
Примеры вычисляемых элементов данных
(1) Общий трафик на интерфейсе
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
Вычисляет общую пропускную способность на eth0.
(2) Процент свободного дискового пространства
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])
Zabbix возьмет последние значения свободного и общего дискового пространства (на /) и вычислит процент по заданной формуле.
(3) Процент входящего трафика
100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))
Рассчитайте процент входящего трафика от общего трафика.
(4) Среднее количество обработанных значений
avg(/Zabbix server/zabbix[wcache,values],10m)
Вычисляет 10-минутное среднее количество значений, обработанных Zabbix.
(5) Общий входящий трафик для узла сети
sum(last_foreach(/host/net.if.in[*]))
Вычисляет сумму всех элементов данных, соответствующих net.if.in[*] на узле сети.
(6) Общее дисковое пространство для группы
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))
Вычислить общее дисковое пространство для всех MySQL Servers.
(7) Средняя загрузка процессора для группы
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))
Вычислить среднюю загрузку процессора для всех MySQL Servers.
(8) Средняя загрузка процессора для группы и тега
avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))
Вычислить среднюю загрузку CPU на всех узлах сети в нескольких группах узлов сети, имеющих определенные теги.
(9) Среднее количество запросов для группы
avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))
Вычисляет 5-минутное среднее количества запросов в секунду для MySQL Servers.
(10) Общее количество успешных DNS-проверок
sum(last_foreach(/*/net.dns[*,*,*]))
Вычисляет общее количество успешных DNS-проверок на всех узлах сети.
Показанная форма элемента данных приведена в качестве примера: net.dns[192.0.2.1,example.com,A] — это один из возможных ключей.
Обратите внимание, что подстановочные знаки должны соответствовать количеству параметров в ключе (здесь net.dns имеет три параметра: ip, name, type).
(11) Общее количество неподдерживаемых элементов данных для группы
sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))
Вычисляет общее количество неподдерживаемых элементов данных для Zabbix servers.
(12) Статистика интерфейса для группы
sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"]))
Вычислить статистику интерфейса для группы video.
Примеры правильного/неправильного синтаксиса
Выражения (включая вызовы функций) не могут использоваться в качестве параметров history-, trend- или foreach-функций. Однако сами эти функции могут использоваться в других (неисторических) параметрах функций.
| Выражение | Пример |
|---|---|
| Допустимо | 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))) |
| Недопустимо | sum(/host/key,10+2)sum(/host/key, avg(10,2))sum(/host/key,last(/host/key2)) |
Обратите внимание, что в выражении вида:
sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))
нельзя гарантировать, что обе части уравнения всегда будут иметь один и тот же набор значений. Пока вычисляется одна часть выражения, может поступить новое значение за запрошенный период, и тогда другая часть выражения будет иметь другой набор значений.