Приветствую, уважаемый читатель!
Сегодня
мы завершим обсуждение темы подключения списков Proxy
и TOR к Splunk, а именно
научимся использовать собранные данные в своих запросах, т.е. подключать к
запросам данные из СУБД MySQL.
Итак,
структурно запросы в СУБД из Splunk выглядят следующим образом (условии, что установлено и
работает приложение DB Connect):
| dbxquery connection=<имя
соединения> maxrows=<количество строк> query="<SQL-запрос
в СУБД>"
- в аргументе connection необходимо указать имя существующего подключения к СУБД.
- в аргументе query необходимо указать SQL-запрос (с учетом особенностей синтаксиса конкретной СУБД).
Пример:
| dbxquery shortnames=t
connection=MySQL maxrows=17000 query="SELECT * FROM Splunk.Proxy LIMIT
17000"
В
остальном, работа с событиями через DB Connect осуществляется
идентично остальным источникам, и возможно использовать любые операторы SPL.
Дополнительно
рекомендую добавлять аргумент shortnames=t,
т.к. она позволяет избавиться от избыточности в названии столбцов. Если её не
указать, то получите вот такое описание полей:
Возвращаясь
к нашей теме, у нас есть 2 источника событий: журналы веб-сервера Apache и
список серверов, загруженный в MySQL. Нам необходимо вывести только те события,
у которых значение IP-адресе клиента совпадает с адресом
из списка в MySQL. С точки зрения Splunk эта
задача решается так:
- Пишутся 2 запроса (1-й для Apache и 2-й для MySQL) возвращающие события за конкретный интервал.
- Эти 2 запроса связываются между собой по какому-либо полю, которое должно присутствовать в обоих запросах.
Есть
несколько операторов, с помощью которых можно выполнить подобное объединение,
наиболее часто используется оператор join.
Результирующий запрос ниже:
sourcetype=Apache_access
| join
type=inner clientip [| dbxquery shortnames=t connection=MySQL maxrows=17000
query="SELECT * FROM Splunk.Proxy LIMIT 17000"
| eval
clientip = IP]
| stats
values(useragent) by clientip
Долго
думал, как правильнее написать, решил – разберём попайпово J
sourcetype=Apache_access - основной источник событий, т.е. именно к его
данным осуществляется подстановка
| join type=inner clientip - оператор join присоединяет друг к
другу события из 2-х источников, по ключевому полю clientip (аргумент type позволяет явно указать тип объединения inner или left)
|
dbxquery shortnames=t connection=MySQL maxrows=17000 query="SELECT * FROM
Splunk.Proxy LIMIT 17000" - запрос, достающий события из БД
| eval clientip = IP - переименуем
поле для использования в join, т.к. в MySQL такого поля нет
| stats values(useragent) by clientip - показываем
все юзерагенты у IP-адресов, которые содержатся в
списке
Когда
мы объединяем между собой запросы, то в результирующий набор данных попадают все
поля событий из обоих запросов (только для тех событий, которые совпали по
значению поля).
Например:
sourcetype=Apache_access
| join
type=inner clientip [| dbxquery shortnames=t connection=MySQL maxrows=17000
query="SELECT * FROM Splunk.Proxy LIMIT 17000"
| eval clientip = IP]
| stats
values(useragent) as Useragents,values(uri) as Url by clientip,Type
Таким
образом, поставленную задачу мы решили, и теперь можно использовать в запросах
списки Proxy и TOR. Всем удачи!
Комментариев нет:
Отправить комментарий