nginx站点访问量统计
PV、UV、IP是我们在运营和网站管理中常用的概念,那么这三个概念究竟是什么意思呢?
PV(访问量):即Page View,即页面浏览量或点击量,用户每次刷新即被计算一次。
UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
IP(独立IP):即Internet Protocol,指独立IP数。00:00-24:00内相同IP地址只被计算一次。
(1)、统计站点当天的PV和UV
统计当天某站点的每小时的访问量pv , 脚本如下:
1 2 3 4 |
说明:date "+%d/%b/%Y" 是对当前日期进行格式化, 为了跟nginx 日志文件中的日期格式保持一致。
统计某站点当天总pv
1 2 3 4 5 |
统计某站点当天的uv
1 2 3 4 |
(2)、统计站点当前或历史访问量
先对网站访问日志进行按天切割,将历史日志存储到一个特定的目录下,并按日期做好归档。
脚本 /home/cutnginx.sh 内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/bash LOG_PATH=/usr/local/nginx/logs/oldlogs CUR_LOG_PATH=/usr/local/nginx/logs YESTERDAY=$(date +%F -d -1day) mkdir $LOG_PATH/${YESTERDAY} logfile=(wms9145.access.log) i=0 while [[ i -lt ${#logfile[@]} ]]; do mv $CUR_LOG_PATH/${logfile[i]} $LOG_PATH/${YESTERDAY}/${YESTERDAY}_${logfile[i]} let i++ done kill -USR1 $(cat /usr/local/nginx/pid/nginx.pid) find $LOG_PATH -name *.log -mtime +31 -exec rm -rf {} ; |
任务计划
crontab -l
0 0 * * * /bin/bash /home/cutnginx.sh &>/dev/null
统计站点每小时的PV和某天的总PV,脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/bash if [ -z $1 ];then fullpath='/usr/local/nginx/logs/wms9145.access.log' var=`cat $fullpath | awk '{print substr($4, 14, 2)}' | uniq -c | awk '{print $2","$1}'` echo $var else if [ -d "$1" ]; then currentDate=$1 fullpath=/usr/local/nginx/logs/oldlogs/$currentDate/$currentDate'_wms9145.access.log' echo $fullpath var=`awk '{print $7}' $fullpath | wc -l` echo $var else echo -e "\033[41;37m the "$1" directory is not exists, "$1" must be an existing date directory!\033[0m" fi fi |
脚本说明:
因站点访问日志每天0点做了切割处理, 则 /usr/local/nginx/logs/wms9145.access.log 为当天的日志(即从当天0点到目前的日志);
/usr/local/nginx/logs/oldlogs/ 下面有'年-月-日'格式的目录用来存储历史的日志文件;
直接执行脚本(不传递参数)则统计当天每个小时的PV情况,使用$1来传入日期来查询到特定日期的PV统计情况。