Приветствую,
уважаемый читатель!
От умения правильно использовать
операторы 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
Комментариев нет:
Отправить комментарий