java统计uv pv_基于shell统计nginx访问日志

在日常的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

03f4e51c1b492562c7003038d18d88a1.png

2、根据访问URL统计PV

PV(PageView):访问量,即页面浏览量或点击量,衡量用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计。

awk '{print $7}' access.log | wc -l

02b2b982191cc2d34ba2087e355fb79b.png

3、统计访问最多的URL

根据访问最多的URL来判断哪些业务比较繁忙;

awk '{print $7}' access.log | sort | uniq -c | sort -n -k 1 -r | more

135b463f0df3ba04afb00135acc01db3.png

4、统计访问最频繁的IP

根据访问IP来判断哪些IP操作最多;

awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | more

8b2f1438baa8d5a699e99792aa4f97ce.png

5、根据时间段统计查看日志

具体使用sed或者grep都可以,主要是编写正则表达式;

sed:

cat  access.log| sed -n '/1\/Sep\/2020:[01-23]/p' | more

26323f7602852647af0b12d2341dd0f9.png

grep:

grep '1\/Sep\/2020:[01-23]' access.log |more

c02e262bc455d8aa5ad6d376197c2b64.png

6、统计当日的pv和uv

因为是统计当日的pv和uv,所以在编写命令之前了解一下nginx的日志格式。日志的默认格式如下:

2ec1b88181d843aa421c69449ca58566.png

默认输出的月份使用英文简写。

pv:

cataccess.log | sed -n /`date "+%d\/%b\/%Y"`/p | awk '{print $7}' | sort | wc -l

9c7b1a640e791703b09438511ce965e8.png

uv:

cataccess.log | sed -n /`date "+%d\/%b\/%Y"`/p |awk '{print $1}' | sort|uniq -c | wc -l

0999fd04bd8a5740f6e68b2c56ab3707.png

如果使用以上这两个命令发现统计不出来任何数据时,就要检查一下,系统的语言变量LANG是否配置成中文,如果是则需要配置成英文。

32e4a343a2ef2895ed36ed6102ec7fa2.png

使用以下命令配置成英文:

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

41fb0bebf34cc522c535e20dacf760bd.png

8、获取每分钟的请求数量

cat access.log  | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' 

0035b3a4a162fcc4d5cedac5fec64ee2.png

可以输出到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

84c2df4903750aa9418755c441b2ccdc.png

查看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

77ff75320ecd0b8d362be0b3448d4284.png

[ 总结 ]

上面介绍了关于Nginx日志统计分析的一些常用命令,包括IP相关统计、页面访问统计、性能分析等相关命令。Nginx的统计分析命令还有很多,这里只是抛砖引玉,希望对大家的学习或者工作能带来一定的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值