Prometheus exporter, Grafana дашборды, HAProxy Dataplane API
Prometheus exporter, Grafana дашборды, HAProxy Dataplane API, stats страница.
listen stats
bind *:8404
stats enable
stats uri /
stats refresh 5s
stats admin if LOCALHOSTПараметры:
stats enable — включить stats страницуstats uri / — путь к страницеstats refresh 5s — автообновление каждые 5sstats admin if LOCALHOST — admin кнопки только с localhostlisten stats
bind *:8404
stats enable
stats uri /
stats refresh 5s
stats realm HAProxy\ Statistics
stats auth admin:password
stats admin if TRUEДоступ:
http://haproxy:8404/adminpasswordlisten stats
bind *:8404
stats enable
stats uri /
acl allowed src 10.0.0.0/8 192.168.0.0/16
http-request deny if !allowedglobal
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# Показать статус серверов
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 stdiosocat /var/run/haproxy/admin.sock readline
> show info
> show stat
> quitglobal
# Включить Prometheus exporter
prometheus-exporter enable
prometheus-exporter rules
# Метрики процесса
- type: process
# Метрики frontend
- type: frontend
# Метрики backend
- type: backend
# Метрики server
- type: serverEndpoint: http://haproxy:8404/metrics
# 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
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']Панели:
rate(haproxy_frontend_requests_total[1m])histogram_quantile(0.95, rate(haproxy_server_response_time_seconds_bucket[5m]))haproxy_frontend_current_sessionshaproxy_server_health_check_statusrate(haproxy_server_responses_total{code=~"5.."}[5m])
/
rate(haproxy_server_responses_total[5m]) * 100# 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.cfgglobal
# Включить Dataplane API
lua-load /usr/share/haproxy/dataplaneapi/init.lua# Получить все 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# 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"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 }# Проверка существования socket
ls -la /var/run/haproxy/admin.sock
# Проверка прав
stat /var/run/haproxy/admin.sock
# Тест команды
echo "show info" | socat /var/run/haproxy/admin.sock stdio# Получить метрики
curl http://haproxy:8404/metrics
# Проверка конкретной метрики
curl http://haproxy:8404/metrics | grep haproxy_server_health# Health check
curl http://localhost:5555/health
# Версия API
curl http://localhost:5555/services/haproxy/version# ✅ Хорошо
stats auth admin:strong_password
acl internal src 10.0.0.0/8
http-request deny if !internal
# ❌ Плохо
# stats auth admin:admin # Слабый пароль
# bind *:8404 # Без аутентификации# ✅ Хорошо (баланс)
scrape_interval: 5s
# ❌ Слишком часто (нагрузка)
# scrape_interval: 1s
# ❌ Слишком редко (пропуск алертов)
# scrape_interval: 60s# ✅ Хорошо
# Server DOWN 1m → critical
# Error rate > 5% 5m → warning
# Response time p95 > 1s 5m → warning
# ❌ Слишком чувствительно
# Server DOWN 10s → critical # Ложные срабатывания
# ❌ Слишком медленно
# Server DOWN 10m → critical # Пропуск инцидентовИзучим тюнинг производительности: kernel params, ulimits, threading, maxconn.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.