使用 HAProxy 记录整个 POST 主体?

使用 HAProxy 记录整个 POST 主体?

我正在尝试追踪 javascript 客户端与应用程序服务器交互方式的一些问题,并希望看到来回传递的整个 http 有效负载(标头、正文和所有内容)。

碰巧的是,应用服务器前面已经有一个 haproxy 服务器,所以我希望能够使用 haproxy 提供相关日志。显然,在生产中启用它会很糟糕,但我有一个整个环境的克隆,可以在进行调试时将其隔离。

有没有办法让 haproxy 记录发往特定后端服务器的 POST 请求的整个 http 有效负载?

答案1

Haproxy 没有记录 POST 内容或 HTTP 主体的功能。

改用 Wireshark。

答案2

显然从 1.6.0 版(2015 年 10 月)开始,您就可以这样做了。有一条新指令:

option http-buffer-request

您将其包含在前端或后端中,以便 HAProxy 可以访问主体。然后使用 req.body 来访问它。以下是我使用的配置的摘要:

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
#   ...

答案3

这可能会有所帮助,请确保保持行的顺序相同。我在前端和监听块中测试了它,我不知道这在后端会如何工作:

    ## ------ LOG ----------
    #no log  ####this is real line USE THIS to disable log!!! when commented allows log
    mode http
    option http-buffer-request
    declare capture request len 40000000
    http-request capture req.body id 0
    capture request header user-agent len 150
    capture request header Host len 15
    log-format '{"srcIP":"%[src]","backend":"%s","bIP":"%si","bPORT":"%sp","method":"%[capture.req.method]","user-agent":"%[capture.req.hdr(1),json(utf8s)]","uri":"%[capture.req.uri]","body":"%[capture.req.hdr(0)]"}'

    ## --------------------

这不完全是您要求的,因为它不仅会记录所有 POST 请求,而且您以后还可以在日志文件中查找“POST”,因为它将请求方法保存在日志中。

相关内容