aggs
Описание
Выполняет статистические операции над данными с помощью внутренних механизмов хранилища.
Использование aggs
в запросе допустимо в случае, если перед ней находятся только команды, также работающие с внутренними механизмами хранилища. К ним относятся source
, search
и peval
. Это условие должно выполняться и для всех подзапросов в запросе.
Синтаксис
| aggs [composite=<bool>] <functions-expression> ["," <functions-expression>] [<by_expression>]
Обязательные аргументы
Обязательно использование хотя бы одной из функций:
Параметр | Синтаксис | Описание |
---|---|---|
count | count | count(<field>) | Вычисляет количество событий, содержащих поле. Если поле не указано, рассчитывает общее количество событий. |
values | values(<field>) | Вычисляет массив уникальных значений по заданному полю. |
avg | avg(<field>) | Вычисляет среднее значение по заданному полю. |
dc | dc(<field>) | Вычисляет количество уникальных значений в заданном поле. |
earliest | earliest(<field>) | Вычисляет значение поля для самого раннего события. В качестве второго (опционального) параметра передается имя поля с временной меткой. По умолчанию @timestamp . |
latest | latest(<field>) | Вычисляет значение поля для самого позднего события. В качестве второго (опционального) параметра передается имя поля с временной меткой. По умолчанию @timestamp . |
max | max(<field>) | Вычисляет максимальное значение по заданному полю. |
min | min(<field>) | Вычисляет минимальное значение по заданному полю. |
sum | sum(<field>) | Вычисляет сумму значений по заданному полю. |
perc | perc(<field>, <percent>) | Вычисляет персентиль по заданному полю и проценту. |
median | median(<field>) | Вычисляет медиану по заданному полю. |
Опциональные аргументы
Параметр | Синтаксис | По умолчанию | Опи сание |
---|---|---|---|
composite | composite=<boolean> | false | Дает возможность использования скроллинга в агрегациях и получить все возможные сегменты (buckets) с помощью нескольких запросов (аналогично scroll в stats ). Может быть применен только при наличии группировки (by полей). Количеством сегментов (buckets), которые будут возвращены в ответе имеет фиксированное значение — 1000. |
<by_expression> | <by_field> ["," <by_field> ...] | Имя поля (или полей) для группировки значений. |
Аргумент composite
доступен при запросе к 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
будет на отдельной строке.
Результатом выполнения запроса может быть следующая таблица:
count | status | host.keyword |
---|---|---|
1595 | 200 | host1 |
1498 | 200 | host2 |
3567 | 200 | host3 |
254 | 400 | host1 |
123 | 400 | host3 |
98 | 404 | host2 |
279 | 404 | host3 |
Пример 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.keyword | event.action.keyword | count | hosts |
---|---|---|---|
user1 | credential-validated | 41 | host1 host2 |
user1 | logged-in | 26 | host2 host3 host5 |
user1 | logged-out | 25 | host2 host3 host5 |
user2 | logged-out | 33 | host2 host5 |
user2 | added-member-to-group | 6 | host1 |
user3 | added-member-to-group | 14 | host2 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
:
... | aggs dc(user)
Пример 11
В примере система вернет значение поля user
, которое встречается в 50 процентах случаев:
... | aggs perc(user, 50)