在日常的web应用使用中,通常会对访问信息进行收集记录,进行统计分析,以提高和改进应用建设。目前主流的数据收集方式基本都是基于javascript。当然,在日志比较小的情况下,也可以通过shell命令做一些简单的分析。下面以Nginx的AccessLog为例,介绍通过shell的awk命令统计应用的访问信息。
[ awk介绍 ]awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在对数据分析生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法:awk'{pattern + action}' {filenames}
[ 常用利用shell统计日志命令 ]1、根据访问IP统计UV
IP:独立IP数,是指独立浏览了页面的不同IP,即统计不同的IP浏览用户数量。同一IP不管访问了几个页面,独立IP数均为1;不同的IP浏览页面,计数会加1。
UV(UniqueVisitor):独立访客,统计访问某站点的用户数;
awk '{print $1}' access.log | sort | uniq -c | wc -l
2、根据访问URL统计PV
PV(PageView):访问量,即页面浏览量或点击量,衡量用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计。
awk '{print $7}' access.log | wc -l
3、统计访问最多的URL
根据访问最多的URL来判断哪些业务比较繁忙;
awk '{print $7}' access.log | sort | uniq -c | sort -n -k 1 -r | more
4、统计访问最频繁的IP
根据访问IP来判断哪些IP操作最多;
awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | more
5、根据时间段统计查看日志
具体使用sed或者grep都可以,主要是编写正则表达式;
sed:
cat access.log| sed -n '/1\/Sep\/2020:[01-23]/p' | more
grep:
grep '1\/Sep\/2020:[01-23]' access.log |more
6、统计当日的pv和uv
因为是统计当日的pv和uv,所以在编写命令之前了解一下nginx的日志格式。日志的默认格式如下:
默认输出的月份使用英文简写。
pv:
cataccess.log | sed -n /`date "+%d\/%b\/%Y"`/p | awk '{print $7}' | sort | wc -l
uv:
cataccess.log | sed -n /`date "+%d\/%b\/%Y"`/p |awk '{print $1}' | sort|uniq -c | wc -l
如果使用以上这两个命令发现统计不出来任何数据时,就要检查一下,系统的语言变量LANG是否配置成中文,如果是则需要配置成英文。
使用以下命令配置成英文:
exportLANG="en_US.UTF-8"
这时在执行pv和uv命令就可以统计出来了。
7、获取最耗时的请求时间、url
下面是获取最耗时的前十个请求,如果想获取全部则去掉:head-10
cat access.log | awk '{print $4,$7,$NF}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10
8、获取每分钟的请求数量
cat access.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}'
可以输出到csv格式文件中
cat access.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' > access.csv
9、查看某个时间段之间的ip访问个数
例如查看10点到19点的访问ip数
grep "2020:1[0-9]" access.log | awk '{ips[$1]+=1} END{for(ip in ips) print ips[ip],ip}' | sort -nr | wc -l
查看10点到19点之间的ip访问数>=200的ip
grep '2020:1[0-19]' access.log | awk '{ips[$1]+=1}END{for(ip in ips) if(ips[ip]>=200) print ips[ip],ip}' | sort -nr
上面介绍了关于Nginx日志统计分析的一些常用命令,包括IP相关统计、页面访问统计、性能分析等相关命令。Nginx的统计分析命令还有很多,这里只是抛砖引玉,希望对大家的学习或者工作能带来一定的帮助。