2017-10-02 4 views
0

그래서 우리의 프런트 엔드 부하 분산 장치에 고유 요청 ID를 설정하는 몇 가지 기존 코드가 :이 예상 작품으로haproxy의와 고유 http 요청 ID를 설정 HTTP 요청 설정 헤더

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와는 작동하지 않습니다. 모든 단서가 도움이 될 것입니다 - 미리 감사드립니다.

편집 : 버전

답변

0

1.6.11은 내가 예상대로되지 현재와 % ID가 작동하지 않는 경우 조건부 헤더를 설정하고 싶어한다는 점에서 동일한 문제를 가지고있다. % [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-Correlation-ID 헤더에는 기존 CID 또는 누락 된 경우이로드 밸런서가 생성 한 CID가 포함되어 있습니다.

고유 ID HTTP 샘플은 referenced here입니다.