Enregistrer tout le corps POST avec HAProxy?

12

J'essaie de détecter certains problèmes liés à la façon dont un client javascript interagit avec un serveur d'applications et je voudrais voir l'intégralité de la charge utile http (en-têtes, corps et tout) qui est transmise d'avant en arrière.

Il se trouve qu'il y a déjà un serveur haproxy devant le serveur d'applications, donc j'espérais pouvoir utiliser haproxy pour fournir les journaux pertinents. Évidemment, ce serait mauvais à activer en production, mais j'ai un clone de tout l'environnement qui peut être isolé pendant que je fais ce débogage.

Existe-t-il un moyen d'obtenir un haproxy pour consigner l'intégralité de la charge utile http pour les requêtes POST envoyées à un serveur principal particulier?

Peter Groves
la source

Réponses:

3

Haproxy n'a pas la possibilité de consigner le contenu POST ou les corps HTTP.

Utilisez plutôt Wireshark.

long cou
la source
Merci. J'ai fini par voir le POST dans les outils de développement de Chrome.
Peter Groves
Ce n'est plus le cas. Voir le post de hack_on ci-dessous.
PMV
18

Apparemment, depuis la version 1.6.0 (octobre 2015), vous pouvez maintenant. Il y a une nouvelle directive:

option http-buffer-request

Que vous incluez dans le front-end ou le back-end pour permettre à HAProxy d'accéder au corps. Et vous utilisez req.body pour y accéder. Voici un résumé de la configuration que j'ai utilisée:

global
        log     127.0.0.1 local0
        debug
        maxconn 2048
        ulimit-n 8012
#        ...

defaults
    mode http
    option httplog
    log-format frontend:%f/%H/%fi:%fp\ GMT:%T\  body:%[capture.req.hdr(0)]\ request:%r
    option dontlognull
#   ...

frontend www-http
   log global
   option http-buffer-request
# id=0 to store body for logging
   declare capture request len 40000
   bind 7.7.7.7:8007 
   http-request capture req.body id 0

   default_backend www-backend

backend www-backend
    mode http
    option forwardfor
#   ...
hack_on
la source
Salut, existe-t-il un moyen de consigner ce req.body dans un fichier différent et pas le même haproxy.log par défaut?
Shoaib Khan
Salut. Comment enregistrer un corps de demande et de réponse dans un seul fichier journal?
Yuriy Tigiev