HAProxy 2.0 - Mise en Place Du Traffic Mirroring
Installation du binaire
Le binaire de pour le mirroring n’est pas fourni de base, il faut donc le compiler l’installer
# From https://www.haproxy.com/fr/blog/haproxy-traffic-mirroring-for-real-world-testing/
$ sudo apt update
# Lib necessaires
$ sudo apt install -y autoconf automake build-essential git libcurl4-openssl-dev libev-dev libpthread-stubs0-dev pkg-config
# Récuperation de la source
$ git clone https://github.com/haproxytech/spoa-mirror
$ cd spoa-mirror
# Init build script
$ ./scripts/bootstrap
$ ./configure
# compile
$ make all
$ sudo cp ./src/spoa-mirror /usr/local/bin/
Test de fonctionnement
Pour tester le fonctionnement, lancer le programme avec la ligne de commande suivante:
spoa-mirror --runtime 0 --mirror-url https://test.url --logfile /var/log/haproxy-mirror.log
Si le programme ne rend pas directement le main, tout va bien, n’oubliez pas d’enlever le fichier /var/log/haproxy-mirror.log. Sinon vous pouvez utiliser le fichier de log /var/log/haproxy-mirror.log pour vous aider à comprendre d’où vient le probléme.
Configuration avec haproxy
Gestion du programme par haproxy
Nous allons utiliser la fonction de lancement de programme externe de HAProxy afin de gerer le processus spoa-mirror. Il faut éditer le fichier de configuration de HAProxy.
program mirror
command spoa-mirror --runtime 0 --mirror-url https://url.mirror
Attention, pour que la section program marche dans haproxy, il faut que le serveur fonctionne en mode master worker. ex:
# master-worker required for `program` section
# enable here or start with -Ws
master-worker
mworker-max-reloads 3
Quand le serveur est redemarré, on doit voir le process managé par haproxy.
Main PID: 22796 (haproxy)
CGroup: /system.slice/haproxy.service
├─22796 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
├─22798 spoa-mirror --runtime 0 --mirror-url https://test.url
└─22799 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
configuration de HAProxy pour le mirroring
Pour activer le mirroring il faut rajouter un filtre SPOE dans la configuration.
# ajout de la conf dans le frontend
frontend main_lb
filter spoe engine mirror config /etc/haproxy/mirror.conf
# Creation du backend pour le mirror
backend mirroragents
mode tcp
balance roundrobin
timeout connect 5s
timeout server 5s
server agent1 localhost:12345
Il faut ensuite créer un fichier de configuration du filtre dans /etc/haproxy/mirror.conf. Dans cet exemple, je limite la réplication à l’URL API.
# même nom que dans le filter
[mirror]
spoe-agent mirror
log global
messages mirror
# Indique le backend a utiliser configuré dans HAProxy
use-backend mirroragents
timeout hello 500ms
timeout idle 5s
timeout processing 5s
spoe-message mirror
args arg_method=method arg_path=path arg_ver=req.ver arg_hdrs=req.hdrs_bin arg_body=req.body
# Limite la réplication a une URL spécifique
event on-frontend-http-request if { path_beg /api }
Il suffit de reload HAProxy pour que la configuration soit prise en compte.
Pour verifier que tout fonctionne, utilisez l’URL et regardez si vous voyez passer des logs avec le prefix SPOE dans le fichier de log de HAProxy.
grep SPOE /var/log/haproxy.log