RousselTMLEARNING

Article · HAProxy: from discovery to expertise

The Statistics Dashboard

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:MonMotDePasse

2. 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-traceid

4. 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'UI
curl -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'exposer

Runtime API avec socat #

Statistiques via la Runtime API
Le champ status indique UP, DOWN ou MAINT pour chaque serveur.
# 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.sock

Exporter 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 > 0

📄 Monitoring et Statistiques dans HAProxy ↗

My progress

  • ⏱ Estimated time : ≈ 15 min

Sign in to track your progress and take notes. Sign in

✉️ Ask a question