O Haproxy não possui um recurso para registrar o conteúdo do POST ou os corpos HTTP.
Use o Wireshark.
Estou tentando rastrear alguns problemas com a maneira como um cliente javascript está interagindo com um servidor de aplicativos e gostaria de ver toda a carga útil HTTP (cabeçalhos, corpo e tudo) que está sendo transmitida para frente e para trás.
Acontece que já existe um servidor haproxy na frente do servidor de aplicativos, então eu esperava poder usar o haproxy para fornecer os logs relevantes. Obviamente isso seria ruim para ligar na produção, mas eu tenho um clone de todo o ambiente que pode ser isolado enquanto eu faço essa depuração.
Existe uma maneira de fazer com que o haproxy registre toda a carga HTTP para solicitações de POST que vão para um servidor de back-end específico?
Aparentemente, desde a versão 1.6.0 (outubro de 2015), você pode agora. Existe uma nova diretiva:
option http-buffer-request
Que você inclua no front-end ou no back-end para fornecer acesso HAProxy ao corpo. E você usa req.body para acessá-lo. Aqui está um resumo da configuração que usei:
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
# ...
Tags haproxy