Pull to refresh

Определяем нагрузку на сервер Apache

Reading time3 min
Views7.2K
image

Как получить данные о работе 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

Символ подчеркивания означает, что процесс ожидает соединения, буква «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

serverstatus2.php

image

3) Класс, выполняющий анализ страницы со статистикой (class.parse_server_status.php). Самый интересный компонент ;). Его можно использовать в собственных скриптах.

При работе вам будут нужны 2 метода этого класса.

1 parse_server_status($url) – в параметре $url задаем адрес страницы со статистикой.

2 getActiveConnections() – возвращает массив с информацией об активных соединениях. На данный момент этот массив содержит: идентификатор процесса, режим работы, время работы процесса, использование CPU, имя виртуального хоста и URI запроса.

Таким образом, несложно написать собственный скрипт, который будет сохранять данные о работе сервера.

Удачи!
Tags:
Hubs:
+13
Comments7

Articles