Вступление
Уже написано немало постов на просторах интернета, о мониторинге
веб-сервера 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, т.е.:
<Location /perf-status>
Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1
</Location>
Глобальный интерфейс позволяет просматривать и анализировать накопленные
данные по всем виртуальным хостам, per-host интерфейс же отображает и
анализирует только информацию по хосту, к которому интерфейс прикреплен,
например, если вызвать хост http://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 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,
Apache+suphp или конфигурации, где запрос обрабатывает отдельный демон.