单位时间的请求数就是QPS,那么在nginx服务的网站下,如果要统计QPS并且按从高到低排列,需要使用awk配合sort进行处理
awk做的主要工作是把access每行日志按分隔符分开,然后循环每一行,存到一个数组里,如果只按时间不区分脚本路径,数组里存的数据是比如arr['[28/Nov/2019:14:12:23']=20 key是时间,value是次数
使用下面这个shell可以统计到只按时间的QPS
cat /var/log/nginx/access.log|awk '{a[$4]+=1;}END{for (i in a) { printf("%s%i
",i,a[i])}}'|sort -gr -k2|head
awk '{}END{}'这个的意思就是{}里面的会每行执行,创建一个数组,把当前$4的数据作为key,出现次数作为value,每出现一次加1,END后面的只会最后执行,END里面还有个for in循环,awk的分割规则需要根据自己的日志格式进行
sort -g是按数字排 -r是从高到低 -k2是排第二列
下面这个是把当前时间和脚本的地址也一块作为key,这样计算出来的是,单位时间的某个接口地址下的QPS,具体的分割规则需要根据自己的业务自行分割
cat /var/log/nginx/access.log|awk '{print $4 $8}'|awk -F '?' '{a[$1]+=1}END{for(i in a){printf("%s%d
",i,a[i])}}'|sort -gr -k2|head