Перейти к основному содержимому
Версия: 5.1

timeaggs

Описание

Выполняет поиск и генерацию массива данных, распределенных по временной шкале с помощью внутренних механизмов хранилища.

осторожно

Использование timeaggs в запросе допустимо в случае, если перед ней находятся только команды, также работающие с внутренними механизмами хранилища. К ним относятся source, search и peval. Это условие должно выполняться и для всех подзапросов в запросе.

Синтаксис

timeaggs [<composite>] [<span>] [<timefield>] [<limit>] [<useother>]  <functions-expression> ["," <functions-expression>] [<by_expression>]

Обязательные аргументы

functions-expression Обязательно использование хотя бы одной из функций:

ПараметрСинтаксисОписание
countcount | count(<field>)Вычисляет количество событий, содержащих поле. Если поле не указано, рассчитывает общее количество событий.
avgavg(<field>)Вычисляет среднее значение по заданному полю.
dcdc(<field>)Вычисляет количество уникальных значений в заданном поле.
maxmax(<field>)Вычисляет максимальное значение по заданному полю.
minmin(<field>)Вычисляет минимальное значение по заданному полю.
sumsum(<field>)Вычисляет сумму значений по заданному полю.
percperc(<field>, <percent>)Вычисляет персентиль по заданному полю и проценту.
medianmedian(<field>)Вычисляет медиану по заданному полю.

Опциональные аргументы

ПараметрСинтаксисПо умолчаниюОписание
spanspan=<span>см. Предопределенные значения spanОпределяет интервал для распределения отрезков.
timefieldtimefield=<field>@timestampИмя поля в котором хранится временная метка.
compositecomposite=<boolean>falseДает возможность использования скроллинга в агрегациях и получить все возможные сегменты (buckets) с помощью нескольких запросов (аналогично scroll в stats). Может быть применен только при наличии группировки (by полей). Количеством сегментов (buckets), которые будут возвращены в ответе имеет фиксированное значение — 1000.
limitlimit=<int>10Максимальное количество уникальных значений by_field, которые будут использоваться в названии столбцов результата. Остальные значения объединятся в поле OTHER.
useotheruseother=<boolean>trueПри значении false параметр limit не учитывается.
by_expressionby <field>Имя поля для группировки значений.

Допустим следующий формат временных параметров: (+|-)<int>(s|m|h|d|w|month):

  • s/sec/secs/second/seconds - секунды
  • m/min/mins/minute/minutes - минуты
  • h/hr/hrs/hour/hours - часы
  • d/day/days - дни
  • w/week/weeks - недели
  • mon/month/months - месяцы
Предопределенные значения span

Если не указан параметр span для временного поля, будут действовать предопределенные параметры.

Перечень предопределенных параметров:

Временной интервалspan
последние 15 минут10 секунд
последние 60 минут1 минута
последние 4 часа5 минут
последние 24 часа30 минут
последние 7 дней1 день
последние 30 дней1 день
последний год1 месяц
Использование composite

Аргумент composite доступен при запросе к OpenSearch.

Использование keyword в OpenSearch

Aggregations в OpenSearch выполняют статистическую обработку по числовым типам полей или же keyword, если поле текстовое. В соответствии с этим для текстовых полей нужно дописывать <название поля>.keyword. Это необходимо делать как в заданных, так и в by полях. Пример:

... | timeaggs avg(user.keyword), earliest(country.keyword) by event.keyword, user_count

Примеры запросов

Пример 1:

Расчет среднего количества сообщений для каждого пользователя по часовым интервалам:

Пример №1
... | timeaggs span=1h avg(msgNums) by user.keyword

В данном примере для каждого уникального значения поля user.keyword рассчитывается среднее количество сообщений msgNums за каждый часовой интервал.

Пример 2:

В данном примере для каждого уникального значения поля event.outcome производится агрегация данных за интервал времени в 15 минут с подсчетом количества событий.

Пример №2
... | timeaggs span=15m count by event.outcome

Для входных данных, представленных ниже в качестве примера, строится столбчатая диаграмма c группировкой серий:

usernamerequestpathstatusevent.outcome
IvanovGET/veil200success
PetrovGET/cherry200success
IvanovPOST/fuel403failure
AndreevGET/quilt200success

Столбчатая диаграмма

Пример 3:

Подсчет общего количества событий и максимального смещения лога по 3-часовым интервалам:

Пример №3
... | timeaggs composite=true span=3h count, max(log.offset)

Пример 4:

В данном примере для каждого 5-дневного интервала система вернет значение поля log.offset которое встречается в 5 процентах случаев:

Пример №4
... | timeaggs span=5d perc(log.offset, 5)

Пример 5:

Расчет максимального объема сетевого трафика для каждого хоста по 30-минутным интервалам с ограничением на количество уникальных хостов:

В данном примере создается новое поле network.kb, которое преобразует значения поля network.bytes в килобайты, команда round округляет килобайты до 2 значащий цифр и сохраняет в новое поле network.kb_round.

Пример №5
... | peval network.kb=network.bytes/1024, network.kb_round=round(network.kb, 2) 
| timeaggs limit=3 span=30m max(network.kb_round) by hostname

Для каждого уникального значения хоста hostname рассчитывается максимальный объем сетевого трафика network.kb_round за 30-минутные интервалы. Параметр limit=3 ограничивает количество уникальных хостов в результате до трех; остальные хосты объединяются в столбец OTHER.

| timeaggs limit=3 span=30m max(network.kb_round) by hostname

Пример входных данных:

hostnamenetwork.bytes@timestamp
SPB723432025-05-26T15:25:39.697685Z
NSK858042025-05-26T15:25:33.003472Z
NN602392025-05-26T15:25:24.338701Z
SPB106462025-05-26T15:25:24.290198Z
MSK106462025-05-26T15:25:25.223198Z

Результатом выполнения запроса может быть следующая таблица:

OTHERSPBNSKNN_time
99,84nullnull87,42025-05-26T16:00:00.000Z
91,7187,409nullnull2025-05-26T16:30:00.000Z
85.36null89,7515,962025-05-26T16:30:00.000Z

Линейная диаграмма