Envoy打印请求和响应Body

1、添加Lua Filter实现对请求和响应的拦截

参考:https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#dynamic-metadata-object-api

利用Lua脚本提取请求和响应Body信息,并设置到dynamicMetadata中。Lua脚本内容如下:

function envoy_on_request(request_handle)
  local request_body_buffer = request_handle:body()
  if(request_body_buffer == nil)
  then
    request_handle:streamInfo():dynamicMetadata():set("envoy.lua", "requestBody", "-")
  else
    local request_body_data = request_body_buffer:getBytes(0, request_body_buffer:length())
    request_handle:streamInfo():dynamicMetadata():set("envoy.lua", "requestBody", request_body_data)
  end
end

function envoy_on_response(response_handle)
  local response_body_buffer = response_handle:body()
  if(response_body_buffer == nil)
  then
    response_handle:streamInfo():dynamicMetadata():set("envoy.lua", "responseBody", "-")
  else
    local response_body_data = response_body_buffer:getBytes(0, response_body_buffer:length())
    response_handle:streamInfo():dynamicMetadata():set("envoy.lua", "responseBody", response_body_data)
  end
end

2、利用Envoy File access log实现对dynamicMetadata内容的打印

参考:https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-default-format

日志打印设置如下:

[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %DURATION% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" %DYNAMIC_METADATA(envoy.lua)%

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值