суббота, 3 марта 2018 г.

Splunk. Timechart. Визуализация аномалий.


Приветствую, уважаемый читатель!

Сегодня продолжим расширять познания о способах визуализации событий в Splunk и рассмотрим, как наглядно можно отразить на дашборде аномальную/повышенную активность.




Для создания временных диаграмм и визуализации активности можно воспользоваться специальным SPL-оператором – timechart, который обладает очень широкой функциональностью (почитать можно тут - https://unitybas.blogspot.ru/2016/11/splunk-spl-stats-eventstats-streamstats.html). Сразу скажу, что все примеры будут выполняться над логом Apache.

Вбиваем запрос:
sourcetype=Apache_access
| timechart count

Перед нами типичное распределение полученных событий по временной шкале, с видимыми всплесками активности:



Чтобы картина была более наглядна, необходимо посчитать и отразить на графике среднее количество событий для заданного временного интервала.

sourcetype=Apache_access
| timechart count
| eventstats avg(count) as average_value

После выполнения данного запроса на графике будет отражено среднее количество событий для всего заданного интервала времени. SPL-оператор eventstats позволяет привязывать к событиям статистические подсчеты.





Способ отображения среднего значения на графике можно слегка изменить на манер потоковых подсчетов (streamstats), т.е. средне значение будет пересчитываться для временного диапазона после каждого полученного события или, наоборот, в случае отсутствия новых полученных событий. Сложно, лучше покажу J

sourcetype=Apache_access
| timechart count
| streamstats avg(count) as average_value




Какая тут идея - мы получили новое событие и, соответственно, необходимо пересчитать среднее значение для временного отрезка на диаграмме. В нашем примере отрезок составляет 30 минут (на скриншоте ниже приведена динамика изменения среднего значения на каждом отрезке), и его длительность можно редактировать в параметрах оператора timechart (span).



Итак, что мы получили? Наглядное представление, что периодически возникают всплески, которые значительно превышают среднее количество событий для выбранного sourcetype, т.е. какого-либо объекта мониторинга.
Для некоторых случаев такой визуализации хватит (например, если мы осуществляем мониторинг возникающих критических событий безопасности, типа срабатывания сигнатур IDS), а вот если мы осуществляем мониторинг активности пользователей в информационной системе, тут простой всплеск событий не является однозначно плохой ситуацией, и нужно иметь возможность отразить активность каждого конечного пользователя или группы пользователей. Одно допущение, т.к. в тестовой среде Splunk у меня не подключены информационные системы, в качестве имени пользователя будет выступать IP-адрес из лога Apache.

Если попробовать просто изменить условие оператора timechart для отображения информации по каждому IP, то получим ужас из которого ничего непонятно J

sourcetype=Apache_access
| timechart count by clientip
| eventstats avg(count) as average

  
Пришлось слегка подумать, и разделить запрос на 2 части:
1. Получение единого среднего количества событий для всех пользователей.
2. Добавление этого значения на график для всех пользователей.

sourcetype=Apache_access
| eval average =
    [search sourcetype=Apache_access
| transaction clientip
| eventstats avg(eventcount) as average_by_ip
| eval average_by_ip=round(average_by_ip,0)
| return $average_by_ip]
| stats count by clientip,average




Теперь видно, что 3 пользователя проявляют повышенную активность, выходящую за средние рамки, и можно поинтересоваться, что конкретно они делают J

Немного поясню запрос:
| transaction clientip, разделяем все события на блоки по полю – clientip (наш аналог имени пользователя), и для каждого блока автоматически создается поле – eventcount, которое содержит количество событий в блоке;
| return $average_by_ip, передаем в основной запрос получившееся среднее значение для всех пользователей системы;

Чтобы всё красиво выглядело, нужно немного изменить настройки «Format Visualization» как на скриншоте ниже.



Собственно, задача решена J

Комментариев нет:

Отправить комментарий