性能测试——Nginx日志分析-0926

本期技术分享讲师北河老师

题目内容

Nginx有访问日志access.log,用户的每一次HTTP请求,都会在access.log中写入一条记录,记录中包含了请求ip、请求时间、接口url、HTTP状态码、客户端浏览器等信息。

access.log格式如下

10.0.0.4 - - [29/Jul/2018:03:31:57 +0800] "GET /PerfTeach/login.jsp HTTP/1.1" 200 1034 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "2.51"

10.0.0.4 - - [29/Jul/2018:03:31:57 +0800] "GET /PerfTeach/style/bootstrap.min.css HTTP/1.1" 200 19445 "http://10.0.0.7/PerfTeach/login.jsp" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "6.14"

要求使用一条Linux命令,分析access.log,统计日志中每个HTTP请求的访问次数,并且列出前10个访问次数最多的请求。

PS:access.log网盘地址https://pan.baidu.com/s/1OdegH1r214bAnQdOmNn88Q

本期语音讲解

本期文字解析

首先对题目需求进行拆解

1、 过滤出每一行日志中的目标请求url

2、 统计每个url出现的次数

3、 按照url的次数进行倒序排列

4、 将排序后的结果取前10个

介绍几个相关的Linux命令

cat:展示文本文件中的所有数据

awk:对文本行数据进行过滤

uniq:统计连续重复数据出现的次数

sort:排序命令

head:获取前N个数据

接下来使用上述命令一步步进行文件处理

第一步:浏览access.log中所有数据

cat access.log

第二步:将上一步文件中所有的数据通过管道符传递给awk进行过滤处理

cat access.log | awk -F \" ''

其中,-F \”是指定行的分隔符为”是指打印分隔符分隔后的第二段字符串(就是url),打印结果类似

aaa

bbb

ccc

aaa

bbb

第三步:将上一步的过滤结果通过管道符传递给sort,sort命令可以按照字母顺序进行排序

cat access.log | awk -F \" '' | sort

打印结果类似:

aaa

aaa

bbb

bbb

ccc

第四步:将上一步的结果传递给uniq命令,uniq命令可以统计某行数据连续出现的次数,-c参数可以将次数打印出来

cat access.log | awk -F \" '' | sort | uniq -c

打印结果类似这样

1 aaa

2 bbb

5 ccc

第五步:将上一步的结果再次传递给sort命令

cat access.log | awk -F \" '' | sort | uniq -c | sort -rn

-rn 参数意思是按照数字倒序排列

打印结果类似这样

5 ccc

2 bbb

1 aaa

第六步:将上一步结果传递给head命令

cat access.log | awk -F \" '' | sort | uniq -c | sort -rn | head -10

-10代表打印前10行

最终效果如下:

17 GET /PerfTeach/style/bootstrap.min.css HTTP/1.1

17 GET /PerfTeach/script/bootstrap.min.js HTTP/1.1

17 GET /PerfTeach/login.jsp HTTP/1.1

14 GET /TestOA/style/blue/pageCommon.css HTTP/1.1

13 GET /TestOA/script/pageCommon.js HTTP/1.1

13 GET /TestOA/script/jquery_validate/jquery.validate.js HTTP/1.1

13 GET /TestOA/script/jquery_validate/jquery.metadata.js HTTP/1.1

13 GET /TestOA/script/jquery.js HTTP/1.1

13 GET /TestOA/script/PageUtils.js HTTP/1.1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180926B0AFIT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券