2017-10-02 12 views
0

だから私は、私たちのフロントエンドのロードバランサでユニークなリクエストIDを設定し、いくつかの既存のコードを持っている:haproxyのHTTPリクエストセットヘッダーと独自のHTTPリクエストIDを設定

unique-id-format %{+X}o\ %Ts_%ci_%cp_%fi_%fp_%rt_%pid 
unique-id-header X-Request-Id 
log-format %ci\ %r\ %ST\ %B\ %Tr\ %Tt\ %s\ %ID\ %hr 

予想通り、この作品 - X-Request-Idは期待どおりに作成され、ログに記録され、バックエンドに渡されます。問題はありません。しかし、このリクエストIDの生成を条件付きにしたいと思います。問題ありません - 私はちょうど一意-IDヘッダの代わりにHTTP要求セットヘッダを使用することができなければならない:

unique-id-format %{+X}o\ %Ts_%ci_%cp_%fi_%fp_%rt_%pid 
http-request set-header X-Request-Id %ID 
log-format %ci\ %r\ %ST\ %B\ %Tr\ %Tt\ %s\ %ID\ %hr 

(これらはfront_endセクションの全てです)。 Maddeninglyしかし、%IDはこの方法で使用すると空白と評価されるようです。私は%IDを使用する代わりにハードコードされた値を使用することができ、それは動作します。別のログフィールド(%Tsなど)を使用することもできます。ただし、%IDでは動作しません。どんな手がかりも助けになるでしょう - 事前に感謝します。

EDIT:バージョンは、私はあなたが期待するような本と%ないIDが働いていなかった場合、私は条件付きでヘッダーを設定したかったという点で、まったく同じ問題があった1.6.11

答えて

0

です。私は%[unique-id]を使用することを提案するソリューションを見つけましたが、それはバージョン1.7+でしかないことが判明しました。私はその後1.7にアップグレードし、今は完全に動作します。

unique-id-format %{+X}o\ %pid%ci%cp%fi%fp%Ts%ms%rt 
acl cid_exists req.hdr(X-Correlation-ID) -m found 
http-request set-header X-Correlation-ID %[unique-id] unless cid_exists 
http-request capture hdr(X-Correlation-ID) len 64 
log-format "%ci:%cp [%tr] %ft %b/%s %Th/%Ti/%TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %{+Q}r %[capture.req.hdr(0)]" 

捕捉X-相関-IDヘッダは、既存のCIDまたは欠落している場合、このロードバランサ自体を作成したいずれかを含有します。

ユニークIDのHTTPサンプルはreferenced hereです。

関連する問題