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

aggs

Описание

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

осторожно

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

Синтаксис

| aggs [composite=<bool>] <functions-expression> ["," <functions-expression>]  [<by_expression>]

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

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

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

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

ПараметрСинтаксисПо умолчаниюОписание
compositecomposite=<boolean>falseДает возможность использования скроллинга в агрегациях и получить все возможные сегменты (buckets) с помощью нескольких запросов (аналогично scroll в stats). Может быть применен только при наличии группировки (by полей). Количеством сегментов (buckets), которые будут возвращены в ответе имеет фиксированное значение — 1000.
<by_expression><by_field> ["," <by_field> ...]Имя поля (или полей) для группировки значений.
Использование composite

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

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

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

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

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

Базовые примеры

Пример 1.

Расчет количества событий для каждой комбинации кода состояния HTTP и названия хоста.

source server_info
| aggs count by status, host.keyword
предупреждение

Так как поле host является текстовым, к нему необходимо обращаться через .keyword.

При использовании by полей в запросе возвращается строка для каждого уникального значения by поля, содержащая это значение и значение статистических функций. Так как в данном примере используется два by поля, каждая уникальная комбинация status и host будет на отдельной строке.

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

countstatushost.keyword
1595200host1
1498200host2
3567200host3
254400host1
123400host3
98404host2
279404host3

Пример 2.

Расчет списка хостов и количества действий для каждого пользователя и его действия на хостах.

source wineventlog
| aggs count, values(host.name.keyword) as hosts by user.name.keyword, event.action.keyword

Для каждой уникальной пары event.action и user.name вычисляется количество событий и список уникальных хостов, которые записываются в поля countи hosts соответственно.

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

user.name.keywordevent.action.keywordcounthosts
user1credential-validated41host1
host2
user1logged-in26host2
host3
host5
user1logged-out25host2
host3
host5
user2logged-out33host2
host5
user2added-member-to-group6host1
user3added-member-to-group14host2
host3

Расширенные примеры

Пример 1

Получение списка уникальных значений поля user:

... | aggs values(user.keyword)

Пример 2

Получение списка уникальных значений поля user для каждого уникального значения поля event

В примере поле event в данных принимает значения start и end. После выполнения команды, система вернет пары результатов: start и список уникальных значений user (у которых event = "start"), и end и список уникальных значений user (у которых event = "end"):

... | aggs values(user.keyword) by event.keyword

Пример 3

Список всех уникальных значений полей user и message:

... | aggs values(user.keyword), values(message.keyword)

Пример 4

Список уникальных значений user и message, у которых одинаковое сочетание значений полей user и message:

... | aggs values(user.keyword), values(message.keyword) by user.keyword, message.keyword

Пример 5

Количество документов, содержащих поле user:

... | aggs count(user.keyword)

Пример 6

Количество документов, содержащих поле message для каждого уникального значения поля user:

... | aggs count(message.keyword) by user.keyword

Пример 7

Количество документов, содержащих поле user и количество документов, содержащих поле message:

... | aggs count(user.keyword), count(message.keyword)

Пример 8

Количество документов, содержащих поле user для каждого уникального сочетания значений полей user и message:

... | aggs count(user.keyword) by user.keyword, message.keyword

Пример 9

В примере система вернет содержимое поля event для самой ранней записи и содержимое поля event для самой поздней записи:

... | aggs earliest(event), latest(event)

Пример 10

Количество уникальных значений поля user:

Пример №10
... | aggs dc(user)

Пример 11

В примере система вернет значение поля user, которое встречается в 50 процентах случаев:

Пример №11
... | aggs perc(user, 50)