Функции foreach используются в агрегированных вычислениях, чтобы вернуть одно агрегированное значение для каждого из элементов данных, выбранных используемым фильтром элементов данных. Возвращается массив значений.
Например, функция avg_foreach вернёт массив значений, где каждое значение является средним значением истории выбранного элемента данных за указанный интервал времени.
Фильтр элементов данных является частью синтаксиса, используемого функциями foreach. В фильтре элементов данных поддерживаются подстановочные символы, поэтому нужные элементы данных могут быть выбраны достаточно гибко.
Функция | Описание |
---|---|
avg_foreach | Возвращает среднее значение для каждого элемента данных. |
bucket_rate_foreach | Возвращает пары (верхняя граница разряда, значение доли), подходящие для использования в функции histogram_quantile(), где значение «верхняя граница разряда» - это значение параметра ключа элемента данных, определённого параметром <номер параметра>. |
count_foreach | Возвращает количество значений для каждого элемента данных. |
exists_foreach | Возвращает «1» для каждого активированного элемента данных. |
last_foreach | Возвращает последнее значение для каждого элемента данных. |
max_foreach | Возвращает наибольшее значение для каждого элемента данных. |
min_foreach | Возвращает наименьшее значение для каждого элемента данных. |
sum_foreach | Возвращает сумму значений для каждого элемента данных. |
Функции foreach поддерживают два общих параметра: фильтр_элементов_данных
(подробнее смотрите ниже) и период_времени
:
Например:
avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)
вернёт среднее за пять минут значение для каждого из элементов данных «mysql.qps» в группе «MySQL server».
Обратите внимание, что некоторые функции поддерживают дополнительные параметры.
Фильтр элементов данных:
состоит из четырёх частей, где:
Пробелы допустимы только внутри выражения условий.
Использование подстановочных символов
/узел_сети/*
и /*/ключ
являются корректными фильтрами, но /*/*
некорректен.ключ[abc,*,*]
).Выражение условий
Выражение условий поддерживает:
"<текст>"
- строковая константа, с использованием символа обратной косой черты \
для экранирования символов "
и \
=
, <>
and
, or
, not
(
)
Строковые константы обязательно должны заключаться в кавычки. Поддерживается только чувствительное к регистру сравнение полных строк.
При указании в фильтре тегов (т.е. tag="имя_тега:значение"
), двоеточие (":") используется как разделитель. Всё после него рассматривается как значение тега. Поэтому в данный момент не поддерживается указание тегов, содержащих двоеточие (":") внутри имени.
Примеры
Допустимы составные фильтры, ссылающиеся на ключ элемента данных, группу узлов сети и теги, как проиллюстрировано следующими примерами:
Пример синтаксиса | Описание |
---|---|
/узел_сети/ключ[abc,*] |
Соответствует подобным элементам данных на конкретном узле сети. |
/*/ключ |
Соответствует одинаковому элементу данных на любом узле сети. |
/*/ключ?[group="ABC" and tag="имя_тега:значение"] |
Соответствует тому же элементу данных любого узла сети из группы ABC, имеющему тег «имя_тега:значение». |
/*/ключ[a,*,c]?[(group="ABC" and tag="Тег1") or (group="DEF" and (tag="Тег2" or tag="Тег3:значение"))] |
Соответствует подобным элементам данных любого узла сети из групп ABC или DEF с соответствующими тегами. |
Все упомянутые элементы данных должны существовать и собирать данные. В вычисления включаются только активированные элементы данных на активированных узлах сети.
Если ключ упомянутого элемента данных меняется, фильтр должен быть обновлён вручную.
Упоминание родительской группы узлов сети включает родительскую и все вложенные группы узлов сети с их элементами данных.
Второй параметр позволяет указать период времени для агрегирования. Период времени может быть указан только как время; количество значений (с префиксом #) не поддерживается.
Для удобства в этом параметре могут использоваться поддерживаемые символы единиц времени, например: «5m» (пять минут) вместо «300s» (300 секунд) или «1d» (одни сутки) вместо «86400» (86400 секунд).
Период времени игнорируется сервером, если передан для функции last_foreach, и может быть опущен:
Период времени не поддерживается для функции exists_foreach.
Третий необязательный параметр поддерживается функцией bucket_rate_foreach:
где <номер_параметра> - это положение значения «разряд» в ключе элемента данных. Например, если в myItem[aaa,0.2] значением «разряд» является «0.2», то его положение - это 2.
Значением по умолчанию для <номера параметра> является «1».
Смотрите агрегированные вычисления для более подробной информации и примеров использования функций foreach.
Следующая таблица иллюстрирует, как каждая функция ведёт себя в случае ограниченной доступности узла сети / элемента данных и данных истории.
Функция | Узел сети деактивирован | Узел сети с данными недоступен | Узел сети без данных недоступен | Элемент данных деактивирован | Элемент данных не поддерживается | Ошибка извлечения данных (SQL) |
---|---|---|---|---|---|---|
avg_foreach | игнорировать | вернуть среднее | игнорировать | игнорировать | игнорировать | игнорировать |
bucket_rate_foreach | игнорировать | вернуть bucket rate | игнорировать | игнорировать | игнорировать | игнорировать |
count_foreach | игнорировать | вернуть количество | 0 | игнорировать | игнорировать | игнорировать |
exists_foreach | игнорировать | 1 | 1 | игнорировать | 1 | n/a |
last_foreach | игнорировать | вернуть последнее | игнорировать | игнорировать | игнорировать | игнорировать |
max_foreach | игнорировать | вернуть максимум | игнорировать | игнорировать | игнорировать | игнорировать |
min_foreach | игнорировать | вернуть минимум | игнорировать | игнорировать | игнорировать | игнорировать |
sum_foreach | игнорировать | вернуть сумму | игнорировать | игнорировать | игнорировать | игнорировать |
Если для элемента данных указано игнорировать, к агрегированию ничего не добавляется.