Linux上nginx访问post请求日志
一、写在前面的话
今天有几个前同事来要工资,约定好的时间没给人家,看来,真的不行了。早做打算吧。
二、开胃小菜
mysql 将一张表的数据更新到另外一张表中,怎么做?
方式一:update 更新表 set 字段 = (select 参考数据 from 参考表 where 更新表.id = 参考表.id)
例如:update a set aaa = (select aaa from b where a.id = b.id),bbb = (select bbb from b where a.id = b.id)
方式二:update 更新表,参考表 set 更新表数据 = 参考表数据 where 更新表.id = 参考表.id
例如:update a,b set a.aaa = b.aaa,a.bbb = b.bbb where a.id = b.id;
三、Nginx正确记录post请求日志的方法
1.安装lua-nginx-module模块
这个模块,能使nginx输出post参数,并写到日志里。在端口定义的php中,要引入lua,如下:
图3
2.在nginx.conf中添加日志格式
这个模块,能使nginx输出post参数,并写到日志里。
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" - $request_body';
截图如下:
图1
注:这里设置了access2的格式,在端口引用中,要引用这个access2,如下:
图2
注:这一系列骚操作之后,日志能输出了,如下:
图4
注:接下来就是怎么通过命令查询了,如上图4,实际上,我输入的post参数:user_id=aaaa,new_subject_id=bbbb,page=cccc,但实际上写入的有些xoA之类的干扰项。
3.命令查询nginx访问日志
3.1 )命令查请求总数
命令如下:
wc -l www.api.com.log |awk '{print $1}'
运行结果如下:
图5
注:我把日志文件中请求删了一部分,只剩4个。
3.2 )独立IP数
命令如下:
'{print $1}' www.api.com.log|sort |uniq |wc -l
注:结果输出2,没什么悬念,去了一下重。
3.3) 每秒客户端请求数
awk '{print $6}' www.api.com.log|sort|uniq -c|sort -rn|head -5
输出如下:
图6
注:应该是对图6下半部分框起来的进行了一个排序。
3.4)访问最频繁IP
awk '{print $1}' www.api.com.log|sort |uniq -c |sort -nr |head -5
注:输出 2 117.25.149.164 2 111.132.4.130,输出这两个ip,都是两次,没有疑问。
3.5)访问最频繁的URL
awk '{print $7}' www.api.com.log|sort |uniq -c |sort -nr |head -5
注:输出
2 /JinTiKuV2/getClassExaminationSite 2 400
输出/JinTiKuV2/getClassExaminationSite这个,没什么疑问,问题是输出400,是什么意思,看图5发现有个请求的url就是400,也是两次。
3.6)响应大于5秒的URL
awk '{if ($7 > 5){print $6}}' www.api.com.log|sort|uniq -c|sort -rn |head -5
注:输出\x05\x01\x00,这个请求400,应该是400秒。
3.7)HTTP状态码(非200)统计
awk '{if ($11 != 200){print $11}}' www.api.com.log|sort|uniq -c|sort -rn|head -5
注:输出 4 "-",应该是没找到。
3.8)分析请求数大于50000的源IP
cat www.api.com.log|awk '{print $NF}'|sort |uniq -c |sort -nr|awk '{if ($1 >50000){print $2}}'注:输出空,没找到。无异议。
现在是关键问题没有解决,我想找到访问这个链接【/JinTiKuV2/getClassExaminationSite】的有多少,并把它输出到一个文件里,该怎么办?查下资料吧。
命令如下:
awk '/getClassExaminationSite/' www.api.com.log
结果如下:
图7
注:怎么把结果写到一个文件里呢,还有可能同样的请求有很多,怎么加时间段限制呢。以后再说吧。
《本文完》