stats
Описание
Выполняет статистические операции над данными.
Команда stats
поддерживает режим работы с большим объемом данных, при этом не требуется дополнительно увеличивать размер оперативной памяти.
Синтаксис
stats <functions-expression> ["," <functions-expression>] [<by_expression>]
Обязательные аргументы
Обязательно использование хотя бы одной из функций:
Параметр | Синтаксис | Описание |
---|---|---|
count | count | count(<field>) | Вычисляет количество событий, содержащих поле. Если поле не указано, рассчитывает общее количество событий. |
values | values(<field>) | Вычисляет массив уникальных значений по заданному полю. |
avg | avg(<field>) | Вычисляет среднее значение по заданному полю. |
dc | dc(<field>) | Вычисляет количество уникальных значений в заданном поле. |
earliest | earliest(<field>) | Вычисляет значение поля для самого раннего события. В качестве второго (опционального) параметра передается имя поля с временной меткой. По умолчанию @timestamp . |
first | first(<field>) | Вычисляет первое значение по заданному полю. |
last | last(<field>) | Вычисляет последнее значение по заданному полю. |
latest | latest(<field>) | Вычисляет значение поля для самого позднего события. В качестве второго (опционального) параметра передается имя поля с временной меткой. По умолчанию @timestamp . |
list | list(<field>) | Вычисляет массив всех значений по заданному полю. |
max | max(<field>) | Вычисляет максимальное значение по заданному полю. |
min | min(<field>) | Вычисляет минимальное значение по заданному полю. |
range | range(<field>) | Вычисляет разницу между максимальным и минимальным значением по заданному полю. |
stdev | stdev(<field>) | Вычисляет стандартное отклонение для генеральной совокупности по заданному полю. |
sum | sum(<field>) | Вычисляет сумму значений по заданному полю. |
perc | perc(<field>, <percent>) | Вычисляет персентиль по заданному полю и проценту. |
median | median(<field>) | Вычисляет медиану по заданному полю. |
Опциональные аргументы
Параметр | Синтаксис | По умолчанию | Описание |
---|---|---|---|
<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 | Максимальная температура батареи |
---|---|
host1 | 58 |
host2 | 87 |
host3 | 46 |
Пример 2
Расчет количества запросов и перечня используемых методов для каждого клиента и запроса
source apache-*
| stats count as 'Количество запросов', values(method) as 'Используемые методы' by clientip, request
| sort - 'Количество запросов'
В данном примере для каждой уникальной пары clientip
и request
будут рассчитаны количество запросов и список используемых методов. После этого результаты будут отсортированы по полю Количество запросов
.
Результатом выполнения запроса может быть следующая таблица:
clientip | request | Количество запросов | Используемые методы |
---|---|---|---|
client1 | /log/ | 8 | GET POST |
client1 | / | 4 | GET |
client2 | / | 3 | GET |
Расширенные примеры
Пример 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)