RousselTMLEARNING

Proxy & réseau

Monitoring et Statistiques dans HAProxy

Comment activer le tableau de bord de statistiques natif et exposer des métriques pour Prometheus.

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

Articles liés

Anatomie de la configuration HAProxy, Clustering et Haute Disponibilité

Comprendre la structure d'un fichier haproxy.cfg : sections global, defaults, frontend (haute performance), b…

HAProxy dans Kubernetes : L'Ingress Controller Haute Performance

Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, options de mise…

Nouveautés HAProxy : OpenTelemetry, JWT Natif, et Optimisations de Performance

Explorez les dernières innovations de HAProxy : prise en charge native d'OpenTelemetry pour l'observabilité, …

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !