暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

基于shell统计nginx访问日志

IT那活儿 2020-09-17
3255

在日常的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的统计分析命令还有很多,这里只是抛砖引玉,希望对大家的学习或者工作能带来一定的帮助。

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论