nginx ingress コントローラを使用して応答をログに記録する

nginx ingress コントローラを使用して応答をログに記録する

規制上の理由から、Kubernetes 用の nginx イングレス コントローラーを使用するときに、応答全体をログに記録しようとしています。ドキュメントとここでの他の回答を見ると、body_filter_by_lua_block ディレクティブを使用しているようです。

これを設定するための私のconfigmapは次のようになります

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 に関連しているのではないかと疑っていますが、これはコンテンツ フェーズで実行されるべきであり、ログ記録は後のログ記録フェーズで実行されるべきです。

おそらく何か明らかなことを見逃しているのでしょうが、ほとんどの組み合わせを試したと思います。

関連情報