Как стать автором
Обновить

Apache 2 под наблюдением. Мониторинг загрузки системы веб-сервером

Время на прочтение 5 мин
Количество просмотров 25K

Apache 2 под наблюдением



Вступление


Уже написано немало постов на просторах интернета, о мониторинге веб-сервера Apache. При вводе такой фразы, как «мониторинг нагрузки apache» в строке поиска Google, результаты поиска указывают на полезнейший модуль mod_status. А также о еще большей полезности этого модуля в сочетании с perl-расширениями. А если еще и немного пропатчить эти perl-расширения — то вообще супер система получается. Но настроив такую систему — системный администратор на этом, как правило, не останавливается, ему уже необходимо история нагрузки по серверу в целом, потом по каждому хосту, а далее и с точностью до скрипта. И чтоб потом сравнить можно было, а как раньше было, а как теперь нагрузка распределяется.
И вот здесь на помощь может прийти модуль для веб-сервера Apache — mod_performance.


И так, приступим к рассмотрению


Что этот модуль собой представляет. Это обычный модуль Apache 2.x для Linux. Из документации к нему:
  • модуль предназначен для сбора и накопления статистики по использованию ресурсов(CPU и memory, время выполнения скрипта) веб-сервером Apache 2.2;
  • модуль позволяет провести анализ собранных данных.

Что все это значит? А то, что он позволяет отслеживать за тем, сколько ресурсов потребляет поступивший веб-серверу запрос. Каждый раз сохраняя следующую информацию:
  1. виртуальный хост, которому поступил запрос;
  2. файл, который запрашивается;
  3. URI запроса;
  4. CPU нагрузка в %;
  5. использование памяти в %;
  6. время обработки запроса.

А накопившуюся статистику — позволяет анализировать. В качестве базы данных для сохранения и анализа используется SQLite.
В качестве анализатора использования ресурсов, используется не scoreboard, как в mod_status и расширениях perl, а glibtop.
Модуль позволяет отслеживать как абсолютно все запросы, так и конкретные, отфильтрованные по правилу с помощью регулярных выражений. Точнее будет сказано, что модуль ВСЕГДА обрабатывает только те запросы, которые соответствуют фильтру, содержащему регулярное выражение.

Как просмотреть накопленные данные


Модуль предоставляет два интерфейса для просмотра и анализа данных: 1) глобальный; 2) так называемый per-host.
Каждый интерфейс прикреплен к хендлеру:

user-status — per-host
performance-status — глобальный


Доступ к интерфейсам настраивается как и в модуле mod_status, т.е.:

<Location /perf-status>
    Order allow,deny
    SetHandler performance-status
    Allow from 1.1.1.1
</Location>


Глобальный интерфейс позволяет просматривать и анализировать накопленные данные по всем виртуальным хостам, per-host интерфейс же отображает и анализирует только информацию по хосту, к которому интерфейс прикреплен, например, если вызвать хост test.test.test/user-status, то вся выводимая статистика будет касаться только этого хоста. Статистика по другим хостам отображаться не будет.

Глобальный интерфейс управления модулем выглядит, как приведено на рисунке ниже:
Главная форма mod_performance

В главной форме, на рисунке можно увидеть поля:
Mode — режим отображения данных.
Period — дней, период отображения или анализа данных, начиная от начала текущего дня.
Period begin — начало периода, заданного в формате YYYY-MM-DD hh:mm:ss.
Period end — конец периода, заданного в формате YYYY-MM-DD hh:mm:ss.
Если заданы Period begin, Period end — в таком случае отображаются данные ограниченные этими параметрами, а поле Period — игнорируется. В противном случае анализируемый участок задается параметром Period.
Hostname(SQL) — фильтр, выводить данные только по указанному хосту. Синтаксис вызова подобно конструкции like в SQL. Т.е. если задать «%test», то будут выбраны все хосты заканчивающиеся на «test».
Script name(SQL) — подобно предыдущему параметру, только анализируется имя вызываемого скрипта.
URI(SQL) — подобно предыдущему параметру, только анализируется URI запроса.
Graph Mode(Y/N) — отображать графикой или текстом.

Примерный вывод данных выглядит так:
Текстовый вывод накопленной информации

Хост приведенный в примере на картинке — абсолютно тестовый, если он совпадает с реальным — приношу извинения.
А графический режим отображения приведен на рисунке ниже:
Графический вывод

Режимы анализа


Show output without analytics – вывести собранную информацию без анализа, отфильтрованную по хосту, скрипту и URI(графический и текстовый режим).
Maximal %CPU – вывести только записи с максимальным значением %CPU(с учетом фильтрации).
Maximal memory % — вывести только записи с максимальным значением %memory(с учетом фильтрации).
Maximal execution request time – вывести самыйдолго выполняющийся скрипт.
Host requests statistics– вывести статистику обращений к хостам с сортировкой по убыванию (в % от общего числа с учетом фильтров).
Execution history screen(use Period begin) – позволяет вычислять список выполняющихся запросов на указанное время
Number of requests per domain — вывести статистику обращений к хостам с сортировкой по убыванию(не в процентах а количество).
Average usage per host — вывести среднюю загрузку сервера каждым хостом(сумма % CPU, сумма % MEMORY, сумма выполнения скриптов, средний % CPU за период, средний % использования памяти, среднее время выполнения скриптов).
Не буду вдаваться в подробности и некоторые режимы оставлю без внимания.

Как установить модуль


Здесь я привожу пример установки для rpm-систем. Все действия необходимо проводить под пользователем root.
1) установим необходимые пакеты для сборки:

yum install httpd-devel apr-devel libgtop2-devel sqlite-devel gd-devel


2) создадим временную паку для исходных кодов:

mkdir ~/my_tmp
cd ~/my_tmp


3) скачиваем исходные коды модуля и распаковываем архив и переходим в распакованную папку:

wget http://lexvit.dn.ua/utils/getfile.php?file_name=mod_performance_tar201104233487.gz -O mod_performance.tar.gz
tar zxvf mod_performance.tar.gz
cd mod_performance/


4) собираем модуль:

make


5) на warning не обращаем внимания. Главное, чтоб не было error. Если все собралось нормально, то:

make install

или
cp .libs/mod_performance.so <путь куда копировать>


Конфигурируем Apache


Конфигурация будет осуществляться для стандартной установки Apache, т.е модули располагаются в каталоге /etc/httpd/modules, существует каталог /etc/httpd/conf.d/ и он подключен в /ect/httpd/conf/httpd.conf.
1) создать файл конфигурации модуля:

touch /etc/httpd/conf.d/mod_performance.conf


2) вставить в него:

LoadModule performance_module modules/mod_performance.so

<IfModule mod_performance.c>
PerformanceHistory 5
PerformanceEnabled On
PerformanceMaxThreads 80
PerformanceScript \.php
PerformanceStackSize 1
PerformanceUseCanonical On

<Location /admin-status>
Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1
</Location>
</IfModule>


3) сохранить файл и перезапустить Apache:

service httpd restart


Файл конфигурации выступает лишь как пример. Все параметры должны быть подобраны под конкретный сервер.
Вышеприведенная конфигурация модуля позволяет отслеживать запросы к php скриптам.
Описание всех параметров конфигурации можно прочитать в документации модуля.

Внимание, на текущий момент модуль не может отслеживать запросы для конфигурации сервера Apache+mod_fcgid, Apache+mod_cgid или конфигурации, где запрос обрабатывает отдельный демон.

На этом обзор модуля завершен.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+38
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн