В этой статье я расскажу о том, как получить данные о работе web сервера Apache и представить их в удобном для анализа виде.
Начнем с получения данных. Для этого необходимо подключить модуль mod_status. Он отслеживает работу сервера и показывает данные в виде обычной html страницы. С его помощью можно узнать:
- количество процессов, выполняющих обработку запросов;
- количество процессов, которые находятся в состоянии ожидания;
- состояние каждого процесса, число обработанных им запросов и переданных данных;
- общее количество запросов и переданных данных;
- время работы сервера (запуск, перезапуск и общее время работы (uptime));
- общая статистика: среднее число запросов в сек, байт на запрос, байт в сек;
- использование CPU каждым процессом отдельно и apache'ем в целом в данный момент;
- хосты и их запросы, которые обрабатываются в данный момент.
Переходим к настройке.
- Подключаем модуль. Для этого в файле httpd.conf снимаем комментарий со строки
LoadModule status_module modules/mod_status.so
- И открываем доступ к статистике. Добавляем в httpd.conf следующие строки
# включаем расширенную статиститку
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>
Примечание. Здесь мы разрешили доступ к статистике только для адреса 127.0.0.1 (localhost). Для тестирования удаленного сервера вам нужно будет эту настройку изменить.
- Перезапускаем apache.
Теперь можно просматривать статистику. Для этого вводим в браузере URL http://localhost/server-status или, если вы хотите, чтобы страница обновлялась автоматически - http://localhost/server-status?refresh=15 (вместо цифры 15 ставите задержку в секундах).
Есть ещё один вариант страницы с этими же данными: http://localhost/server-status?auto&refresh=3
Как видите, данные мы получили, но анализировать их, глядя на стандартную страницу не очень удобно.
Например, на скриншоте показано состояние процессов apache:
Символ подчеркивания означает, что процесс ожидает соединения, буква "W" - отправка ответа, точка - открытый слот без процесса.
Примечание. Скриншот сделан для локального севера, поэтому единственный процесс, который выполняет отправку запроса - это тот, который формирует страницу со статистикой.
Кроме того, если у вас данные постоянно обновляются (используется параметр refresh), то визуально оценить изменения будет очень сложно.
В этом случае удобно использовать скрипт, который будет собирать данные, и показывать их, например, в виде графика. Его можно написать самостоятельно, но проще использовать готовый.
В качестве примера такого скрипта рассмотрим Visualize Apache Server Status (распространяется под LGPL лицензией).
Скрипт состоит из 3-х частей.
- Конфигурационный файл (inc.config.php). Тут нужно указать адрес страницы со статистикой:
$statusurl = "http://localhost/server-status";
$refreshtime = 2;
$scalefaktor = 1;
- Два скрипта (serverstatus.php и serverstatus2.php). Используются для отображения данных. Запускать можно любой из них. Информация одна и та же, только представлена по-разному.
serverstatus.php
serverstatus2.php
- Класс, выполняющий анализ страницы со статистикой (class.parse_server_status.php). Самый интересный компонент . Его можно использовать в собственных скриптах.
При работе вам будут нужны 2 метода этого класса:
- parse_server_status($url) - в параметре $url задаем адрес страницы со статистикой.
- getActiveConnections() - возвращает массив с информацией об активных соединениях. На данный момент этот массив содержит: идентификатор процесса, режим работы, время работы процесса, использование CPU, имя виртуального хоста и URI запроса.
Таким образом, несложно написать собственный скрипт, который будет сохранять данные о работе сервера.
|