Protokollierung des gesamten POST-Körpers mit HAProxy?

11

Ich versuche, einige Probleme mit der Interaktion eines Javascript-Clients mit einem Anwendungsserver aufzuspüren, und möchte die gesamte http-Nutzlast (Header, Body und alles) sehen, die hin und her übertragen wird.

Es kommt also vor, dass sich bereits ein Haproxy-Server vor dem Anwendungsserver befindet, und ich hatte gehofft, Haproxy verwenden zu können, um die relevanten Protokolle bereitzustellen. Natürlich wäre es schlecht, dies in der Produktion einzuschalten, aber ich habe einen Klon der gesamten Umgebung, der während dieses Debuggens isoliert werden kann.

Gibt es eine Möglichkeit, Haproxy dazu zu bringen, die gesamte http-Nutzlast für POST-Anforderungen zu protokollieren, die an einen bestimmten Backend-Server gesendet werden?

Peter Groves
quelle

Antworten:

3

Haproxy kann keine POST-Inhalte oder HTTP-Körper protokollieren.

Verwenden Sie stattdessen Wireshark.

langer Hals
quelle
Vielen Dank. Am Ende konnte ich den POST in den Entwicklertools von Chrome sehen.
Peter Groves
Dies ist nicht mehr der Fall. Siehe den Beitrag von hack_on unten.
PMV
17

Anscheinend seit Version 1.6.0 (Oktober 2015) können Sie jetzt. Es gibt eine neue Richtlinie:

option http-buffer-request

Das fügen Sie in das Front-End oder Back-End ein, um HAProxy Zugriff auf den Körper zu gewähren. Und Sie verwenden req.body, um darauf zuzugreifen. Hier ist eine Zusammenfassung der von mir verwendeten Konfiguration:

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
quelle
Hallo, gibt es eine Möglichkeit, diese req.body in einer anderen Datei und nicht in derselben Standard-haproxy.log zu protokollieren?
Shoaib Khan
Hallo. Wie protokolliere ich einen Anforderungs- und Antworttext in einer Protokolldatei?
Yuriy Tigiev