Использование статистических команд и функций
Ниже представлены команды, предназначенные для работы в соч етании со статистическими функциями, которые позволяют подсчитать суммы, средние значения, диапазоны и т.д. Команды 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 | Минимальная стоимость заказа |
---|---|
10 | 32,96 |
16 | 61.43 |
52 | 26.97 |
53 | 37.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.130 | 3 | 0.3 |
192.168.12.119 | 3 | 0.3 |
192.168.12.205 | 2 | 0.2 |
192.168.12.5 | 2 | 0.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.91 | 3 | 199.121.187.7 |
219.49.63.171 | 2 | 133.105.151.123 |
201.223.91.139 | 7 | 133.215.169.45 |
77.65.7.47 | 7 | 69.187.155.231 |
129.83.215.165 | 6 | 121.65.33.45 |
219.49.63.171 | 2 | 133.105.151.123 |