nginx request_id 사용

nginx 1.11.0 부터 $request_id variable 를 제공해서 요청구분이 가능하다고 한다.
액세스 로그 포맷으로 request_id 를 추가해서 보면

log_format ysoftman escape=json '{'
'"request": "$request",'
'"request_id": "$request_id"'
'}'

다음과 같이 32자리의 hexdecimal = 16bytes 값으로 표현된다.
"request_id": "444535f9378a3dfa1b8604bc9e05a303"

https://github.com/nginx/nginx/blob/84d1e7de0c46c1eb88d53b7e33bab7459a7fe94c/src/http/ngx_http_variables.c
에 보면 $request_id 는 4개의 ngx_random() 으로 만들어 지고 있다.

요청 시간, nginx pid 등의 요소는 들어가 있지 않는데, 혹시 충돌이 발생하지 않을까 염려가 되어 찾아보니 나와 같은 의문을 갖는 사람이 stackoverflow 에 질문했다.
https://stackoverflow.com/questions/45025852/can-request-id-of-nginx-be-unique-identifier

답변은 다음 링크로 16바이트 2^128 으로 무지 큰수라 충돌 가능성의 희박하다고 하니 그냥 쓰면 될듯 싶다.
https://security.stackexchange.com/questions/35392/what-is-the-collision-chance-of-a-128-bit-hashing-function-if-it-is-always-fed-w/35394#35394


# 참고
https://www.nginx.com/blog/application-tracing-nginx-plus/

comments:

댓글 쓰기