понедельник, 18 сентября 2017 г.

Splunk. Savedsearch. Оптимизация запросов в БД.

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

В рамках рассмотрения вопросов повышения производительности, хотел бы рассказать про возможность оптимизации времени выполнения запросов в Splunk. Интересовать нас будут запросы в БД, идущие через приложение Splunk DB Connect.




Справочно:
Когда вы выполняете любой SPL-запрос на получение событий, помимо результата, т.е. самих событий, Splunk предоставляет большое количество различной информации об этом запросе. Среди информации о запросе, в т.ч. есть информация о времени выполнения запроса с разбивкой по каждому оператору на SPL.


Для получения информации необходимо после выполнения запроса выбрать пункт меню «Inspect Job».



Итак, используя приложение Splunk DB Connect, мы можем выполнять, при помощи оператора dbxquery, запросы в БД. Это удобно….но как показала практика не очень быстро, покажу на примере (СУБД MSSQL):

Есть запрос на получение одного поля из таблицы БД:

| dbxquery query="SELECT "KAS"."dbo"."v_akpub_infected_item"."tmStore" FROM "KAV"."dbo"."v_akpub_infected_item"" connection="kas"

Инспекция запроса («Inspect Job») показывает следующее:



Как вы видите, запрос в БД «command.dbxquery» выполнен на 1.66 секунды, а оптимизация «dispatch.optimize.toJson» выполнялась 2.21 секунды. Из БД вернулось 86 событий. Понятно, что для запроса одного поля время выполнения запроса 4 секунды - слишком много J

Теперь выгрузим полученные 86 событий в csv-файл, и попробуем загрузить их через оператор inputcsv.

| inputcsv MalItem

Инспекция запроса («Inspect Job») показывает следующее:



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

Теперь о том, как можно автоматизировать выгрузку событий из БД в csv-файл.

1. Необходимо написать соответствующий  запрос. Размещаться результирующий файл будет тут - /opt/splunk/var/run/splunk/csv.  

| dbxquery query="SELECT "KAS"."dbo"."v_akpub_infected_item"."tmStore" FROM "KAV"."dbo"."v_akpub_infected_item"" connection="kas"
| outputcsv MalItem

2. Создать новый хранимый поиск (или сохраненный запрос) в  конфигурационном файле savedsearches.conf (по умолчанию он тут - /opt/splunk/etc/apps/search/local):

[GetItem]
search = | dbxquery query="SELECT "KAS"."dbo"."v_akpub_infected_item"."tmStore" FROM "KAV"."dbo"."v_akpub_infected_item"" connection="kas"
| outputcsv MalItem 
enableSched = 1
cron_schedule = */60 * * * *

enableSched – позволяет включить выполнение запроса по расписанию
cron_schedule – задает период выполнения запроса в формате cron

3. Перезапустить Splunk и заменить на всех дашбордах запрос БД на запрос из файла.





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

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