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

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

Вступление

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


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

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

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

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

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

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

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

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

Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1

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

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

В главной форме, на рисунке можно увидеть поля:
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 //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
PerformanceHistory 5
PerformanceEnabled On
PerformanceMaxThreads 80
PerformanceScript \.php
PerformanceStackSize 1
PerformanceUseCanonical On
Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1
3) сохранить файл и перезапустить Apache:

service httpd restart

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

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

На этом обзор модуля завершен.