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

stats

Описание

Выполняет статистические операции над данными.

к сведению

Команда stats поддерживает режим работы с большим объемом данных, при этом не требуется дополнительно увеличивать размер оперативной памяти.

Синтаксис

stats <functions-expression> ["," <functions-expression>]  [<by_expression>]

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

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

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

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

ПараметрСинтаксисПо умолчаниюОписание
<by_expression><by_field> ["," <by_field> ...]Имя поля (или полей) для группировки значений.

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

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

Пример 1

Расчет максимальной температуры батареи для каждого хоста.

source apc_snmp
| stats max(ups_adv_battery_temperature) as 'Максимальная температура батареи' by host

В данном примере для каждого уникального значения поля host будет рассчитано максимальное значение поля ups_adv_battery_temperature и результат будет записан в поле Максимальная температура батареи.

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

hostМаксимальная температура батареи
host158
host287
host346

Пример 2

Расчет количества запросов и перечня используемых методов для каждого клиента и запроса

source apache-*
| stats count as 'Количество запросов', values(method) as 'Используемые методы' by clientip, request
| sort - 'Количество запросов'

В данном примере для каждой уникальной пары clientip и request будут рассчитаны количество запросов и список используемых методов. После этого результаты будут отсортированы по полю Количество запросов.

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

clientiprequestКоличество запросовИспользуемые методы
client1/log/8GET
POST
client1/4GET
client2/3GET

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

Пример 1

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

... | stats values(user)

Пример 2

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

... | stats values(user) by event

Пример 3

В примере система покажет список всех уникальных значений полей user и message:

... | stats values(user), values(message)

Пример 4

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

... | stats values(user), values(message) by user, message

Пример 5

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

... | stats count(user)

Пример 6

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

... | stats count(message) by user

Пример 7

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

... | stats count(user), count(message)

Пример 8

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

... | stats count(user) by user, message

Пример 9

В примере система вернет среднее значение поля log.offset, содержимое поля event для первой записи в выборке, содержимое поля event для последней записи в выборке:

... | stats avg(log.offset), first(event), last(event)

Пример 10

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

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

Пример 11

Расширенный пример использования earliest и latest:

source radius_logs | sort indextime | eval indextime=substr(indextime, 1, (len(indextime) - 1) ) | stats latest(event, indextime), earliest(event, indextime)

Пример 12

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

... | stats dc(user)

Пример 13

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

... | stats list(user)

Пример 14

В примере система вернет среднеквадратическое отклонение поля log.offset:

... | stats stdev(log.offset)

Пример 15

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

... | stats perc(user, 30)