统计Nginx访问量
PV(Page View):即页面浏览量或者点击量,用户每一次对网站中每个页面访问均记录1个PV。用户对同一页面的多次访问,访问量累积。
UV(Unique Visitor):指通过互联网浏览这个网页的人,电脑称为一个访客、手机也称为一个访客,一天之内相同的客户端只能被计算一次。
IP(Internet Protocol):指独立IP访问站点的IP总数,一天内相同IP只能算一次。
VV(Visit View):指所有访客一天内访问网站的次数,当访客完成所有浏览并最终关闭网站的所有页面时变完成了一次访问,同一访客一天内可能有多次访问行为,访问次数累积。
接下来看一下Nginx的配置文件:
再看一下access.log:
access.log文件里面的$1、\(2...对应于nginx配置文件里面的\)remote_addr、$remote_user...等
查看各个访问量:
1.根据访问IP统计UV
awk '{print $1}' /var/log/nginx/access.log|sort | uniq -c |wc -l
2.统计访问URL统计PV
awk '{print $7}' /var/log/nginx/access.log|wc -l
3.查询访问最频繁的URL
awk '{print $7}' /var/log/nginx/access.log|sort | uniq -c |sort -n -k 1 -r|more
4.查询访问最频繁的IP
awk '{print $1}' /var/log/nginx/access.log|sort | uniq -c |sort -n -k 1 -r|more
awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 10
5.根据时间段统计查看日志,根据时间段查看相应的连接日志
cat /var/log/nginx/access.log| sed -n '/14\/Mar\/2017:21/,/14\/Mar\/2017:22/p'|more
6.查看 nginx 并发连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回值说明:
- CLOSED //无连接是活动的或正在进行
- LISTEN //服务器在等待进入呼叫
- SYN_RECV //一个连接请求已经到达,等待确认
- SYN_SENT //应用已经开始,打开一个连接
- ESTABLISHED //正常数据传输状态/当前并发连接数
- FIN_WAIT1 //应用说它已经完成
- FIN_WAIT2 //另一边已同意释放
- ITMED_WAIT //等待所有分组死掉
- CLOSING //两边同时尝试关闭
- TIME_WAIT //另一边已初始化一个释放
- LAST_ACK //等待所有分组死掉
针对每天的访问信息写一个脚本,并将统计信息输出到/pv.html文件里面,之保留30天的信息。方便直接浏览此页面查看,但要限制特定IP才能访问此页面,其他IP的403!
year=`date +%Y`
month=`date +%m`
datedate=`date +%F`
date=`date +%Y%m%d`
pv=`awk '{print $7}' /xx/logs/nginx/xxx/"$year"/"$month"/"$datedate"-access.log | wc -l`
ip=`awk '{print $1}' /xx/logs/nginx/xxx/"$year"/"$month"/"$datedate"-access.log | sort -n | uniq -c | wc -l`
echo -e "\n$date Pv is $pv;; $date Ip is $ip.." >> /xx/xxx/pv.htm l sort -rn /xx/xxx/pv.html | sed -i '31d' /xx/xxx/pv.html | sort -r
此外还要修改nginx配置文件:
location = /pv.html {
allow xxx.xxx.xxx.xxx;
deny allow;
}
nginx -r
service nginx reload
最后,将pv.sh加入定时任务:
crontab -e