nginx收集request_body、response_body
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相关推荐
- nginx 获取body参数_日志分析系列(外传二):Nginx日志统一化
本系列故事纯属虚构,如有雷同实属巧合 为了完成对Nginx服务器的日志分析,小B对Q公司的Nginx日志做了统一化要求.下面是小B在统一化过程中遇到的一些知识点: Nginx日志与字段解析 Q公司的N ...
- nginx+uWSGI + django部署项目
项目部署 nginx+uWSGI + django 1. WSGI WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器(返回静态资源的就是web服务器,Nginx)如何与Web应用程序( ...
- Nginx记录客户端POST过来的具体信息
vim nginx/config/nginx.config $request_body这个变量值就是POST数据 log_format main '$remote_addr - $remote_use ...
- 实战:kafka实现日志收集系统
实战:kafka实现日志收集系统 一.Kafka案例需求概述 1.1 需要收集的信息: 用户唯一标识 用户操作时间 具体用户操作 1.2 工作流程: 用户的操作会由Web服务器进行响应. 同时用户的操 ...
- 客端日志的收集、存储和分析
客端日志的收集.存储和分析(一) 文章目录 客端日志的收集.存储和分析(一) 前言 一.如何做到海量日志的快速收集 1.架构分析 2. Nginx能做什么 3. Nginx落地的文件我们怎么处理 二. ...
- Go Web编程--给自己写的服务器添加错误和访问日志
错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能.正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问 ...
- url能访问但new file()找不到文件_Go Web编程给自己写的服务器添加错误和访问日志...
错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能.正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问 ...
- 大数据日志分析项目架构
老是弹出由于您编辑时间过长,页面和服务器之间的连接已断开,请先将文章内容另外保存,再刷新本页面继续编辑让我保存页面我也是醉了,图片多没法一次上传,上传图片还一直失败,我只好都放在一个附件里面了.阿里能 ...
- 《OD学Oozie》20160807Oozie
一.引入 MapReduce Job Hive 脚本任务 同一个业务:先后.定时调度 工作流: 定义工作流程 activity jbpm oozie: 大数据工作流定义与调度框架 专门定义与调度Map ...
最新文章
- 雷林鹏分享:MySQL 及 SQL 注入
- 洞察疫情,微软推出新冠数据分析网站COVID Insights
- tidb mysql hbase_HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?
- MySQL优化--where条件字段的顺序对效率的影响 (02)
- Delphi实现类似Android锁屏的密码锁控件
- step5 . day4 网络编程 基于UDP协议的网络编程流程及API
- JAVA IO基本知识
- 量子计算机加密货币,量子计算机会打击到加密货币吗?
- wraper for bootstrap3.0 + simple_form
- 视频教程-CCNA趣味实战无线实验视频课程—含PPPOE、ADSL、CABLE等-思科认证
- 数据库(mysql、oracle、sqlserver)单表sqlserver
- python 拼音排序_Python实现针对中文排序的方法
- Http状态码406(Not Acceptable) 错误问题解决方法
- 二叉树遍历之前序遍历,中序遍历,后序遍历
- pancakeswap薄饼添加流动性后实现永久锁仓
- 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
- SuperMap iClient3D for WebGL教程 Primitive
- Drainage Ditches【究极最大流算法之ISAP】(Improved Shortest Augmeng Path)
- android 竞品分析工具对比
- ORU-10027:buffer overflow,limit of 10000 bytes问题的解决