Goreplay, un utilitaire diablement pratique à essayer (et adopter)

closeCet article a été publié il y a 5 ans 2 mois 3 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Dans le cadre de tests d’une nouvelle plate-forme pour un client, j’ai voulu observer le comportement en temps réel avec du trafic public existant. En cherchant mes options je suis tombé sur goreplay, et je ne peux que vous inviter à l’essayer.

Comme son nom l’indique, Goreplay est un utilitaire écrit en go. Comme tous les outils écrits dans ce langage, il est distribué sous la forme d’un unique binaire ce qui le rend à la fois simple à installer et chiant à maintenir à jour de manière automatique. M’enfin pour du test ponctuel ce n’est pas la mort.

Goreplay fonctionne un peu comme tcpdump, en ce sens qu’il capture le trafic, il est toutefois très orienté Web puisqu’on peut assaisonner le trafic capturé pour le rejouer avec des contraintes supplémentaires. Dans mon cas, les vhosts de la nouvelle plate-forme sont protégés par authentification http basique, j’ai donc indiqué à goreplay d’injecter le header « Authorization » contenant les bonnes informations.

On peut rejouer le trafic en temps réel ou l’enregistrer dans un fichier et le rejouer à l’envi. Pour ma part la comparaison dans le même contexte temporel me paraissait intéressante j’ai donc rejoué en temps réel. Pour dire à quel point c’est facile à utiliser, il ne m’a fallu que quelques minutes pour obtenir la routine suivante :

output-http permet d’indiquer la destination, http-original-host permet de conserver le domaine dans les requêtes, et http-set-header, hein, pas besoin de vous faire une photo. Pour le reste, je vous laisse fouiller la documentation pour trouver votre bonheur.

Attention cependant : si goreplay sait envoyer le trafic sur une destination https, par nature il ne sait pas capturer le même trafic à la source HTTPS puisque il est encore chiffré à ce moment-là. Il n’y a pas de solution magique dans ce cas, il faut que la terminaison soit effectuée en amont (reverse proxy, load balancer?), ensuite seulement il peut être capturé.

Ses capacités sont intéressantes même si j’ai rencontré quelques petits bugs. Le programme s’arrête quand il n’arrive pas à interpréter une requête pour la rejouer sur la cible. Le fait est que le numéro de version montre bien que le logiciel n’est pas encore parfait, il faut toutefois le suivre de près, fouiller les issues, bref, c’est une solution intéressante et peu coûteuse pour analyser le comportement d’une plate-forme sans passer par un complexe test de montée en charge qui ne peut que simuler le comportement utilisateur d’un point de vue réseau. Il ne teste que la partie réseau ceci dit, il vous faudra d’autres outils pour doser la fiabilité au sein du navigateur