понедельник, 14 ноября 2016 г.

Splunk SPL. Используем stats | eventstats | streamstats | timechart | bucket

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

От умения правильно использовать операторы SPL (Search Processing Language) в Splunk зависит очень многое, это и создание сложных выборок событий, скорость работы самих запросов, полезность дашбордов, нормализация событий и т.д. Ниже будет приведен некоторый опыт работы с популярными операторами SPL (stats, eventstats, streamstats, timechart, bucket).





Операторы я буду описывать последовательно, и предварительно описывать, зачем они нужны. Экспериментировать будем с логами Apache.

stats

Данный оператор, как понятно из названия, позволяет выполнять с выборками событий различные статистические операции. Например, получать количество событий в выборке, вычислять среднее значение какого-либо поля, получать максимальное или минимальное значения поля и т.д. Дополнительно оператор stats позволяет использовать оператор eval для выполнения сложных подсчетов.   

Пример:

sourcetype=Apache_access

| stats count by method



В результате получили количество событий по каждому HTTP-методу. Но предположим, нас интересуют только GET, HEAD и POST.

sourcetype=Apache_access
| stats count(eval(method="GET")) as GET, count(eval(method="HEAD")) as HEAD, count(eval(method="POST")) as POST



eventstats

Данный оператор позволяет привязывать статистические подсчеты (сумму, максимальное значение и т.д.) к полям конкретного события в выборке. Привязка осуществляется путём добавления новых полей к текущему событию.

Пример:

sourcetype=Apache_access
| eventstats sum(bytes) as Sum by clientip



Как видно из скриншота, для каждого события привязывается дополнительное поле Sum, в котором подсчитывается сумма переданных байт для каждого IP-адреса. Для наглядности выведем в табличное представление.

sourcetype=Apache_access
| eventstats sum(bytes) as Sum by clientip
| table clientip,Sum,bytes



streamstats

Данный оператор, также как и eventstats, позволяет привязывать статистические подсчеты (сумму, максимальное значение и т.д.) к полям конкретного события в выборке. Но привязка осуществляется на манер потока, т.е. с получением каждого события статистические подсчеты для каждого поля события обновляются.

Пример:

sourcetype=Apache_access
| sort _time
| streamstats sum(bytes) as Sum by clientip
| table _time,clientip,Sum,bytes



Как видно из скриншота, сумма байт для ip-адреса увеличивается с каждым проиндексированным событием.  


timechart

Данный оператор позволяет создавать временные диаграммы и отображать различные статистические показатели (например, количество событий) с привязкой ко времени. Ключевым тут является задание временных отрезков, в рамках которых производится подсчет.

Пример:

sourcetype=Apache_access
| timechart span=1d count by sourcetype



На графике показано количество событий проиндексированных за каждый день. Но мы можем немного усложнить задачу и показать на графике количество GET-запросов и совокупное количество POST и HEAD-запросов.

sourcetype=Apache_access
| timechart span=1d count(eval(method="GET")) as GET, count(eval(method="POST" OR method="HEAD")) as POSTHEAD  by sourcetype



bucket

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

Пример:

sourcetype=Apache_access
| bucket _time span=1d
| stats count as AllEvent, values(clientip) as IP by _time




На этом пока всё, надеюсь, кому-то пригодится J

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

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