网站数据统计分析项目之采集服务部署
服务器部署方案
本机 | master | slave1 | slave2 |
---|---|---|---|
目标程序(ecshop) | 日志采集服务器 | 日志采集服务器 | |
采集服务器负载均衡 | |||
目标网站(web程序) | |||
namenode | namenode | ||
datanode | datanode | datanode | |
rm1 | rm2 | ||
nm | nm | nm | |
zk | zk | zk | |
jn | jn | jn | |
管理节点 |
OpenResty环境搭建
可以参考:网站数据统计分析系统之后端脚本之OpenResty简介课程中的详细讲解。
开发和部署采集脚本
ma.js可以放到采集服务器的工作目录下:/home/hadoop/work/html/
然后修改一下埋点脚本中的ma.js路径。
...... 页面其它省略......
//通过页面input接受后台用户uid
< input type="hidden" id="_uid" value="< ?php echo $user_id;?"/>
< script type="text/javascript">
var _maq=_maq||[];
_maq.push(['_account','user1']);
//通过js获取用户uid数据
_maq.push(['_uid','getElementsById("_uid").value']);
(function(){
var ma=document.createElement("script");
ma.type="text/javascript";
//异步加载
ma.async=true;
//引入具体采集代码,ma.js放在采集服务器中
ma.src="http://192.168.0.201:8080/ma.js";
//创建一个script标签
var s=document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(ma,s);
})();
< /script>
< /html>
同时需要修改采集脚本中的路径:
(function(){
var params={};
//document
if(document){
//域名
params.domain=document.domain||'';
//URL
params.url=document.URL||'';
//页面标题
params.title=document.title||'';
//从哪个页面跳转过来referrer
params.referrer=document.referrer||'';
}
//window
if(window&&window.screen){
//分辨率
params.sh=window.screen.height||0;
params.sw=window.screen.width||0;
//颜色深度
params.cd=window.screen.colorDepth||0;
}
//navigator
if(navigator){
//客户端语言
params.lang=navigator.language||'';
}
//解析_maq
if(_maq){
for(var i in _maq){
switch(_maq[i][0]){
case '_account':
params.account=_maq[i][1];
break;
case '_uid':
params.uid=_maq[i][1];
break;
default:
break;
}
}
}
//console.log(params);
var ags="";
//拼接参数
for(var i in params){
if(ags!=''){
ags+='&';
}
ags+=i+'='+encodeURIComponent(params[i]);
}
console.log(ags);
var img=new Image(1,1);
//将采集的数据以图片的形式发送到采集服务器
img.src='http://192.168.0.201:8080/1.gif?'+ags;
})();
开发和部署后端处理程序
后端程序在前面的课程中已经详细讲解,这里我们就不再赘叙。
前后端测试
1.启动OpenResty服务器
2.启动ecshop项目
3.模拟访问ecshop中的页面,在后端服务器产生用户访问日志。
实现采集服务器负载均衡
我们在master节点同样需要安装OpenResty服务,从而实现负载均衡。
master节点中/home/home/work/conf/nigix.conf配置如下:
[hadoop@master work]# ls
conf logs
[hadoop@master work]# cd conf/
[hadoop@master conf]# vi nginx.conf //创建一个nginx.conf文件
worker_processes 1;//work 进程数指定为1
error_log logs/error.log;//日志目录
events{
worker_connections 1024;//为每个work指定最大连接数
}
http{
upstream maservers{
server 192.168.0.201:8080 weight=1;
server 192.168.0.202:8080 weight=1;
}
server{
listen 8080; //监听端口
server_name 192.168.0.200 //该节点实现转发
location /{
proxy_pass http://maservers;
proxy_set_header realip $remote_addr;
}
}
}
master只负责负载均衡,将产生的日志数据均匀的分发到slave1和slave2, slave1和slave2的后端脚本负责对采集的数据进行处理。
整个数据采集的流程就是:ecshop产生日志数据---master 负载均衡---slave1和slave2后端脚本采集数据---flume负责搜集数据。