1、收集request_body:

对于get请求,request_body始终是空,对于post请求,request_body是参数信息。request_body的获取有两种方式:

  • 使用nginx ngx_http_core模块的$request_body;
  • openresty中使用lua脚本。
# 首先修改配置文件,我这里采集的日志只有request_body字段
vim /opt/nginx/conf/nginx.conf
log_format  main    $request_body;access_log  logs/access.log  main;location / {root   /opt/nginx/html;# 以下为添加内容fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME       $document_root$fastcgi_script_name;include fastcgi_params;
}

使用post发送数据,就可以在nginx日志中查看到请求参数了。

curl -XPOST "http://10.10.10.13/test.php?id=123" -H "X-Forwarded-For: 10.10.10.5" -H "Referer: http://10.10.10.13" --data "AAAAAAAAAAAAAAAAAA"

使用ngx_http_core模块收集日志有没有办法限制request_body的长度呢?

1)可以在配置文件中使用client_max_body_size 1k; 但是这个配置是不允许用户上传超过1K大小的body内容,如果用户需要上传图片,业务可能就无法正常运行,所以不推荐使用此种方法。

2)使用lua:

vim /opt/nginx/conf/nginx.conf
log_format  main    $request_body_head;access_log  logs/access.log  main;location / {root   /opt/nginx/html;# 以下为添加内容set $request_body_head      "";content_by_lua_block {ngx.req.read_body()local   req_body = ngx.req.get_body_data()# 这里的1000代表我们截取request_body的长度,不要取的太长,否则容易导致日志过大ngx.var.request_body_head =  req_body:sub(1,1000)}
}

2、收集response_body:

对于response_body我们只有使用lua编写脚本来采集。

server {listen       80;server_name  localhost;# 以下为添加内容lua_need_request_body   on;set $response_body      "";body_filter_by_lua      '# 这里的1000就代表截取response_body的长度,不要取的太长,否则容易导致日志过大local       response_body = string.sub(ngx.arg[1],1,1000)ngx.ctx.buffered =  (ngx.ctx.buffered or "")        ..      response_bodyif ngx.arg[2] thenngx.var.response_body = ngx.ctx.bufferedend';
}

3、日志json格式化;

http {
include       mime.types;
default_type  application/octet-stream;
log_format main     escape=json '{''"timestamp": $time_local ''"remote_addr": $remote_addr ''"remote_user": "$remote_user ''"request_method": $request_method ''"request_uri": "$request_uri" ''"request_protocol": "$server_protocol" ''"request_length": $request_length ''"request_time": $request_time ''"request_body_head": "$request_body_head" ''"response_status": $status ''"body_bytes_sent": $body_bytes_sent ''"bytes_sent": $bytes_sent ''"response_body": "$response_body" ''"http_referer": "$http_referer" ''"http_user_agent": "$http_user_agent" ''"http_x_forwarded_for": "$http_x_forwarded_for" ''"http_host": "$http_host" ''"server_name": "$server_name" ''"upstream_addr": "$upstream_addr" ''"upstream_status": $upstream_status''}';access_log  logs/access.log  main;

https://zhuanlan.zhihu.com/p/100080719

nginx收集request_body、response_body相关推荐

  1. nginx 获取body参数_日志分析系列(外传二):Nginx日志统一化

    本系列故事纯属虚构,如有雷同实属巧合 为了完成对Nginx服务器的日志分析,小B对Q公司的Nginx日志做了统一化要求.下面是小B在统一化过程中遇到的一些知识点: Nginx日志与字段解析 Q公司的N ...

  2. nginx+uWSGI + django部署项目

    项目部署 nginx+uWSGI + django 1. WSGI WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器(返回静态资源的就是web服务器,Nginx)如何与Web应用程序( ...

  3. Nginx记录客户端POST过来的具体信息

    vim nginx/config/nginx.config $request_body这个变量值就是POST数据 log_format main '$remote_addr - $remote_use ...

  4. 实战:kafka实现日志收集系统

    实战:kafka实现日志收集系统 一.Kafka案例需求概述 1.1 需要收集的信息: 用户唯一标识 用户操作时间 具体用户操作 1.2 工作流程: 用户的操作会由Web服务器进行响应. 同时用户的操 ...

  5. 客端日志的收集、存储和分析

    客端日志的收集.存储和分析(一) 文章目录 客端日志的收集.存储和分析(一) 前言 一.如何做到海量日志的快速收集 1.架构分析 2. Nginx能做什么 3. Nginx落地的文件我们怎么处理 二. ...

  6. Go Web编程--给自己写的服务器添加错误和访问日志

    错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能.正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问 ...

  7. url能访问但new file()找不到文件_Go Web编程给自己写的服务器添加错误和访问日志...

    错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能.正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问 ...

  8. 大数据日志分析项目架构

    老是弹出由于您编辑时间过长,页面和服务器之间的连接已断开,请先将文章内容另外保存,再刷新本页面继续编辑让我保存页面我也是醉了,图片多没法一次上传,上传图片还一直失败,我只好都放在一个附件里面了.阿里能 ...

  9. 《OD学Oozie》20160807Oozie

    一.引入 MapReduce Job Hive 脚本任务 同一个业务:先后.定时调度 工作流: 定义工作流程 activity jbpm oozie: 大数据工作流定义与调度框架 专门定义与调度Map ...

最新文章

  1. 雷林鹏分享:MySQL 及 SQL 注入
  2. 洞察疫情,微软推出新冠数据分析网站COVID Insights
  3. tidb mysql hbase_HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?
  4. MySQL优化--where条件字段的顺序对效率的影响 (02)
  5. Delphi实现类似Android锁屏的密码锁控件
  6. step5 . day4 网络编程 基于UDP协议的网络编程流程及API
  7. JAVA IO基本知识
  8. 量子计算机加密货币,量子计算机会打击到加密货币吗?
  9. wraper for bootstrap3.0 + simple_form
  10. 视频教程-CCNA趣味实战无线实验视频课程—含PPPOE、ADSL、CABLE等-思科认证
  11. 数据库(mysql、oracle、sqlserver)单表sqlserver
  12. python 拼音排序_Python实现针对中文排序的方法
  13. Http状态码406(Not Acceptable) 错误问题解决方法
  14. 二叉树遍历之前序遍历,中序遍历,后序遍历
  15. pancakeswap薄饼添加流动性后实现永久锁仓
  16. 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
  17. SuperMap iClient3D for WebGL教程 Primitive
  18. Drainage Ditches【究极最大流算法之ISAP】(Improved Shortest Augmeng Path)
  19. android 竞品分析工具对比
  20. ORU-10027:buffer overflow,limit of 10000 bytes问题的解决

热门文章

  1. 【C语言】案例十一:分支结构(任意三个数的升序排列)
  2. QQ2006贺岁版SP1发布更新地址栏搜索(转)
  3. 产品经理面试必须知道的事
  4. 西邮linux小组2019-2021面试题总结
  5. Lifekeeper产品正版与盗版的区别
  6. Macromedia Flash文件格式(SWF)详细说明书
  7. kubernetes源码分析-pod创建流程
  8. 校园认证客户端弹出UAC窗口解决办法-修改注册表
  9. 数据分析方法(市场调研常用、思维导图)
  10. 【机器学习】function regularized_cost at 0x000001E9244B5A60>报错