Nginx和Apache都支持访问日志,可以记录页面请求的时间
统计页面的访问时间,可以作为调优的一种依据.
实验模拟Nginx的访问日志,统计页面访问的各项数值.
首先创建模拟数据
create table t
select
concat('/cms/',ceil(rand()*5),'.html') path,
now()-interval id+ceil(rand()*60) minute createtime,
ceil(rand()*100) ts
from nums where id<30;
其中nums是数字辅助表,参见
http://blog.itpub.net/29254281/viewspace-1362897/
将数据导出为文本,模拟访问日志
select * from t into outfile '/tmp/log.txt';
数据如下,分别是访问的页面,访问时间和访问时长

1.统计访问总时长(sum)
awk '{a[$1]+=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort

结果和数据库统计是一样的

2.统计页面访问次数
awk '{a[$1]+=1} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
3.统计最长访问时间
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]>$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
4.统计最短访问时间
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]<$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
5.统计平均访问时间
awk '{s[$1]+=$4;c[$1]+=1} END{for (i in c) printf("%10s %5d\n",i,s[i]/c[i])}' log.txt | sort
6.统计一个时间段内的最大访问时间
这个比较复杂,需要单独写一个脚本文件了
vim cal.awk
#!/bin/awk -f
{
dateStr = $2" "$3;
split(dateStr, dateStrArr, "[\\- :]");
dateStr = "";
for(i=1;i<=length(dateStrArr);i++)
dateStr = dateStr" "dateStrArr[i];
if(mktime(dateStr)>mktime("2015 02 28 09 00 00") && mktime(dateStr)
{
if(a[$1]=="") a[$1]=$4;
if(a[$1]<$4) a[$1]=$4;
}
}
END {for (i in a) printf("%10s %5d\n",i,a[i])}

在数据库中验证

用awk处理时间比较麻烦,需要按照指定的格式拼凑mktime函数的参数.
参考:
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
http://coolshell.cn/articles/9070.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1443562/
,如需转载,请注明出处,否则将追究法律责任。