Плагин Apache
Мониторинг производительности Apache HTTP Server с метриками в реальном времени по запросам, воркерам, трафику и нагрузке сервера.
Обзор
Плагин Apache собирает метрики производительности из модуля mod_status Apache, в том числе:
- Статистика запросов — общее число запросов, запросов в секунду, общий трафик, время обработки
- Статус воркеров — занятые воркеры, простаивающие воркеры
- Метрики трафика — переданные байты, байты в секунду, байты на запрос
- Использование CPU — пользовательское время, системное время, время дочерних процессов
- Нагрузка системы — средняя нагрузка за 1/5/15 минут
- Информация о сервере — uptime, версия Apache, модуль MPM
Требования
Версия Apache
- Минимум: Apache 2.4
- Рекомендуется: Apache 2.4.41 или новее
- Протестировано с: Apache 2.4.41, 2.4.52, 2.4.54, 2.4.57
Модули Apache
Обязательно:
mod_status— модуль статуса сервера
Проверка включения:
# Ubuntu/Debian
apache2ctl -M | grep status
# CentOS/RHEL
httpctl -M | grep status
Включение, если отсутствует:
# Ubuntu/Debian
sudo a2enmod status
sudo systemctl restart apache2
# CentOS/RHEL
# mod_status is usually enabled by default
Зависимости Python
Дополнительные пакеты Python не требуются — используется стандартная библиотека urllib.
Конфигурация
Базовая конфигурация
plugins:
apache:
enabled: true
status_url: http://127.0.0.1/server-status?auto
С пользовательским портом
plugins:
apache:
enabled: true
status_url: http://127.0.0.1:8080/server-status?auto
С аутентификацией
plugins:
apache:
enabled: true
status_url: http://127.0.0.1/server-status?auto
username: monitor
password: your-password
Все параметры конфигурации
plugins:
apache:
enabled: true # Enable/disable plugin
status_url: http://127.0.0.1/server-status?auto # Status URL
username: monitor # HTTP auth username (optional)
password: password # HTTP auth password (optional)
timeout: 10 # Request timeout (seconds)
verify_ssl: true # Verify SSL certificates
Переменные окружения
Конфигурацию можно переопределить с помощью переменных окружения:
export APACHE_STATUS_URL="http://127.0.0.1/server-status?auto"
export APACHE_USERNAME="monitor"
export APACHE_PASSWORD="password"
Настройка Apache
Настройка mod_status
Для Apache 2.4:
Создайте файл конфигурации:
sudo nano /etc/apache2/conf-available/status.conf
Добавьте конфигурацию:
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Require local
# Or allow specific IP
# Require ip 127.0.0.1 ::1
</Location>
# Extended status provides detailed metrics
ExtendedStatus On
</IfModule>
Включите конфигурацию:
# Ubuntu/Debian
sudo a2enconf status
sudo systemctl reload apache2
# CentOS/RHEL
# Include in /etc/httpd/conf.d/status.conf
sudo systemctl reload httpd
Альтернатива: Добавление в VirtualHost
<VirtualHost *:80>
ServerName example.com
<Location /server-status>
SetHandler server-status
Require local
</Location>
</VirtualHost>
Конфигурация ExtendedStatus
Включите ExtendedStatus для подробных метрик:
# In apache2.conf or httpd.conf
ExtendedStatus On
Перезапустите Apache:
sudo systemctl restart apache2 # Ubuntu/Debian
sudo systemctl restart httpd # CentOS/RHEL
Конфигурация безопасности
Ограничьте доступ только localhost:
<Location /server-status>
SetHandler server-status
Require local
</Location>
Разрешите конкретный IP-адрес:
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1 10.0.0.5
</Location>
С HTTP Basic-аутентификацией:
<Location /server-status>
SetHandler server-status
AuthType Basic
AuthName "Server Status"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
Создайте файл паролей:
sudo htpasswd -c /etc/apache2/.htpasswd monitor
Отключение логирования для эндпоинта статуса
Чтобы уменьшить шум в логах:
<Location /server-status>
SetHandler server-status
SetEnv dont-log 1
Require local
</Location>
Или используйте директиву CustomLog:
CustomLog logs/access_log combined env=!dont-log
Собираемые метрики
Метрики запросов
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
total_accesses |
Всего запросов с момента запуска | Количество | Counter |
total_kbytes |
Всего отданного трафика | КБ | Counter |
total_duration |
Общее время обработки запросов | Микросекунды | Counter |
req_per_sec |
Запросов в секунду | req/s | Gauge |
bytes_per_sec |
Байтов в секунду | B/s | Gauge |
bytes_per_req |
Среднее число байтов на запрос | Байты | Gauge |
Метрики воркеров
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
busy_workers |
Занятые потоки/процессы воркеров | Количество | Gauge |
idle_workers |
Простаивающие потоки/процессы воркеров | Количество | Gauge |
Метрики CPU
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
cpu_user |
Пользовательское время CPU | Секунды | Gauge |
cpu_system |
Системное время CPU | Секунды | Gauge |
cpu_children_user |
Пользовательское время CPU (дочерние процессы) | Секунды | Gauge |
cpu_children_system |
Системное время CPU (дочерние процессы) | Секунды | Gauge |
Метрики сервера
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
uptime_seconds |
Uptime сервера | Секунды | Gauge |
load1 |
Средняя нагрузка за 1 минуту | Нагрузка | Gauge |
load5 |
Средняя нагрузка за 5 минут | Нагрузка | Gauge |
load15 |
Средняя нагрузка за 15 минут | Нагрузка | Gauge |
server_version |
Версия сервера Apache | Строка | Info |
server_mpm |
Имя модуля MPM Apache | Строка | Info |
Примечание: Плагин собирает только числовые метрики. Парсинг scoreboard (разбивка по состояниям воркеров) в настоящее время не реализован.
Метрики на дашборде
Дашборд StatusRadar отображает:
Карточка обзора
- Requests/sec — текущая частота запросов
- Busy Workers — число активных воркеров
- System Load — средняя нагрузка сервера
- Traffic — байтов в секунду
График частоты запросов
- Запросов в секунду во времени
- Трафик (байт/сек) во времени
- Средний размер запроса
График статуса воркеров
- Занятые против простаивающих воркеров
- Утилизация пула воркеров
- Оповещения о насыщении воркеров
График использования CPU
- Пользовательское против системного времени CPU
- Время CPU дочерних процессов
- Общее потребление CPU
График нагрузки системы
- Средняя нагрузка за 1, 5 и 15 минут
- Тренды нагрузки во времени
Установка
Быстрая установка
PLUGINS='apache' \
TOKEN='your-agent-token' \
APACHE_STATUS_URL='http://127.0.0.1/server-status?auto' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Включите mod_status (см. «Настройка Apache» выше)
-
Настройте агент:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: apache: enabled: true status_url: http://127.0.0.1/server-status?auto -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep apacheОжидается:
INFO: Plugin apache: Metrics collected successfully INFO: Plugin apache: Uptime 86400s, 1234.5 req/sec
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/apache_plugin.py
Ожидаемый вывод:
Plugin: apache
Enabled: True
Available: True
Collecting metrics...
{
"total_accesses": 1234567,
"total_kbytes": 5678912,
"total_duration": 987654321,
"uptime_seconds": 86400,
"cpu_user": 1234.56,
"cpu_system": 567.89,
"cpu_children_user": 12.34,
"cpu_children_system": 5.67,
"busy_workers": 8,
"idle_workers": 142,
"load1": 0.52,
"load5": 0.48,
"load15": 0.45,
"req_per_sec": 45.2,
"bytes_per_sec": 123456,
"bytes_per_req": 2731,
"server_version": "Apache/2.4.52 (Ubuntu)",
"server_mpm": "event"
}
Проверка эндпоинта статуса
# Check status endpoint is accessible
curl http://127.0.0.1/server-status?auto
# Expected output (partial):
# Total Accesses: 1234
# Total kBytes: 5678
# CPULoad: .123
# Uptime: 86400
# ReqPerSec: 45.2
# BytesPerSec: 123456
# BytesPerReq: 2731
# BusyWorkers: 8
# IdleWorkers: 142
Проверка ExtendedStatus
curl http://127.0.0.1/server-status
# Should show detailed scoreboard
# If you only see basic stats, ExtendedStatus is not enabled
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли Apache?
sudo systemctl status apache2 # Ubuntu/Debian
sudo systemctl status httpd # CentOS/RHEL
Проверка 2: Включён ли mod_status?
apache2ctl -M | grep status
# Should show: status_module (shared)
Проверка 3: Доступен ли эндпоинт статуса?
curl http://127.0.0.1/server-status?auto
# If 404, mod_status is not configured
# If 403, IP restrictions are blocking access
Проверка 4: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep apache
Распространённые ошибки
"404 Not Found"
Ошибка:
ERROR: Plugin apache: HTTP 404 - /server-status not found
Причины:
- mod_status не включён
- location статуса не настроен
Решение:
# Enable mod_status
sudo a2enmod status
# Create status configuration
sudo nano /etc/apache2/conf-available/status.conf
# Add:
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Require local
</Location>
ExtendedStatus On
</IfModule>
# Enable and reload
sudo a2enconf status
sudo systemctl reload apache2
"403 Forbidden"
Ошибка:
ERROR: Plugin apache: HTTP 403 - Access forbidden
Причина: Ограничения по IP блокируют доступ
Решение:
<Location /server-status>
SetHandler server-status
Require local # Allows 127.0.0.1 and ::1
# Or explicitly allow agent IP:
# Require ip 127.0.0.1 10.0.0.5
</Location>
"ExtendedStatus is disabled"
Предупреждение:
WARNING: Plugin apache: Limited metrics - ExtendedStatus is disabled
Причина: Директива ExtendedStatus не установлена
Решение:
# In apache2.conf or httpd.conf
ExtendedStatus On
Перезапустите Apache:
sudo systemctl restart apache2
"Connection refused"
Ошибка:
ERROR: Plugin apache: Connection refused
Причины:
- Неверный status_url
- Apache не запущен
- Файрвол блокирует соединения localhost
Решение:
# Check Apache is running
sudo systemctl status apache2
# Check port
sudo netstat -tlnp | grep apache2
# Test connection
curl -v http://127.0.0.1/server-status?auto
Влияние на производительность
На Apache
Минимальное влияние:
- mod_status отдаёт предварительно рассчитанную статистику
- Нет дополнительного логирования или обработки
- Время отклика: < 1 мс
Бенчмарк:
- Накладные расходы Apache: < 0.01% CPU
- Нет измеримой деградации производительности
- Безопасно для высоконагруженных production-серверов
На агент
Использование ресурсов:
- Память: +5 МБ
- CPU: +1% во время сбора
- Сеть: +0.5 КБ за сбор
Время сбора: < 0.1 секунды
Сценарии использования
1. Мониторинг насыщения воркеров
Отслеживайте:
- Занятые воркеры против общего числа
- Процент утилизации пула воркеров
- Доступность простаивающих воркеров
Оповещение при:
- Занятых воркерах > 90% от общего числа
- Отсутствии доступных простаивающих воркеров
- Простаивающих воркерах < 5
2. Анализ частоты запросов
Отслеживайте:
- Запросов в секунду
- Тренды частоты запросов
- Шаблоны трафика
Оповещение при:
- Всплеске частоты запросов > 3× базового уровня
- Резком падении запросов (сбой)
3. Мониторинг использования CPU
Отслеживайте:
- Использование CPU Apache (user + system)
- Время CPU дочерних процессов
- Корреляцию времени CPU с запросами
Оповещение при:
- Времени CPU, растущем быстрее, чем запросы
- Высоком системном времени (узкое место ввода-вывода)
4. Анализ трафика
Отслеживайте:
- Байтов в секунду
- Байтов на запрос
- Общий отданный трафик
Оповещение при:
- Насыщении пропускной способности
- Необычно крупных запросах
- Всплеске трафика
5. Мониторинг нагрузки системы
Отслеживайте:
- Среднюю нагрузку системы (1/5/15 мин)
- Анализ трендов нагрузки
- Корреляцию нагрузки с частотой запросов
Оповещение при:
- Load1 > числа ядер CPU
- Быстро растущем тренде нагрузки
Лучшие практики
1. Настройте параметры воркеров
Для MPM prefork:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Для MPM worker/event:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Отслеживайте и корректируйте на основе соотношения занятых/простаивающих воркеров.
2. Включите ExtendedStatus
Всегда включайте для подробного мониторинга:
ExtendedStatus On
Накладные расходы незначительны.
3. Учитывайте выбор MPM
Prefork: Один процесс на соединение
- Хорош для: модулей без потокобезопасности (mod_php)
- Память: Выше (каждый процесс загружает модули)
- Масштабируемость: Ниже
Worker/Event: Потоки + процессы
- Хорош для: современных развёртываний
- Память: Ниже (общие модули)
- Масштабируемость: Выше
Event MPM (рекомендуется):
- Лучшая производительность
- Асинхронная обработка keep-alive
- Минимальное потребление памяти
4. Установите подходящие лимиты
Расчёт MaxRequestWorkers:
MaxRequestWorkers = (Total RAM - OS - Other) / (Apache process size)
Example:
Total RAM: 4GB
Reserved: 1GB (OS + other services)
Apache process: 25MB
MaxRequestWorkers = 3072MB / 25MB ≈ 120
5. Отключите логирование статуса
Предотвратите шум в логах:
<Location /server-status>
SetHandler server-status
SetEnv dont-log 1
Require local
</Location>
Руководство по MPM Apache
Проверка текущего MPM
# Ubuntu/Debian
apache2ctl -V | grep MPM
# CentOS/RHEL
httpd -V | grep MPM
Смена MPM (Ubuntu/Debian)
# Disable current MPM
sudo a2dismod mpm_prefork
# Enable new MPM
sudo a2enmod mpm_event
# Restart Apache
sudo systemctl restart apache2
Сравнение производительности MPM
| MPM | Память | Конкурентность | Потокобезопасность | Лучше всего для |
|---|---|---|---|---|
| Prefork | Высокая | Низкая | Нет | mod_php, устаревшие приложения |
| Worker | Средняя | Средняя | Да | Общее назначение |
| Event | Низкая | Высокая | Да | Современные сайты, высокий трафик |
Рекомендация: Используйте Event MPM для лучшей производительности, если только вам не нужны модули без потокобезопасности.
Настройка дашборда мониторинга
Ключевые метрики для отображения
Основные:
- Запросов в секунду
- Занятые воркеры / Всего воркеров
- Нагрузка системы (load1, load5, load15)
Дополнительные: 4. Байтов в секунду 5. Использование CPU (user + system) 6. Uptime
Настройка оповещений
Рекомендуемые пороги:
# High worker utilization
busy_workers / (busy_workers + idle_workers) > 0.9
# System overload
load1 > cpu_cores
# Request spike
req_per_sec > baseline × 3
# No idle workers
idle_workers < 5
# High CPU time
cpu_user + cpu_system > baseline × 2
Расширенная конфигурация
Несколько экземпляров Apache
Мониторинг нескольких экземпляров Apache:
plugins:
apache_main:
enabled: true
status_url: http://127.0.0.1:80/server-status?auto
apache_ssl:
enabled: true
status_url: https://127.0.0.1:443/server-status?auto
verify_ssl: false # If using self-signed cert
Обратный прокси за Nginx
Если Apache находится за прокси Nginx:
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1 10.0.0.5 # Allow nginx backend IP
</Location>
Docker-контейнер
Мониторинг Apache в Docker:
plugins:
apache:
enabled: true
status_url: http://apache-container:80/server-status?auto
Или открывайте статус на другом порту:
Listen 8080
<VirtualHost *:8080>
<Location /server-status>
SetHandler server-status
Require all granted
</Location>
</VirtualHost>
Примеры конфигураций
Базовая production-конфигурация
plugins:
apache:
enabled: true
status_url: http://127.0.0.1/server-status?auto
С SSL и аутентификацией
plugins:
apache:
enabled: true
status_url: https://127.0.0.1/server-status?auto
username: monitor
password: ${APACHE_PASSWORD}
verify_ssl: true
Пользовательский порт
plugins:
apache:
enabled: true
status_url: http://127.0.0.1:8080/server-status?auto
Ограничения
Текущие ограничения
- Нет метрик по виртуальным хостам — только общесерверная статистика
- Нет парсинга scoreboard — разбивка по состояниям воркеров не собирается
- Нет метрик длительности запросов — используйте логи доступа для медленных запросов
- Нет метрик частоты ошибок — отслеживайте логи ошибок отдельно
Масштабируемость
Протестировано с:
- Apache, обслуживающим 10 000+ req/sec
- 500+ процессов воркеров
- Трафиком в несколько ГБ/сек
Производительность:
- Время отклика эндпоинта статуса постоянно независимо от нагрузки
- Нет влияния на производительность Apache
Следующие шаги
- Просмотреть все плагины
- Плагин Nginx — сравнение с мониторингом Nginx
- Плагин PHP-FPM — часто используется вместе
- Системные требования
- Обзор
- Требования
- Версия Apache
- Модули Apache
- Зависимости Python
- Конфигурация
- Базовая конфигурация
- С пользовательским портом
- С аутентификацией
- Все параметры конфигурации
- Переменные окружения
- Настройка Apache
- Настройка mod_status
- Конфигурация ExtendedStatus
- Конфигурация безопасности
- Отключение логирования для эндпоинта статуса
- Собираемые метрики
- Метрики запросов
- Метрики воркеров
- Метрики CPU
- Метрики сервера
- Метрики на дашборде
- Карточка обзора
- График частоты запросов
- График статуса воркеров
- График использования CPU
- График нагрузки системы
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Проверка эндпоинта статуса
- Проверка ExtendedStatus
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На Apache
- На агент
- Сценарии использования
- 1. Мониторинг насыщения воркеров
- 2. Анализ частоты запросов
- 3. Мониторинг использования CPU
- 4. Анализ трафика
- 5. Мониторинг нагрузки системы
- Лучшие практики
- 1. Настройте параметры воркеров
- 2. Включите ExtendedStatus
- 3. Учитывайте выбор MPM
- 4. Установите подходящие лимиты
- 5. Отключите логирование статуса
- Руководство по MPM Apache
- Проверка текущего MPM
- Смена MPM (Ubuntu/Debian)
- Сравнение производительности MPM
- Настройка дашборда мониторинга
- Ключевые метрики для отображения
- Настройка оповещений
- Расширенная конфигурация
- Несколько экземпляров Apache
- Обратный прокси за Nginx
- Docker-контейнер
- Примеры конфигураций
- Базовая production-конфигурация
- С SSL и аутентификацией
- Пользовательский порт
- Ограничения
- Текущие ограничения
- Масштабируемость
- Следующие шаги