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

Использование статистических команд и функций

Ниже представлены команды, предназначенные для работы в сочетании со статистическими функциями, которые позволяют подсчитать суммы, средние значения, диапазоны и т.д. Команды stats, streamstats и eventstats позволяют вычислять сводную статистику по результатам поиска или событиям, полученным из индекса.

timechart

Использует статистические функции (avg, count, dc, max, sum) и возвращает результат поиска в виде диаграммы временных рядов, где ваши данные отображаются на оси X, которая всегда является полем времени.

Команда timechart позволяет выполнять статистические функции, распределяя результаты по времени (построение временной диаграммы). Затем, эту таблицу можно визуализировать как диаграмму, где ваши данные отображаются на оси X, которая всегда является полем времени. Ось Y может представлять собой любое другое значение поля, количество значений или статистический расчет значения поля. Визуализация временных диаграмм обычно представляют собой линейные, зональные или столбчатые диаграммы.

По умолчанию, период сбора информации - 30 мин. За это отвечает параметр span. Запрос выведет график событий из логов с периодом сбора 1 час и выполнит сортировку по кодам ответа сервера (для этого используется ключевое слово by). Временной диапазон сегодня.

source sm_cs_web_indexes 
| timechart span=60min count by http.response.status_code

Для изменения линейного график на столбчатый - нужно выбрать соответствующую иконку на вкладке виртуализация.

Рекомендуется включать опцию Группировка серий.

chart

В отличие от команды timechart, которая использует поле time для оси X, команда chart позволяет использовать произвольное поле в качестве оси X. Для этого используется ключевое слово over, чтобы определить, какое поле занимает ось Х. Поддерживает визуализацию диаграмм: column, line, area, и pie chart.

Запрос выведет информацию по максимальной стоимости заказа с сортировкой по идентификаторам пользователей.

source food_orders 
| chart max(total_price) by user_id

Запрос выведет информация по минимальной стоимости заказа с сортировкой по идентификаторам пользователей.

source food_orders 
| chart min(total_price) by user_id

Запрос выведет информацию по стоимости первого заказа каждого пользователя с сортировкой по идентификаторам пользователей.

source food_orders 
| chart first(total_price) by user_id

Запрос выведет информацию по средней стоимости заказа каждого пользователя с сортировкой по идентификаторам пользователей.

source food_orders 
| chart avg(total_price) by user_id

Запрос выведет информацию по стоимости последнего заказа каждого пользователя с сортировкой по идентификаторам пользователей.

source food_orders 
| chart last(total_price) by user_id

Запрос выведет информацию по стоимости последнего заказа каждого пользователя с сортировкой по идентификаторам пользователей.

source food_orders 
| chart last(total_price) by user_id

Запрос выведет информацию по суммарной стоимости заказов каждого пользователя с сортировкой по идентификаторам пользователей.

source food_orders 
| chart sum(total_price) by user_id

stats

Выполняет статистические операции над данными. Команды eventstats и streamstats это вариации команды stats.

Запрос выведет информацию по минимальной стоимости заказа с сортировкой по пользователям с сортировкой по идентификаторам пользователей.

source food_orders 
| stats max(total_price) as 'Максимальная стоимость заказа' by user_id
user-idМинимальная стоимость заказа
1032,96
1661.43
5226.97
5337.94

eventstats

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

Команда eventstats подсчитает сумму всех запросов пользователей (группировка по полю source.ip) и запишет ее в каждое событие в поле total_count. Далее команда head оставит 10 записей с самым большим количеством запросов, и в заключении будет подсчитан процент запросов пользователей от общего числа запросов.

source sm_cs_web_indexes
| stats count as count_by_ip by source.ip
| sort -count_by_ip
| eventstats sum(count_by_ip) as total_count
| head 10
| eval percent = round((count_by_ip / total_count * 100), 2)
| table source.ip, count_by_ip, percent
| rename source.ip as ip_источника, count_by_ip as "Кол-во запросов от источника", percent as "Процент от общего числа запросов"
ip_источникаКол-во запросов от источникаПроцент от общего числа запросов
192.168.12.13030.3
192.168.12.11930.3
192.168.12.20520.2
192.168.12.520.2

streamstats

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

Команда streamstats итеративно вычисляет статистику для каждого события, учитывая не все найденные данные, а только те события, которые были обработаны ранее. Аргументы команды streamstats:

  • window - ограничивает максимальный размер окна (количество событий), которые будут использоваться при расчете статистики. Значение по умолчанию: 0 (не ограничено);
  • reset_before – принимает eval выражение, возвращающее Boolean значение. Если оно равно true, окно сбрасывается и после этого вычисляется статистика;
  • reset_after - принимает eval выражение, возвращающее Boolean значение. Если оно равно true, вычисляется статистика и после этого сбрасывается окно;
  • reset_on_change – сбрасывает окно, если значение хотя бы одного из by полей изменилось.

Запрос, который будет записывать число пакетов между ip источника и ip назначения. Сначала отфильтруем события, в которых число пакетов равно null, далее будет выполнена сортировка данных по возрастанию временной метки. Команда streamstats запишет ip назначения и количество пакетов. Аргумент reset_on_change = true значит, что при изменении поля source.ip статистика сбросится и будет считаться заново.

source sm_cs_network_indexes
| where isnotnull (network.packets)
| sort +'@timestamp'
| streamstats list(destination.address) as destination_address, sum(network.packets) as network_packets by source.ip reset_on_change = true
| table destination_address, network_packets, source.ip
| rename destination_address as "Ip назначения", network_packets as "Кол-во пакетов", source.ip as "IP источника"
Ip назначенияКол-во пакетовIP источника
69.79.101.913199.121.187.7
219.49.63.1712133.105.151.123
201.223.91.1397133.215.169.45
77.65.7.47769.187.155.231
129.83.215.1656121.65.33.45
219.49.63.1712133.105.151.123