![df86694b51b626ac40b61496b2d930f1.png](https://img-blog.csdnimg.cn/img_convert/df86694b51b626ac40b61496b2d930f1.png)
数据收集的方案
收集的方式:通过在客户端嵌入SDK的方式收集用户行为数据(SDK:一段收集数据的代码,放到客户端)
以事件作为数据收集的最小单位,当用户在系统或者APP上触发定义的事件的时候,产生数据,SDK将产生的数据发送到Nginx服务器上(通过url发送)
js sdk的事件(模拟前端)
launch事件:标识访客第一次访问的事件
pageView事件:标识用户浏览页面的事件
event事件:包容性最强的事件
chargeRequest事件:标识订单产生事件
找到我们的项目中的文件analytics.js,阅读分析下
![7eaac82c0a6478e1ef7504258f0c95bc.png](https://img-blog.csdnimg.cn/img_convert/7eaac82c0a6478e1ef7504258f0c95bc.png)
修改这个地址
![72ed6d424d907565e786eb7b1ce16c1e.png](https://img-blog.csdnimg.cn/img_convert/72ed6d424d907565e786eb7b1ce16c1e.png)
部署启动访问
http://localhost:8080/sdk_test/
![502dacd0a8b4f703be4f8708b100cb3e.png](https://img-blog.csdnimg.cn/img_convert/502dacd0a8b4f703be4f8708b100cb3e.png)
后台监控nginx的日志
![9f7307b819ff1de5897e0465c553e65f.png](https://img-blog.csdnimg.cn/img_convert/9f7307b819ff1de5897e0465c553e65f.png)
点击页面
![c618b79db7a4e4ff2528b9f628fdcedf.png](https://img-blog.csdnimg.cn/img_convert/c618b79db7a4e4ff2528b9f628fdcedf.png)
观察后台日志,有新的日志出现
![5ee3342162e03e7be63720d6a770ffd6.png](https://img-blog.csdnimg.cn/img_convert/5ee3342162e03e7be63720d6a770ffd6.png)
java sdk的事件(模拟后端)
chargeSuccess事件:标识订单支付成功事件
chargeRefund事件:标识订单退款事件
![4d2c7cd5939524cde10a3e4c83f6d332.png](https://img-blog.csdnimg.cn/img_convert/4d2c7cd5939524cde10a3e4c83f6d332.png)
修改机器IP
![9fd5e182ed9764f6fdb3e96eeb1b67e4.png](https://img-blog.csdnimg.cn/img_convert/9fd5e182ed9764f6fdb3e96eeb1b67e4.png)
启动主方法
![36532cc8e7a3d086070b4bbd6cab0c61.png](https://img-blog.csdnimg.cn/img_convert/36532cc8e7a3d086070b4bbd6cab0c61.png)
同样检测nginx日志,发现日志也在读取
![ba5ef796e54148d14cc844b0f000aaee.png](https://img-blog.csdnimg.cn/img_convert/ba5ef796e54148d14cc844b0f000aaee.png)
这就是模拟前后端的日志采集,但是目前日志显示不是很清晰,这就需要我们修改nginx的日志产生格式了
修改linux中nginx日志产生的格式
$remote_addr ---- ip地址
$msec ----访问时间,时间戳,毫秒
$request_uri ---用户请求参数,从客户端捕获到的用户行为数据都会封装到这个字段里
$remote_addr^A$msec^A$request_uri
同时将下面的日志生成目录放开
access_log logs/access.log main;
![6702c232d4ea65ad66876aa2735e66ad.png](https://img-blog.csdnimg.cn/img_convert/6702c232d4ea65ad66876aa2735e66ad.png)
sbin/nginx -t 检测nginx.conf是否配置ok
![431fd04def6e7506301d0a66a298e9e8.png](https://img-blog.csdnimg.cn/img_convert/431fd04def6e7506301d0a66a298e9e8.png)
定义好后重启Nginx服务器
sbin/nginx -s reload
![2deae355debcc18fd3a93a9a16d1e278.png](https://img-blog.csdnimg.cn/img_convert/2deae355debcc18fd3a93a9a16d1e278.png)
我们重新点击页面采集下数据
![61943d6a34c51014e60c4904358ae5b6.png](https://img-blog.csdnimg.cn/img_convert/61943d6a34c51014e60c4904358ae5b6.png)
查看日志的变化
![c51d37a0b459221e486723811b5b1aef.png](https://img-blog.csdnimg.cn/img_convert/c51d37a0b459221e486723811b5b1aef.png)
我们可以将项目部署到虚拟机中使用
我们再虚拟机中准备一个Tomcat
![87ef7b41aeef3e85fd1e8b077f9088d3.png](https://img-blog.csdnimg.cn/img_convert/87ef7b41aeef3e85fd1e8b077f9088d3.png)
解压
tar -zxvf apache-tomcat-8.5.24.tar.gz -C /opt/bigdata/
![acf6366b5ef77ec4455ceba78edb7ea2.png](https://img-blog.csdnimg.cn/img_convert/acf6366b5ef77ec4455ceba78edb7ea2.png)
将项目打包sdk_test.war
![9ecde397f64dab6689351dbe8c2410ce.png](https://img-blog.csdnimg.cn/img_convert/9ecde397f64dab6689351dbe8c2410ce.png)
将sdk_test.war拷贝到Tomcat下webapps目录
cp sdk_test.war /opt/bigdata/apache-tomcat-8.5.24/webapps/
![f3256c0aa747ebd073460dff38228d31.png](https://img-blog.csdnimg.cn/img_convert/f3256c0aa747ebd073460dff38228d31.png)
启动tomcat
bin/startup.sh
![e1cf4a42f77d482ac6cbdd6ff266cbbe.png](https://img-blog.csdnimg.cn/img_convert/e1cf4a42f77d482ac6cbdd6ff266cbbe.png)
重新查看webapps,多了sdk_test
![3aea3721ea09fce0b9a1c805afdddef6.png](https://img-blog.csdnimg.cn/img_convert/3aea3721ea09fce0b9a1c805afdddef6.png)
在浏览器访问
http://masterhbase:8080/sdk_test/demo.html
![7f06d891c7f0a22785f65cac819bddc7.png](https://img-blog.csdnimg.cn/img_convert/7f06d891c7f0a22785f65cac819bddc7.png)
点击demo,后台日志也可以出现
![6fc8cceb033fa7a661116d0d1d6c355f.png](https://img-blog.csdnimg.cn/img_convert/6fc8cceb033fa7a661116d0d1d6c355f.png)
数据上传
(1)shell脚本发送日志数据(日志量较小)
(2)flume上传到hdfs(日志量较大)
shell脚本发送日志数据
在nginx目录下创建一个目录:mkdir scripts
![f1611808903d93de7e67b6f4d73ca0b4.png](https://img-blog.csdnimg.cn/img_convert/f1611808903d93de7e67b6f4d73ca0b4.png)
创建脚本:vim cut_nginx_log.sh
![f31af31823c9794a0cb39679a64c285a.png](https://img-blog.csdnimg.cn/img_convert/f31af31823c9794a0cb39679a64c285a.png)
授权chmod 755 cut_nginx_log.sh
![71e2c4942c95f74a677b5a731af03162.png](https://img-blog.csdnimg.cn/img_convert/71e2c4942c95f74a677b5a731af03162.png)
一些命令
date +"%Y%m%d" 今天的日期
date -d "1 day ago" +"%Y%m%d" 昨天的日期
date -d "-1 day" +"%Y%m%d" 昨天的日期
编写脚本
#!/bin/bash
#获取昨天日期
YESTERDAY=$(date -d "1 day ago" +"%Y%m%d")
#定义日志目录
DATALOG=/opt/bigdata/nginx-1.12.2/logs
#切割昨天的日志
/bin/mv ${DATALOG}/access.log ${DATALOG}/access_${YESTERDAY}.log
#重启Nginx服务器生产access.log文件
/opt/bigdata/nginx-1.12.2/sbin/nginx -s reload
![924b925e0d88a00fcec5d43167676434.png](https://img-blog.csdnimg.cn/img_convert/924b925e0d88a00fcec5d43167676434.png)
执行下脚本,没出现问题
![69e6e0a38c8f9063ed77e49d771fdd0f.png](https://img-blog.csdnimg.cn/img_convert/69e6e0a38c8f9063ed77e49d771fdd0f.png)
我们查看日志,已经被切割了
![e31be4de838c56ad7300195d7324f684.png](https://img-blog.csdnimg.cn/img_convert/e31be4de838c56ad7300195d7324f684.png)
可以定义一个crontab定时任务
crontab -e
00 00 * * * /opt/bigdata/nginx-1.12.2/scripts/cut_nginx_log.sh
![c9ed13a236bd9e0f0f125cfa6f1fa1fe.png](https://img-blog.csdnimg.cn/img_convert/c9ed13a236bd9e0f0f125cfa6f1fa1fe.png)
创建脚本:vim put_log_hdfs.sh
![767ad16a0d88d0cd91ef75c50342f0e2.png](https://img-blog.csdnimg.cn/img_convert/767ad16a0d88d0cd91ef75c50342f0e2.png)
授权chmod 755 put_log_hdfs.sh
![1478f1b5dd656ddabe4adb44d057a5bf.png](https://img-blog.csdnimg.cn/img_convert/1478f1b5dd656ddabe4adb44d057a5bf.png)
编写脚本
#!/bin/bash
#获取昨天日期
YESTERDAY=$(date -d "1 day ago" +"%Y%m%d")
#定义日志目录
DATALOG=/opt/bigdata/nginx-1.12.2/logs
#定义HADOOP_HOME
HADOOP_HOME=/opt/bigdata/hadoop-2.7.3
#将日志上传到hdfs
${HADOOP_HOME}/bin/hdfs dfs -put ${DATALOG}/access_${YESTERDAY}.log /nginx_log
![eceb82d96ffc108aa818b8da9e49902a.png](https://img-blog.csdnimg.cn/img_convert/eceb82d96ffc108aa818b8da9e49902a.png)
执行脚本
![2ac9d2003fb615e9f82be391f823fdc2.png](https://img-blog.csdnimg.cn/img_convert/2ac9d2003fb615e9f82be391f823fdc2.png)
查看HDFS上,数据已经上传
![4b8b3445cb05b875612e393232c4b739.png](https://img-blog.csdnimg.cn/img_convert/4b8b3445cb05b875612e393232c4b739.png)
同样可以加入定时
定时执行crontab:crontab –e
00 01 * * * /opt/bigdata/nginx-1.12.2/scripts/put_log_hdfs.sh
这里就不写了
查看任务:crontab –l
需要重启crontab:service crond restart
![456b8b665418d29902d2f158eb6df6ba.png](https://img-blog.csdnimg.cn/img_convert/456b8b665418d29902d2f158eb6df6ba.png)
flume上传到hdfs
创建flume配置文件
touch flume-nginx-hdfs.properties
![7d6c98418160ce74177b921c5dcac79b.png](https://img-blog.csdnimg.cn/img_convert/7d6c98418160ce74177b921c5dcac79b.png)
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -f /opt/bigdata/nginx-1.12.2/logs/access_20200113.log
# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://masterhbase:8082/flume/nginxlog/roll/%y%m%d/%H
a1.sinks.k1.hdfs.rollInterval = 600
a1.sinks.k1.hdfs.rollSize = 1048576
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.minBlockReplicas = 1
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 1
a1.sinks.k1.hdfs.roundUnit = hour
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
![cac22fe0c550ca10a025585864f7261c.png](https://img-blog.csdnimg.cn/img_convert/cac22fe0c550ca10a025585864f7261c.png)
source类:
exec 监控文件:access.log
Spooling Directory 监控目录:spoolDir=nginx-1.12.2/logs
channel类:
memory: 比较吃内存,但是速度比较快,数据不安全
file:文件比较安全,但是传输速度较慢
sink类:
hdfs:离线分析以及数据备份
kafka:流式计算 storm/spark
执行
bin/flume-ng agent -n a1 -c conf -f conf/flume-nginx-hdfs.properties -Dflume.root.logger=INFO,console
![92c0c49cdf107b8c16c4bc0c18f9fd8a.png](https://img-blog.csdnimg.cn/img_convert/92c0c49cdf107b8c16c4bc0c18f9fd8a.png)
可以看到数据已经上传了
![eb8a7f801f6ac07cbe4ceef18f6a8c76.png](https://img-blog.csdnimg.cn/img_convert/eb8a7f801f6ac07cbe4ceef18f6a8c76.png)