Мониторинг 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).

    UPD 29.04.2013: Родил такой скрипт, так как демон иногда падает и запихал его в крон (cron)*.
    cat mysql_mon.sh
    
    #!/bin/bash
    if ! [ -f / $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysql.pid ]; then
        echo "MySQL monitor PID-file is Dead. Restarting"
        $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysqlmonitor.py stop
        $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysqlmonitor.py start
    else
        read pid < $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysql.pid
        if ! `/bin/kill -0 "$pid"`; then
            echo "MySQL monitor process is Dead. Restarting"
            $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysqlmonitor.py stop
            $SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/splunkmysqlmonitor.py start
        fi
    fi
    echo "Mysql monitor now Working"
    

    restart не работает, если проблема с PID-файлом, поэтому stop+start.
    $SPLUNK_HOME меняем на полный путь к программе.

    Раз.


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


    Три.


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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 4

      +7
      Munin. Просто. быстро, надежно.
        0
        Яростно плюсую, особенно после Заббикса. Но там все же для задач splunk'а надо много пописать самому.
        0
        Спасибо, хожу вокруг спланка и много думаю.

        Поделитесь, пожалуйста, какие цели вы или ваш заказчик ставили перед мониторингом? Иными словами: какие характеристики в частности по mod_sec мониторили, по каким критериям вызывается алерт (если вызывается)? Чем вам впринципе помогает splunk?

        Мы просто мониторили в нашем приложении само количество логов — обычно это показатель проблем приложения, если их количество возрастает.

        PS На скриншотах мало что видно. У вас видать монитор большой. Советую делать скриншоты в разрешении экрана 1024x758 ну или 1280x1024 хотя бы.
          0
          По сути необходимо было быстро организовать мониторинг логов в целом, чтобы видеть пики и события, которые их вызвали. По сути, принятие решение производится на основании веб интерфейса, а настройка на данный момент пока производится руками.
          Ускорили решение проблем, связанных с переездом сайтов со старого сервера на новый. Например найти и подредактировать правило, на основании которого баннился перепост материала на ВК заняло 5 минут.
          Больших требований на данный момент заказчик не предъявляет — его волнует работа сайтов, а не хостинга. Но уже задумывается над оптимизацией медленных запросов, которые увидели через mysql_monitor.
          P.S. в любом графическом отображении удобно видеть рост нагрузки на сервисы, которые показывают возникшие проблемы, Имхо собственно для этого нам и нужен Splunk.

          Only users with full accounts can post comments. Log in, please.