什么?【nginx】记录response body和header到access.log 不会?

1 背景

在项目中,需要记录经过网关的请求信息到日志,供loki采集,以便后续的统计分析工作。

需要记录请求的request_body, request_header, response_body, response_header数据到access.log。

2 配置

2.1 记录请求url

配置nginx配置文件default.conf ,使用nginx内置变量 h o s t 和 host 和 hostrequest即可获得url数据

log_format main escape=json  '{'
                                '"host": "$host",'
                                '"request": "$request"'
                                '}' ;
access_log  /var/log/nginx/access.log  main;

2.2 记录请求body和header
① body:配置中打开lua_need_body_request on 即可将request_body 记录到$request_body变量

② header:header数据需要在header_filter_by_lua_block阶段中手动赋值,读取请求中的header信息赋值给$request_header 变量

修改后配置文件如下:

log_format main escape=json  '{'
                                '"host": "$host",'
                                '"request": "$request",'
                                '"request_header": "$request_header",'
                                '"request_body": "$request_body"'
                                '}' ;
access_log  /var/log/nginx/access.log  main;
 
server {
    # 记录请求body
    lua_need_request_body   on;
    # 记录请求header
    set $response_header     "";
    header_filter_by_lua_block     {
        json = require "cjson"
        ngx.var.request_header = json.encode(ngx.req.get_headers())
    }
}

3. 结果

查看loki中数据,可以看到access.log中数据如下
什么?【nginx】记录response body和header到access.log 不会?_第1张图片

你可能感兴趣的:(nginx,junit,java)