我在haproxy设置上使用log-format来解决一些问题。首先,我有多个代理设置,这意味着:
请求 - >客户代理 - >中间代理 - >应用
关于在客户端代理上的这个我正在添加:
unique-id-header X-Unique-ID
,此值在日志中表示为:
log-format%ci:%cp \ [%t] \%f \%b /%s \%Tq /%Tw /%Tc /%Tr /%Tt \%ST \%B \ %CC \%CS \%tsc \%ac /%fc /%bc /%sc /%rc \%sq /%bq \ {%hrl} \ {%hsl} \%{+ Q} r \ {%ID}
这很棒。另一方面,在代理中间我可以从前端的头部获取此值:
捕获请求标头X-Unique-ID len 200
现在在这个代理(代理中)我有这样的条件:
acl uniq_header_exist hdr_cnt(X-Unique-ID)eq 0
http-request set-header X-Unique-ID%{+ X} o \%ci:%cp_%fi:%fp_%Ts_%rt:%pid if uniq_header_exist
(完成这项工作,所以我可以添加uuid,如果不存在 - 很棒),日志代表如下:
log-format%ci:%cp \ [%t] \%f \%b /%s \%Tq /%Tw /%Tc /%Tr /%Tt \%ST \%B \ %CC \%CS \%tsc \%ac /%fc /%bc /%sc /%rc \%sq /%bq \ {%hrl} \ {%hsl} \%{+ Q} r \ [ID =%[capture.req.hdr(2)]]
但我无法做任何可能的事情:
if X-Unique-ID exist then use:
log-format XXXXX
else
log-format YYYY
有什么建议吗?
或者,如果您有一些示例设置,我们如何添加 haproxy uuid标头(如果存在)或者如果不存在以及如何记录它。使用一个前端代理时,一切都非常简单。
感谢您的帮助!