![image](http://i067.radikal.ru/0811/ff/b71b7d393d98.png)
Как получить данные о работе web сервера Apache и представить их в удобном для анализа виде.?
Начнём с получения данных.
Для того этого, необходимо подключить модуль mod_status. Он отслеживает работу сервера и показывает данные в виде обычной html страницы. С его помощью можно узнать:
1 количество процессов, выполняющих обработку запросов;
2 количество процессов, которые находятся в состоянии ожидания;
3 состояние каждого процесса, число обработанных им запросов и переданных данных;
4 общее количество запросов и переданных данных;
5 время работы сервера (запуск, перезапуск и общее время работы (uptime));
6 общая статистика: среднее число запросов в сек, байт на запрос, байт в сек;
7 использование CPU каждым процессом отдельно и apache’ем в целом в данный момент;
8 хосты и их запросы, которые обрабатываются в данный момент.
Переходим к настройке
1 Подключаем модуль.
Для этого в файле httpd.conf снимаем комментарий со строки
LoadModule status_module modules/mod_status.so
2 И открываем доступ к статистике. Добавляем в httpd.conf следующие строки
# включаем расширенную статиститку
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Примечание. Здесь мы разрешили доступ к статистике только для адреса 127.0.0.1 (localhost). Для тестирования удаленного сервера вам нужно будет эту настройку изменить.
3) Перезапускаем apache.
Теперь можно просматривать статистику.
Для этого вводим в браузере URL
localhost/server-status
или, если вы хотите, чтобы страница обновлялась автоматически
localhost/server-status?refresh=15
(вместо цифры 15 ставите задержку в секундах).
Есть ещё один вариант страницы с этими же данными:
localhost/server-status?auto&refresh=3
Как видите, данные мы получили, но анализировать их, глядя на стандартную страницу не очень удобно.
Например, на скриншоте показано состояние процессов apache.
![image](http://i057.radikal.ru/0811/48/0fb4d698154f.png)
Символ подчеркивания означает, что процесс ожидает соединения, буква «W» — отправка ответа, точка – открытый слот без процесса.
Примечание. Скриншот сделан для локального севера, поэтому единственный процесс, который выполняет отправку запроса – это тот, который формирует страницу со статистикой.
Кроме того, если у вас данные постоянно обновляются (используется параметр refresh), то визуально оценить изменения будет очень сложно.
В этом случае удобно использовать скрипт, который будет собирать данные, и показывать их, например, в виде графика.
Можно написать такой его самостоятельно, но проще использовать готовый.
В качестве примера такого скрипта рассмотрим Visualize Apache Server Status (распространяется под LGPL лицензией).
Скрипт состоит из 3-х частей.
1 Конфигурационный файл (inc.config.php). Тут нужно указать адрес страницы со статистикой:
$statusurl = "http://localhost/server-status";
Время обновления данных и масштаб (используется для построения графика).
$refreshtime = 2;
$scalefaktor = 1;
2 Два скрипта (serverstatus.php и serverstatus2.php). Используются для отображения данных. Запускать можно любой из них. Информация одна и та же, только представлена по-разному.
serverstatus.php
![image](https://habrastorage.org/getpro/geektimes/post_images/44a/358/bdc/44a358bdcf5292d25093fafd844ed2ec.png)
serverstatus2.php
![image](http://i068.radikal.ru/0811/b0/2104071210d0.png)
3) Класс, выполняющий анализ страницы со статистикой (class.parse_server_status.php). Самый интересный компонент ;). Его можно использовать в собственных скриптах.
При работе вам будут нужны 2 метода этого класса.
1 parse_server_status($url) – в параметре $url задаем адрес страницы со статистикой.
2 getActiveConnections() – возвращает массив с информацией об активных соединениях. На данный момент этот массив содержит: идентификатор процесса, режим работы, время работы процесса, использование CPU, имя виртуального хоста и URI запроса.
Таким образом, несложно написать собственный скрипт, который будет сохранять данные о работе сервера.
Удачи!