nginx 수신 컨트롤러를 사용하여 응답 로깅

nginx 수신 컨트롤러를 사용하여 응답 로깅

규제 목적으로 Kubernetes용 nginx 수신 컨트롤러를 사용할 때 전체 응답을 기록하려고 합니다. 여기 문서와 기타 답변을 보면 body_filter_by_lua_block 지시어를 사용하고 있습니다.

이것을 설정하기 위한 내 구성 맵은 다음과 같습니다.

apiVersion: v1
kind: ConfigMap
metadata:
 name: nginx-configuration
 namespace: ingress-nginx
 labels:
   app.kubernetes.io/name: ingress-nginx
   app.kubernetes.io/part-of: ingress-nginx
data:
 server-snippet: | 
   lua_need_request_body on;

   set $resp_body '';
   body_filter_by_lua_block {
       local resp_body = string.sub(ngx.arg[1], 1, 1000)
       ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
       if ngx.arg[2] then
           ngx.var.resp_body = ngx.ctx.buffered
       end
   }
 log-format-upstream: |
   Response body: $resp_body

요청이 수신되면 다음이 기록됩니다.

Response body:

$resp_body가 비어 있는 것 같습니다. 이것이 로깅보다 늦게 실행되는 body_filter_by_lua_block과 관련이 있을 수 있다는 의심이 들지만, 이는 콘텐츠 단계에서 실행되어야 하는 반면 로깅은 이후 로깅 단계에 있어야 합니다.

아마도 여기에 분명한 것이 빠졌을 것입니다. 하지만 대부분의 조합을 시도한 것 같습니다.

관련 정보