Мониторинг mod_security и MySQL с помощью Splunk

от автора

Доброе время суток, хаброжители.
Хочу поделиться реализацией мониторинга виртуального сервера, который я поддерживаю.
Операционная система: CentOS 6.3 x64, однако описываемая ситуация подойдет и для других платформ, как *Win так и *nix.
Постановка задачи.
На сервере установлены сервисы: apache2, MySQL, postfix и реализована защита apache на базе mod_security.
Хозяина сервера не устраивает подключение по ssh консолью и чтение логов в текстовом редакторе, кроме того не было наглядности нагрузок на сервер, количества запросов, сложности запросов к серверу. Я предложил Zabbix сервер, но клиент сказал категорический «нет». Ну что-ж, на то он и клиент, чтобы быть всегда правым.
Необходимо максимально быстро отыскивать сложившуюся ситуацию, связанную с безопасностью сервера, и исходя из события принимать меры к устранению проблемы.

Сразу приведу скриншот того, что получилось:

Итак, погуглив и задав вопрос и получив ответ, я попробовал по возрастанию сложности все интерфейсы, указанные на официальном сайте mod_security. Обнаружилось, что все они перестали поддерживаться где-то в 2008 году, что меня не устроило.
Splunk я оставил напоследок, так как во-первых он платный, а во-вторых у меня недоверие к универсальным продуктам для подобных задач.
Коротко о решении:
1). Есть платная и бесплатная версии;
2). Тестовый период 60 дней, и если логов, проходящих через систему меньше 500 Мб, то можно спокойно заключать бесплатное лицензионное соглашение;
3) порадовала куча модулей, из которых я сразу заинтересовался еще и модулем для MySQL.
4) возможность установки как на сам сервер, так и на любой другой хост сети, с подключением к различным нодам для сбора информации. То есть консолидация результатов работы нескольких нод в едином центре (например на домашнем сервере).

Опасения, которые возникли:
1). Слишком универсальный продукт;
2). Сложность установки на «живой» сервер;
3). Безопасность самого Splunk.
4). Вечно довольные лица на главной странице сайта и минимум технической информации.

Итак, было решено ставить. Пришлось зарегистрировать аккаунт на сайте, после этого качнул соответствующий пакет для ubuntu (сначала тестировал на домашней машине http+MySQL+miniDLNA+файлопомойка+qBitTorrent). Долго не буду описывать, все заработало. Было решено ставить в продакшн.

Поэтапно качаем:
1. Сам Splunk *.rpm.
Ставим rpm -i *.rpm,
Стартуем сервис splunk start
Читаем вывод. По-умолчанию порт 8000.
2. Модуль для mod_security по ссылке с оф. сайта. Написано, что совершенно бесплатный модуль.
3. Кроме того у модуля были указаны зависимости от пакетов: Visit amMap, Download Maxmind
, Download SideView Utils, Google Maps. Нам не жалко, скачал.
4. Установка самого mod_security тоже достаточно проста: App-> Manage apps -> Install app from a file.
Установка доп. модулей хуже, нужно их распаковывать в каталог Splunk, в папку модулей. У меня все появилось и заработало сразу после рестарта splunk
5. Бонусом качнул MySQL Monitor — модуль, который тоже ставится через Manage Apps. Однако запуск у него через другое место, отдельно от Splunk.

Добавляем запуск Splunk при загрузке:

echo "$SPLUNK/bin/splunk start" >> /etc/rc.local 

Самое интересное началось при настройке, так как внятно нигде ничего не сказано, минимальные руководства по инсталляции модулей даны на страницах.
Необходимое отступление. Splunk позиционирован как поисковик по некоей базе данных (которая хранится на жестком диске сервера, где он установлен). В него можно подключать информацию из файлов (Data Inputs), по TCP, UDP, Scripts (видимо передача данных из скриптов). В свою очередь существует понятия Indexes, в котором содержатся… индексы, ссылающиеся на Data Inputs.
Вернемся к настройке модуля сбора информации mod_security. Оказалось, чтобы он начал работать, необходимо в разделе Manager -> Data Inputs ввести сбор логов из файла (у меня лежит /var/log/httpd/modsec_audit.log), указываю так:

Итак, создан Data Input с именем mod_secur
Идем в Manager -> Indexes и создаем индекс mod_secur, который требует указать размещение базы данных самого Splunk в файловой системе. Поставил:

Home path: $SPLUNK_DB/mod_sec_db/db Cold path: $SPLUNK_DB/mod_sec_db/dbcold Thawed path: $SPLUNK_DB/mod_sec_db/dbthawe 

Когда вход данных и индекс созданы, идем в настройки модуля, которые оказались не в настройках модуля раздела Modules. а в Manager -> Advanced Search -> Search Macros.

В верхней левой части окна убеждаемся, что данные относятся к модулю Mod_security (а то я там долго тыкался в кучу переменных другого модуля, подыскивая свои переменные).
Меняем modsec_index с «main» на наш индекс «mod_secur», modsec_src не трогаем.
После этих манипуляций система начинает читать логи, и где-то в течение минуты для трехдневного файла собирает информацию. В процессах top я Splunk вообще не увидел, ресурсов отъедает минимум, что порадовало.
Ниже приведу пару скриншотов, а далее расскажу про MySQL монитор.
Раз скриншот

Два скриншот

От себя добавлю, что создатели монитора для mod_security совершенно не позаботились о важной информации — выводе включенных и отключенных правил, по которым он работает.

Установка монитора MySQL мне больше вынесла мозги, хотя бы в связи с тем, что дизайн рвет глаза до самых глубин души.

При открытии монитора мы всегда попадаем на readme, где перенастроить это я не нашел.
Состоит модуль из демона сбора статистики MySQl, который так же необходимо стартануть.
Но сначала правим конфигурационный файл модуля "$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/config.ini):

> cp config.ini.sample config.ini > cat config.ini [mysql] host=localhost port=3306 username=xxx password=xxx  [splunk] host=localhost port=9936  [statusvars] interval=10  [slavestatus] interval=10  [tablestats] interval=3600  [processlist] interval=10 

и файл подключенных серверов $SPLUNK_HOME/etc/apps/mysqlmonitor/hosts.yaml

> cp hosts.yaml.sample hosts.yaml > cat hosts.yaml  Databases:   db01:     host: localhost     username: xxx     password: xxx 

И можно стартовать демона.

$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon start  echo "$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon start " >> /etc/rc.local 

Зависит от установленных в системе
•Python 2.6 or 2.7
•Python MySQL drivers

Работает сбор информации через TCP сокет 9936, который и предстоит создать в самом Splunk: Manager -> Data Inputs -> TCP. Создаем сокет 9936.

Manager -> Indexes -> создаем новый mysql, полнейшая аналогия с mod_security.
В Manager -> Advanced search -> Search macros не идем — там ничего и менять то не надо. Все взлетело, привожу скриншоты (да, кстати, автоматом не отработает, нужно нажать кнопку search).
Раз.

Два. Тут оказалось приятным возможность на третьем графике «медленные запросы» нажать на любую часть графика и увидеть сам запрос.

Три.

Всем спасибо за внимание!

ссылка на оригинал статьи http://habrahabr.ru/post/178175/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *