7. Вычисляемые элементы данных

Обзор

Вычисляемый элемент данных позволяет создавать вычисление на основе значений некоторых существующих элементов данных. Например, может потребоваться вычислить почасовое среднее значение какого-либо элемента данных или рассчитать суммарное значение для группы элементов данных. Именно для этого и предназначен вычисляемый элемент данных.

В вычислениях можно использовать как:

  • отдельные значения индивидуальных элементов данных
  • сложный фильтр для выбора нескольких элементов данных для агрегации (подробности см. в агрегирующих вычислениях)

Вычисляемые элементы данных — это способ создания виртуальных источников данных. Все вычисления выполняются только сервером Zabbix. Значения периодически вычисляются на основе используемого арифметического выражения.

Полученные данные сохраняются в базе данных Zabbix так же, как и для любого другого элемента данных; сохраняются как значения истории, так и трендов, и могут быть построены графики.

Если результат вычисления является значением с плавающей точкой, он будет усечён до целого числа, если для вычисляемого элемента данных выбран тип информации Numeric (unsigned).

Также, если в кэше нет недавних данных и в функции не определён период запроса, Zabbix по умолчанию будет обращаться к базе данных за историческими значениями вплоть до одной недели в прошлое.

Вычисляемые элементы данных используют тот же синтаксис, что и выражения триггеров. Если вы знакомы с выражениями триггеров, можно рассматривать вычисляемые элементы данных как функции, анализирующие некоторые значения, но без сравнения с порогом.

В вычисляемых элементах данных допускается сравнение со строками. На вычисляемые элементы данных могут ссылаться макросы или другие сущности так же, как и на любой другой тип элемента данных.

Чтобы использовать вычисляемые элементы данных, выберите тип элемента данных Calculated.

Настраиваемые поля

Ключ — это уникальный идентификатор элемента данных (для каждого узла сети). Вы можете создать любое имя ключа, используя поддерживаемые символы.

Определение вычисления следует вводить в поле Формула. Между формулой и ключом нет связи. Параметры ключа никак не используются в формуле.

Синтаксис простой формулы:

function(/host/key,<parameter1>,<parameter2>,...)

где:

Element Description
function Одна из поддерживаемых функций: last, min, max, avg, count и т. д.
host Узел сети элемента данных, который используется для вычисления.
Текущий узел сети можно опустить (то есть, как в function(//key,parameter,...)).
key Ключ элемента данных, который используется для вычисления.
Элементы данных, возвращающие значения с типом данных binary или JSON, не поддерживаются.
parameter(s) Параметры функции, если требуются.
Поддерживаются суффиксы времени и суффиксы размера памяти.

Пользовательские макросы в формуле будут развёрнуты, если используются для ссылки на параметр функции, параметр фильтра элемента данных или константу. Пользовательские макросы НЕ будут развёрнуты, если они ссылаются на функцию, имя узла сети, ключ элемента данных, параметр ключа элемента данных или оператор.

Более сложная формула может использовать комбинацию функций, операторов и скобок. Вы можете использовать все функции и операторы, поддерживаемые в выражениях триггеров. Логика и приоритет операторов полностью совпадают.

В отличие от выражений триггеров, Zabbix обрабатывает вычисляемые элементы данных в соответствии с интервалом обновления элемента данных, а не при получении нового значения.

Все элементы данных, на которые ссылаются функции истории в формуле вычисляемого элемента данных, должны существовать и собирать данные. Также, если вы измените ключ элемента данных, на который есть ссылка, вам придётся вручную обновить все формулы, использующие этот ключ.

Вычисляемый элемент данных может стать неподдерживаемым в нескольких случаях:

  • элемент(ы) данных, на который есть ссылка,
    • не найден
    • отключён
    • принадлежит отключённому узлу сети
    • не поддерживается (кроме функции nodata() и операторов с неизвестными значениями)
  • нет данных для вычисления функции
  • деление на ноль
  • используется некорректный синтаксис

Примеры использования

Пример 1

Вычисление процентного отношения свободного места на диске для '/'.

Использование функции last:

100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbix будет брать последние значения полного и свободного объёма диска и вычислять процентное отношение в соответствии с заданной формулой.

Пример 2

Вычисление 10-минутного усреднения количества значений, обрабатываемых Zabbix.

Использование функции avg:

avg(/Zabbix Server/zabbix[wcache,values],10m)

Обратите внимание, что интенсивное использование вычисляемых элементов данных с большими периодами времени может повлиять на производительность Zabbix сервера.

Пример 3

Вычисление общей пропускной способности на eth0.

Сумма двух функций:

last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
Пример 4

Вычисление процентного отношения входящего трафика.

Более сложное выражение:

100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

Смотрите также: Примеры агрегированных вычислений.