本期技术分享讲师北河老师
题目内容:
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
领取专属 10元无门槛券
私享最新 技术干货