Плагин HAProxy
Мониторинг балансировщика нагрузки HAProxy с подробными метриками по статистике frontend/backend, состоянию серверов, частоте сессий, очередям и отслеживанию соединений.
Обзор
Плагин HAProxy собирает подробные метрики из stats-сокета HAProxy, в том числе:
- Метрики frontend — входящие соединения, запросы, частота сессий, ошибки
- Метрики backend — соединения с бэкендами, глубина очереди, времена отклика
- Состояние серверов — статус серверов, проверки состояния, переходы up/down
- Статистика сессий — активные сессии, частота сессий, лимиты соединений
- Метрики очереди — текущая очередь, максимальная очередь, время в очереди
- Статистика трафика — байты на вход/выход, частота запросов/ответов
Требования
Версия HAProxy
- Минимум: HAProxy 1.8
- Рекомендуется: HAProxy 2.4 или новее
- Протестировано с: HAProxy 2.0, 2.4, 2.6, 2.8
Stats-сокет HAProxy
Обязательно: stats-сокет должен быть включён в конфигурации HAProxy.
Зависимости Python
Дополнительные пакеты Python не требуются — используется стандартный socket из библиотеки.
Доступ к сокету
Агенту нужен доступ на чтение к stats-сокету HAProxy.
Конфигурация
Базовая конфигурация
plugins:
haproxy:
enabled: true
socket_path: /run/haproxy/admin.sock
С HTTP-страницей статистики
plugins:
haproxy:
enabled: true
stats_url: http://localhost:8404/stats;csv
username: admin
password: password
Все параметры конфигурации
plugins:
haproxy:
enabled: true # Enable/disable plugin
socket_path: /run/haproxy/admin.sock # Stats socket path
stats_url: "" # HTTP stats URL (alternative)
username: "" # HTTP auth username
password: "" # HTTP auth password
timeout: 10 # Socket/HTTP timeout (seconds)
Переменные окружения
Конфигурацию можно переопределить с помощью переменных окружения:
export HAPROXY_SOCKET="/run/haproxy/admin.sock"
export HAPROXY_STATS_URL="http://localhost:8404/stats;csv"
Настройка HAProxy
Установка
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install haproxy
# Start service
sudo systemctl start haproxy
sudo systemctl enable haproxy
CentOS/RHEL:
sudo yum install haproxy
# Start service
sudo systemctl start haproxy
sudo systemctl enable haproxy
Включение stats-сокета
Отредактируйте конфигурацию HAProxy:
sudo nano /etc/haproxy/haproxy.cfg
Добавьте stats-сокет в секцию global:
global
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
Или включите HTTP-страницу статистики:
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:password
Перезапустите HAProxy:
sudo systemctl restart haproxy
Предоставление доступа к сокету
По умолчанию агент работает от root — имеет доступ к сокету.
Для агента без root:
# Add user to haproxy group
sudo usermod -aG haproxy statusradar
# Or change socket permissions
# In haproxy.cfg:
# stats socket /run/haproxy/admin.sock mode 666 level admin
Собираемые метрики
Метрики frontend
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
frontend_sessions_current |
Текущие сессии | Количество | Gauge |
frontend_sessions_max |
Максимум сессий | Количество | Gauge |
frontend_sessions_total |
Всего сессий | Количество | Counter |
frontend_request_rate |
Частота запросов | Запросов/с | Gauge |
frontend_bytes_in |
Принятые байты | Байты | Counter |
frontend_bytes_out |
Отправленные байты | Байты | Counter |
frontend_requests_denied |
Отклонённые запросы | Количество | Counter |
frontend_request_errors |
Ошибки запросов | Количество | Counter |
frontend_http_1xx |
HTTP-ответы 1xx | Количество | Counter |
frontend_http_2xx |
HTTP-ответы 2xx | Количество | Counter |
frontend_http_3xx |
HTTP-ответы 3xx | Количество | Counter |
frontend_http_4xx |
HTTP-ответы 4xx | Количество | Counter |
frontend_http_5xx |
HTTP-ответы 5xx | Количество | Counter |
Метрики backend
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
backend_sessions_current |
Текущие сессии | Количество | Gauge |
backend_queue_current |
Текущая глубина очереди | Количество | Gauge |
backend_queue_max |
Максимальная глубина очереди | Количество | Gauge |
backend_response_time_avg |
Среднее время отклика | мс | Gauge |
backend_connect_time_avg |
Среднее время подключения | мс | Gauge |
backend_queue_time_avg |
Среднее время в очереди | мс | Gauge |
backend_retries |
Повторы соединений | Количество | Counter |
backend_redispatches |
Перенаправления | Количество | Counter |
backend_connection_errors |
Ошибки соединений | Количество | Counter |
backend_response_errors |
Ошибки ответов | Количество | Counter |
backend_servers_up |
Серверов в состоянии UP | Количество | Gauge |
backend_servers_down |
Серверов в состоянии DOWN | Количество | Gauge |
Метрики серверов
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
server_total |
Всего серверов | Количество | Gauge |
server_active |
Активные серверы | Количество | Gauge |
server_backup |
Резервные серверы | Количество | Gauge |
server_check_failures |
Сбои проверок состояния | Количество | Counter |
Метаданные-метрики
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
frontend_count |
Число frontend'ов | Количество | Gauge |
backend_count |
Число backend'ов | Количество | Gauge |
Метрики на дашборде
Дашборд StatusRadar отображает:
Карточка обзора
- Active Sessions — текущие сессии frontend
- Backend Status — число здоровых бэкендов
- Queue Depth — текущая очередь backend
- Request Rate — запросов в секунду
График трафика frontend
- Частота входящих запросов
- Частота сессий
- Байты на вход/выход
График состояния backend
- Статус backend (UP/DOWN)
- Глубина очереди во времени
- Ошибки соединений
Таблица статуса серверов
- Имя и статус сервера
- Текущие сессии
- Глубина очереди
- Статус проверки состояния
- Время отклика
График частоты сессий
- Частота сессий frontend
- Частота сессий backend
- Лимит максимума сессий
График частоты ошибок
- Ошибки соединений
- Ошибки ответов
- Отклонённые запросы
Установка
Быстрая установка
PLUGINS='haproxy' \
TOKEN='your-agent-token' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Включите stats-сокет HAProxy (см. выше)
-
Настройте агент:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: haproxy: enabled: true socket_path: /run/haproxy/admin.sock -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep haproxyОжидается:
INFO: Plugin haproxy: Metrics collected successfully INFO: Plugin haproxy: 3 frontends, 5 backends, 2 servers UP
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/haproxy_plugin.py
Ожидаемый вывод:
Plugin: haproxy
Enabled: True
Available: True
Collecting metrics...
{
"frontends": {
"http": {
"sessions": 45,
"sessions_rate": 12.5,
"requests_total": 123456
}
},
"backends": {
"web_servers": {
"sessions": 42,
"queue_current": 0,
"status": "UP"
}
},
"servers": {
"web1": {
"status": "UP",
"sessions": 21,
"check_status": "L7OK"
}
}
}
Проверка сокета HAProxy
# Query stats via socket
echo "show stat" | sudo socat stdio /run/haproxy/admin.sock
# Show info
echo "show info" | sudo socat stdio /run/haproxy/admin.sock
# Show servers state
echo "show servers state" | sudo socat stdio /run/haproxy/admin.sock
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли HAProxy?
sudo systemctl status haproxy
Проверка 2: Включён ли stats-сокет?
grep "stats socket" /etc/haproxy/haproxy.cfg
Проверка 3: Может ли агент получить доступ к сокету?
sudo ls -la /run/haproxy/admin.sock
echo "show info" | sudo socat stdio /run/haproxy/admin.sock
Проверка 4: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep haproxy
Распространённые ошибки
"Stats socket not found"
Ошибка:
ERROR: Plugin haproxy: Stats socket not found at /run/haproxy/admin.sock
Решение:
Включите stats-сокет в haproxy.cfg:
global
stats socket /run/haproxy/admin.sock mode 660 level admin
Перезапустите HAProxy:
sudo systemctl restart haproxy
"Permission denied"
Ошибка:
ERROR: Plugin haproxy: Permission denied accessing stats socket
Решение:
# Add agent user to haproxy group
sudo usermod -aG haproxy statusradar
# Or change socket permissions (less secure)
# In haproxy.cfg:
# stats socket /run/haproxy/admin.sock mode 666 level admin
"socat not found"
Ошибка:
ERROR: Plugin haproxy: socat command not found
Решение:
# Install socat
sudo apt-get install socat # Ubuntu/Debian
sudo yum install socat # CentOS/RHEL
Влияние на производительность
На HAProxy
Минимальное влияние:
- stats-сокет читает из разделяемой памяти
- Нет влияния на обработку запросов
- Время отклика: < 10 мс
Бенчмарк:
- Накладные расходы: < 0.01% CPU
- Нет измеримой деградации производительности
На агент
Использование ресурсов:
- Память: +8 МБ
- CPU: +2% во время сбора
- Сеть: +1 КБ за сбор
Время сбора: < 0.1 секунды
Сценарии использования
1. Мониторинг состояния backend
Отслеживайте:
- Статус серверов (UP/DOWN)
- Сбои проверок состояния
- Простой серверов
Оповещение при:
- Сервере в состоянии DOWN
- Сбоях проверок состояния
- Частых переходах up/down
2. Мониторинг очереди
Отслеживайте:
- Глубину очереди backend
- Глубину очереди сервера
- Время в очереди
Оповещение при:
- Глубине очереди > 0 (backend насыщен)
- Росте очереди
- Достижении максимальной очереди
3. Отслеживание сессий
Отслеживайте:
- Текущие сессии против максимума
- Частоту сессий
- Достижение лимита сессий
Оповещение при:
- Сессиях > 80% от максимума
- Всплеске частоты сессий
- Отклонённых соединениях
4. Мониторинг частоты ошибок
Отслеживайте:
- Ошибки соединений
- Ошибки ответов
- Повторы и перенаправления
Оповещение при:
- Частоте ошибок > 1%
- Росте ошибок соединений
- Высокой частоте повторов
Лучшие практики
1. Настройте проверки состояния
backend web_servers
option httpchk GET /health HTTP/1.1
http-check expect status 200
server web1 10.0.0.10:80 check inter 5s fall 3 rise 2
server web2 10.0.0.11:80 check inter 5s fall 3 rise 2
Параметры:
inter: Интервал проверки (5s)fall: Число сбоев перед пометкой DOWN (3)rise: Число успехов перед пометкой UP (2)
2. Установите лимиты сессий
frontend http
maxconn 10000
backend web_servers
maxconn 5000
server web1 10.0.0.10:80 maxconn 1000
3. Включите лимиты очереди
backend web_servers
timeout queue 30s
Оповещение при глубине очереди > 0 — указывает на насыщение backend.
4. Отслеживайте времена отклика
backend web_servers
timeout server 30s
Отслеживайте response_time_avg и оповещайте при росте.
5. Используйте stick-таблицы для ограничения частоты
frontend http
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny if { sc_http_req_rate(0) gt 100 }
6. Включите логирование
global
log /dev/log local0
log /dev/log local1 notice
frontend http
option httplog
Тонкая настройка производительности HAProxy
Настройка соединений
global
maxconn 100000
tune.maxaccept 1000
defaults
timeout connect 5s
timeout client 30s
timeout server 30s
Настройка буферов
global
tune.bufsize 32768
tune.maxrewrite 8192
Конфигурация потоков (HAProxy 2.0+)
global
nbthread 4 # Number of threads = number of CPU cores
Расширенная конфигурация
Несколько экземпляров HAProxy
plugins:
haproxy_lb1:
enabled: true
socket_path: /run/haproxy/lb1.sock
haproxy_lb2:
enabled: true
socket_path: /run/haproxy/lb2.sock
HTTP-статистика (альтернатива сокету)
plugins:
haproxy:
enabled: true
stats_url: http://localhost:8404/stats;csv
username: admin
password: ${HAPROXY_PASSWORD}
Docker-контейнер
Мониторинг HAProxy в Docker:
plugins:
haproxy:
enabled: true
socket_path: /var/run/haproxy/admin.sock
Запуск Docker с монтированием сокета:
docker run -d --name haproxy \
-v /var/run/haproxy:/var/run/haproxy \
haproxy:latest
Примеры конфигураций
Базовая production-конфигурация
plugins:
haproxy:
enabled: true
socket_path: /run/haproxy/admin.sock
С HTTP-статистикой
plugins:
haproxy:
enabled: true
stats_url: http://127.0.0.1:8404/stats;csv
username: admin
password: ${HAPROXY_ADMIN_PASSWORD}
HA-кластер
plugins:
haproxy_master:
enabled: true
socket_path: /run/haproxy/master.sock
haproxy_backup:
enabled: true
socket_path: /run/haproxy/backup.sock
Ограничения
Текущие ограничения
- Нет метрик по отдельным URL — только агрегированная статистика
- Нет метрик stick-таблиц — таблицы ограничения частоты не отслеживаются
- Нет метрик ACL — статистика ACL не собирается
Масштабируемость
Протестировано с:
- 100 000+ одновременных соединений
- 10 000+ req/sec
- 100+ бэкендами
Производительность:
- Накладные расходы stats-сокета постоянны независимо от нагрузки
Чек-лист мониторинга
Критично:
- Сервер в состоянии DOWN
- Очередь backend > 0
- Ошибки соединений > 0
- Сессии на лимите
Важно: 5. Сбои проверок состояния 6. Ошибки ответов 7. Высокая частота повторов 8. Растущее время отклика
Пороги оповещений
server_status: == DOWN
backend_queue_current: > 0
backend_errors_conn_rate: > 0.01
frontend_sessions_percent: > 90
response_time_avg: > 1000
Следующие шаги
- Просмотреть все плагины
- Плагин Nginx — альтернатива-веб-сервер
- Плагин Varnish — слой кеширования
- Системные требования
- Обзор
- Требования
- Версия HAProxy
- Stats-сокет HAProxy
- Зависимости Python
- Доступ к сокету
- Конфигурация
- Базовая конфигурация
- С HTTP-страницей статистики
- Все параметры конфигурации
- Переменные окружения
- Настройка HAProxy
- Установка
- Включение stats-сокета
- Предоставление доступа к сокету
- Собираемые метрики
- Метрики frontend
- Метрики backend
- Метрики серверов
- Метаданные-метрики
- Метрики на дашборде
- Карточка обзора
- График трафика frontend
- График состояния backend
- Таблица статуса серверов
- График частоты сессий
- График частоты ошибок
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Проверка сокета HAProxy
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На HAProxy
- На агент
- Сценарии использования
- 1. Мониторинг состояния backend
- 2. Мониторинг очереди
- 3. Отслеживание сессий
- 4. Мониторинг частоты ошибок
- Лучшие практики
- 1. Настройте проверки состояния
- 2. Установите лимиты сессий
- 3. Включите лимиты очереди
- 4. Отслеживайте времена отклика
- 5. Используйте stick-таблицы для ограничения частоты
- 6. Включите логирование
- Тонкая настройка производительности HAProxy
- Настройка соединений
- Настройка буферов
- Конфигурация потоков (HAProxy 2.0+)
- Расширенная конфигурация
- Несколько экземпляров HAProxy
- HTTP-статистика (альтернатива сокету)
- Docker-контейнер
- Примеры конфигураций
- Базовая production-конфигурация
- С HTTP-статистикой
- HA-кластер
- Ограничения
- Текущие ограничения
- Масштабируемость
- Чек-лист мониторинга
- Пороги оповещений
- Следующие шаги