This article is available in French.
1. La page de statistiques native #
Une interface web légère pour surveiller vos serveurs.
Configuration du bloc Listen #
Il est recommandé d'écouter sur un port séparé et de sécuriser l'accès par mot de passe.
listen stats
bind *:8404
stats enable
stats uri /admin?stats
stats refresh 10s
stats auth admin:MonMotDePasse2. Intégration avec Prometheus #
Exposer les métriques pour une surveillance à long terme.
Utilisation du module prometheus-exporter #
Depuis la version 2.0, HAProxy peut exposer directement des métriques au format Prometheus sans agent tiers.
frontend stats
bind *:8405
http-request use-service prometheus-exporter if { path /metrics }3. Support natif OpenTelemetry (OTLP) #
HAProxy s'intègre désormais au standard de l'industrie pour les traces et les métriques.
Exportation vers un collecteur OTLP #
Depuis la version 2.9, HAProxy supporte nativement OpenTelemetry. Cette fonctionnalité permet d'envoyer des données de télémétrie directement vers un collecteur OTel (ou des outils comme Jaeger, Honeycomb ou Grafana Tempo) sans agent intermédiaire.
Ce que cela apporte :
- Standardisation : Un format unique pour les traces et les métriques, compatible avec tous les outils modernes.
- Traces distribuées : Permet de corréler une requête passant par HAProxy avec les traces de vos microservices pour un débogage de bout en bout.
- Richesse des données : Exportation de métadonnées précises sur le cycle de vie des requêtes HTTP.
# Exemple de configuration (nécessite le module otlp.so)
module-load /usr/lib/haproxy/otlp.so
otlp
endpoint my-otel-collector:4317
interval 5s
add-header x-otel-traceid4. Interpréter les indicateurs clés #
Quelles métriques surveiller en priorité ?
Sessions et Erreurs #
- Cur : Nombre de connexions actives.
- Rate : Nombre de nouvelles connexions par seconde.
- Check status : État de santé des serveurs backends.
- Errors (Req/Resp) : Taux d'erreurs 4xx ou 5xx.
Conclusion #
L'observabilité est la clé.
Anticiper les pannes #
Grâce aux statistiques, vous pouvez détecter un serveur qui ralentit avant qu'il ne tombe complètement en panne.
Mise en pratique : page de stats, Runtime API et Prometheus #
Activer et exploiter les statistiques.
Activer la page de statistiques #
listen stats
bind 127.0.0.1:8404
mode http
stats enable
stats uri /stats
stats refresh 5s
stats auth admin:MotDePasseFort
stats admin if LOCALHOST # permet de mettre un serveur en maintenance depuis l'UIcurl -s -u admin:MotDePasseFort "http://127.0.0.1:8404/stats;csv" | head -3
ssh -L 8404:127.0.0.1:8404 admin@lb1 # accéder à la page sans l'exposerRuntime API avec socat #
# global : stats socket /var/run/haproxy.sock mode 660 level admin
echo "show info" | sudo socat stdio /var/run/haproxy.sock | head
echo "show servers state" | sudo socat stdio /var/run/haproxy.sock
echo "set server app/web3 state maint" | sudo socat stdio /var/run/haproxy.sock # sortir un serveur
echo "set server app/web3 state ready" | sudo socat stdio /var/run/haproxy.sock
echo "set server app/web1 weight 50%" | sudo socat stdio /var/run/haproxy.sockExporter vers Prometheus #
frontend prometheus
bind *:8405
mode http
http-request use-service prometheus-exporter if { path /metrics }
no log# prometheus.yml
scrape_configs:
- job_name: haproxy
static_configs: [{ targets: ["lb1:8405", "lb2:8405"] }]
# PromQL utiles
sum by (proxy) (rate(haproxy_frontend_http_responses_total{code="5xx"}[5m]))
haproxy_backend_up == 0
haproxy_backend_current_queue > 0My progress
Sign in to track your progress and take notes. Sign in