服务器部署方案
本机 master slave1 slave2 目标程序(ecshop) 日志采集服务器 日志采集服务器 采集服务器负载均衡 目标网站(web程序) namenode namenode datanode datanode datanode rm1 rm2 nm nm nm zk zk zk jn jn jn 管理节点可以参考:网站数据统计分析系统之后端脚本之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负责搜集数据。