vlambda博客
学习文章列表

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';

截图如下:

Linux上nginx访问post请求日志

图1

注:这里设置了access2的格式,在端口引用中,要引用这个access2,如下:

Linux上nginx访问post请求日志

图2

注:这一系列骚操作之后,日志能输出了,如下:

Linux上nginx访问post请求日志

图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}'

运行结果如下:

Linux上nginx访问post请求日志

图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

注:怎么把结果写到一个文件里呢,还有可能同样的请求有很多,怎么加时间段限制呢。以后再说吧。

《本文完》