如何使用nginx(nginx如何统计网站的访问量)

如何使用nginx(nginx如何统计网站的访问量)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-12-28
文章简介

前端统计脚本我写了一个不是很完善但能完成基本工作的统计脚本ma.js: params.domain=document.domain||''; params.url=document.URL|

2025阿里云双十一服务器活动

前端统计脚本

我写了一个不是很完善但能完成基本工作的统计脚本ma.js:

params.domain=document.domain||'';

params.url=document.URL||'';

params.title=document.title||'';

params.referrer=document.referrer||'';

if(window&&window.screen){

params.sh=window.screen.height||0;

params.sw=window.screen.width||0;

params.cd=window.screen.colorDepth||0;

params.lang=navigator.language||'';

params.account=_maq[i][1];

args+=i+'='+encodeURIComponent(params[i]);

//通过Image对象请求后端脚本

img.src='http://analytics.codinglabs.org/1.gif?'+args;

})();

location/1.gif{

#本身关闭access_log,通过subrequest记录log

--用户跟踪cookie名为__utrace

localuid=ngx.var.cookie___utrace

--如果没有则生成一个跟踪cookie,算法为md5(时间戳+IP+客户端信息)

uid=ngx.md5(ngx.now()..ngx.var.remote_addr..ngx.var.http_user_agent)

ngx.header['Set-Cookie']={'__utrace='..uid..';path=/'}

--通过subrequest到/i-log记录日志,将参数和用户跟踪cookie带过去

ngx.location.capture('/i-log?'..ngx.var.args..'&utrace='..uid)

add_headerExpires"Fri,01Jan198000:00:00GMT";

如何使用nginx,nginx如何统计网站的访问量

add_headerCache-Control"no-cache,max-age=0,must-revalidate";

#返回一个1×1的空gif图片

#内部location,不允许外部直接访问

#设置变量,注意需要unescape

set_unescape_uri$u_domain$arg_domain;

set_unescape_uri$u_url$arg_url;

set_unescape_uri$u_title$arg_title;

set_unescape_uri$u_referrer$arg_referrer;

set_unescape_uri$u_sh$arg_sh;

set_unescape_uri$u_sw$arg_sw;

set_unescape_uri$u_cd$arg_cd;

set_unescape_uri$u_lang$arg_lang;

set_unescape_uri$u_utrace$arg_utrace;

set_unescape_uri$u_account$arg_account;

#记录日志到ma.log,实际应用中最好加buffer,格式为tick

access_log/path/to/logs/directory/ma.logtick;

}

要完全解释这段脚本的每一个细节有点超出本文的范围,而且用到了诸多第三方ngxin模块(全都包含在OpenResty中了),重点的地方我都用注释标出来了,可以不用完全理解每一行的意义,只要大约知道这个配置完成了我们在原理一节提到的后端逻辑就可以了。

日志轮转

日志收集系统需要处理大量的访问日志,在时间的累积下文件规模急剧膨胀,放在同一文件中管理不便。所以通常要按时间段将日志切分,例如每天或每小时切分一个日志。我这里为了效果明显,每一小时切分一个日志。通过crontab定时调用一个shell脚本,以下是该脚本的内容:

mv${_prefix}/logs/ma.log${_prefix}/logs/ma/ma-${time}.log

kill-USR1`cat${_prefix}/logs/nginx.pid`

关于分析

通过上面的分析和开发可以大致理解一个网站统计的日志收集系统是如何工作的。有了这些日志,就可以进行后续的分析了。本文只注重日志收集,所以不会写太多关于分析的东西。注意,原始日志最好尽量多的保留信息而不要做过多过滤和处理。例如上面的MyAnalytics保留了毫秒级时间戳而不是格式化后的时间,时间的格式化是后面的系统做的事而不是日志收集系统的责任。后面的系统根据原始日志可以分析出很多东西,例如通过IP库可以定位访问者的地域、useragent中可以得到访问者的操作系统、浏览器等信息,再结合复杂的分析模型,就可以做流量、来源、访客、地域、路径等分析了。当然,一般不会直接对原始日志分析,而是会将其清洗格式化后转存到其它地方,如MySQL或HBase中再做分析。分析部分的工作有很多开源的基础设施可以使用,例如实时分析可以使用Storm,而离线分析可以使用Hadoop。当然,在日志比较小的情况下,也可以通过shell命令做一些简单的分析,例如,下面三条命令可以分别得出我的博客在今天上午8点到9点的访问量(PV),访客数(UV)和独立IP数(IP):

awk-F^A'{print$1}'ma-2012102409.log|wc-l

awk-F^A'{print$12}'ma-2012102409.log|uniq|wc-l

awk-F^A'{print$2}'ma-2012102409.log|uniq|wc-l

以上就是如何使用nginxlua实现网站统计中的数据收集的详细内容,更多请关注主机测评网其它相关文章!

标签:
网站反应慢是什么原因
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!