Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Мониторинг и Stats
monitoring_stats

Мониторинг и Stats

Prometheus exporter, Grafana дашборды, HAProxy Dataplane API

Мониторинг и Stats в HAProxy

Prometheus exporter, Grafana дашборды, HAProxy Dataplane API, stats страница.

#Stats страница

#Базовая настройка

listen stats bind *:8404 stats enable stats uri / stats refresh 5s stats admin if LOCALHOST

Параметры:

  • stats enable — включить stats страницу
  • stats uri / — путь к странице
  • stats refresh 5s — автообновление каждые 5s
  • stats admin if LOCALHOST — admin кнопки только с localhost

#Аутентификация на stats

listen stats bind *:8404 stats enable stats uri / stats refresh 5s stats realm HAProxy\ Statistics stats auth admin:password stats admin if TRUE

Доступ:

  • URL: http://haproxy:8404/
  • Логин: admin
  • Пароль: password

#Stats только для определённых IP

listen stats bind *:8404 stats enable stats uri / acl allowed src 10.0.0.0/8 192.168.0.0/16 http-request deny if !allowed

#Stats Socket

#Настройка socket

global stats socket /var/run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s

Параметры:

  • mode 660 — права доступа
  • level admin — уровень доступа (admin, operator, user)
  • expose-fd listeners — передача FD для zero-downtime reload

#Команды stats socket

# Показать статус серверов echo "show servers state" | socat /var/run/haproxy/admin.sock stdio # Показать статистику echo "show stat" | socat /var/run/haproxy/admin.sock stdio # Отключить сервер echo "disable server backend/server1" | socat /var/run/haproxy/admin.sock stdio # Включить сервер echo "enable server backend/server1" | socat /var/run/haproxy/admin.sock stdio # Изменить вес echo "set server backend/server1 weight 50" | socat /var/run/haproxy/admin.sock stdio # Graceful shutdown сервера echo "shutdown server backend/server1" | socat /var/run/haproxy/admin.sock stdio # Clear counters echo "clear counters" | socat /var/run/haproxy/admin.sock stdio

#Интерактивный режим

socat /var/run/haproxy/admin.sock readline > show info > show stat > quit

#Prometheus Exporter

#HAProxy 2.x+ встроенный exporter

global # Включить Prometheus exporter prometheus-exporter enable prometheus-exporter rules # Метрики процесса - type: process # Метрики frontend - type: frontend # Метрики backend - type: backend # Метрики server - type: server

Endpoint: http://haproxy:8404/metrics

#Настройка scrape в Prometheus

# prometheus.yml scrape_configs: - job_name: 'haproxy' static_configs: - targets: ['haproxy1:8404', 'haproxy2:8404'] scrape_interval: 5s metrics_path: /metrics

#Основные метрики

# Процесс
haproxy_process_uptime_seconds
haproxy_process_cpu_usage_percent
haproxy_process_memory_bytes

# Frontend
haproxy_frontend_current_sessions
haproxy_frontend_requests_total
haproxy_frontend_responses_total

# Backend
haproxy_backend_current_sessions
haproxy_backend_current_queue
haproxy_backend_responses_total

# Server
haproxy_server_current_sessions
haproxy_server_health_check_status
haproxy_server_responses_total

#HAProxy Exporter (отдельный сервис)

docker run -d \ --name haproxy-exporter \ -p 9101:9101 \ prometheuscommunity/haproxy-exporter \ --haproxy.scrape-uri="http://haproxy:8404/stats;csv"

Prometheus config:

scrape_configs: - job_name: 'haproxy' static_configs: - targets: ['haproxy-exporter:9101']

#Grafana Дашборды

#Импорт готового дашборда

  1. Открыть Grafana
  2. Dashboards → Import
  3. ID: 2428 (HAProxy)
  4. Выбрать Prometheus datasource

#Custom дашборд

Панели:

#Requests per Second

rate(haproxy_frontend_requests_total[1m])

#Response Time (p95)

histogram_quantile(0.95, rate(haproxy_server_response_time_seconds_bucket[5m]))

#Active Connections

haproxy_frontend_current_sessions

#Backend Health

haproxy_server_health_check_status

#Error Rate

rate(haproxy_server_responses_total{code=~"5.."}[5m]) / rate(haproxy_server_responses_total[5m]) * 100

#Dataplane API

#Установка

# Docker docker run -d \ --name haproxy-dataplane \ -p 5555:5555 \ -v /etc/haproxy:/etc/haproxy \ -v /var/run/haproxy:/var/run/haproxy \ haproxytech/dataplane-api \ --config-file /etc/haproxy/haproxy.cfg

#Базовая настройка

global # Включить Dataplane API lua-load /usr/share/haproxy/dataplaneapi/init.lua

#API Endpoints

# Получить все backend'ы curl http://localhost:5555/services/haproxy/configuration/backends # Создать backend curl -X POST \ -H "Content-Type: application/json" \ -d '{"name": "new_backend", "balance_algorithm": "roundrobin"}' \ http://localhost:5555/services/haproxy/configuration/backends # Получить серверы backend curl http://localhost:5555/services/haproxy/configuration/backends/web_servers/servers # Добавить сервер curl -X POST \ -H "Content-Type: application/json" \ -d '{"name": "web3", "address": "192.168.1.12", "port": 8080}' \ http://localhost:5555/services/haproxy/configuration/backends/web_servers/servers # Изменить вес сервера curl -X PUT \ -H "Content-Type: application/json" \ -d '{"weight": 75}' \ http://localhost:5555/services/haproxy/configuration/backends/web_servers/servers/web1 # Получить транзакцию curl http://localhost:5555/services/haproxy/configuration/transactions # Создать транзакцию curl -X POST http://localhost:5555/services/haproxy/configuration/transactions # Commit транзакции curl -X PUT http://localhost:5555/services/haproxy/configuration/transactions/123

#Аутентификация

# С basic auth curl -u admin:password \ http://localhost:5555/services/haproxy/configuration/backends # С token curl -H "Authorization: Bearer token" \ http://localhost:5555/services/haproxy/configuration/backends

#Alerting

#Prometheus Alertmanager

# alertmanager.yml groups: - name: haproxy rules: - alert: HAProxyServerDown expr: haproxy_server_health_check_status == 2 for: 1m labels: severity: critical annotations: summary: "HAProxy server {{ $labels.server }} is DOWN" description: "Server {{ $labels.server }} has been DOWN for more than 1 minute" - alert: HAProxyHighErrorRate expr: | rate(haproxy_server_responses_total{code=~"5.."}[5m]) / rate(haproxy_server_responses_total[5m]) * 100 > 5 for: 5m labels: severity: warning annotations: summary: "HAProxy high error rate" description: "Error rate is {{ $value }}%" - alert: HAProxyHighResponseTime expr: | histogram_quantile(0.95, rate(haproxy_server_response_time_seconds_bucket[5m])) > 1 for: 5m labels: severity: warning annotations: summary: "HAProxy high response time" description: "p95 response time is {{ $value }}s"

#Full Example: Production monitoring

global # Stats socket stats socket /var/run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s # Prometheus exporter (HAProxy 2.x+) prometheus-exporter enable prometheus-exporter rules - type: process - type: frontend - type: backend - type: server # Stats страница listen stats bind *:8404 stats enable stats uri / stats refresh 5s stats realm HAProxy\ Statistics stats auth admin:strong_password stats admin if LOCALHOST # Доступ только с internal network acl internal src 10.0.0.0/8 192.168.0.0/16 http-request deny if !internal # Metrics endpoint для Prometheus frontend metrics bind *:8405 monitor-uri /metrics http-request use-service prometheus-exporter if { path /metrics }

#Troubleshooting

#Проверка stats socket

# Проверка существования socket ls -la /var/run/haproxy/admin.sock # Проверка прав stat /var/run/haproxy/admin.sock # Тест команды echo "show info" | socat /var/run/haproxy/admin.sock stdio

#Проверка Prometheus metrics

# Получить метрики curl http://haproxy:8404/metrics # Проверка конкретной метрики curl http://haproxy:8404/metrics | grep haproxy_server_health

#Проверка Dataplane API

# Health check curl http://localhost:5555/health # Версия API curl http://localhost:5555/services/haproxy/version

#Best Practices

#Безопасность stats

# ✅ Хорошо stats auth admin:strong_password acl internal src 10.0.0.0/8 http-request deny if !internal # ❌ Плохо # stats auth admin:admin # Слабый пароль # bind *:8404 # Без аутентификации

#Prometheus scrape interval

# ✅ Хорошо (баланс) scrape_interval: 5s # ❌ Слишком часто (нагрузка) # scrape_interval: 1s # ❌ Слишком редко (пропуск алертов) # scrape_interval: 60s

#Alerting пороги

# ✅ Хорошо # Server DOWN 1m → critical # Error rate > 5% 5m → warning # Response time p95 > 1s 5m → warning # ❌ Слишком чувствительно # Server DOWN 10s → critical # Ложные срабатывания # ❌ Слишком медленно # Server DOWN 10m → critical # Пропуск инцидентов

Далее: Тюнинг производительности