前端请求SDK_离线项目实践之sdk数据收集

df86694b51b626ac40b61496b2d930f1.png

数据收集的方案

收集的方式:通过在客户端嵌入SDK的方式收集用户行为数据(SDK:一段收集数据的代码,放到客户端)

以事件作为数据收集的最小单位,当用户在系统或者APP上触发定义的事件的时候,产生数据,SDK将产生的数据发送到Nginx服务器上(通过url发送)

js sdk的事件(模拟前端)

launch事件:标识访客第一次访问的事件

pageView事件:标识用户浏览页面的事件

event事件:包容性最强的事件

chargeRequest事件:标识订单产生事件

找到我们的项目中的文件analytics.js,阅读分析下

7eaac82c0a6478e1ef7504258f0c95bc.png

修改这个地址

72ed6d424d907565e786eb7b1ce16c1e.png

部署启动访问

http://localhost:8080/sdk_test/

502dacd0a8b4f703be4f8708b100cb3e.png

后台监控nginx的日志

9f7307b819ff1de5897e0465c553e65f.png

点击页面

c618b79db7a4e4ff2528b9f628fdcedf.png

观察后台日志,有新的日志出现

5ee3342162e03e7be63720d6a770ffd6.png

java sdk的事件(模拟后端)

chargeSuccess事件:标识订单支付成功事件

chargeRefund事件:标识订单退款事件

4d2c7cd5939524cde10a3e4c83f6d332.png

修改机器IP

9fd5e182ed9764f6fdb3e96eeb1b67e4.png

启动主方法

36532cc8e7a3d086070b4bbd6cab0c61.png

同样检测nginx日志,发现日志也在读取

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

sbin/nginx -t 检测nginx.conf是否配置ok

431fd04def6e7506301d0a66a298e9e8.png

定义好后重启Nginx服务器

sbin/nginx -s reload

2deae355debcc18fd3a93a9a16d1e278.png

我们重新点击页面采集下数据

61943d6a34c51014e60c4904358ae5b6.png

查看日志的变化

c51d37a0b459221e486723811b5b1aef.png

我们可以将项目部署到虚拟机中使用

我们再虚拟机中准备一个Tomcat

87ef7b41aeef3e85fd1e8b077f9088d3.png

解压

tar -zxvf apache-tomcat-8.5.24.tar.gz -C /opt/bigdata/

acf6366b5ef77ec4455ceba78edb7ea2.png

将项目打包sdk_test.war

9ecde397f64dab6689351dbe8c2410ce.png

将sdk_test.war拷贝到Tomcat下webapps目录

cp sdk_test.war /opt/bigdata/apache-tomcat-8.5.24/webapps/

f3256c0aa747ebd073460dff38228d31.png

启动tomcat

bin/startup.sh

e1cf4a42f77d482ac6cbdd6ff266cbbe.png

重新查看webapps,多了sdk_test

3aea3721ea09fce0b9a1c805afdddef6.png

在浏览器访问

http://masterhbase:8080/sdk_test/demo.html

7f06d891c7f0a22785f65cac819bddc7.png

点击demo,后台日志也可以出现

6fc8cceb033fa7a661116d0d1d6c355f.png

数据上传

(1)shell脚本发送日志数据(日志量较小)

(2)flume上传到hdfs(日志量较大)

shell脚本发送日志数据

在nginx目录下创建一个目录:mkdir scripts

f1611808903d93de7e67b6f4d73ca0b4.png

创建脚本:vim cut_nginx_log.sh

f31af31823c9794a0cb39679a64c285a.png

授权chmod 755 cut_nginx_log.sh

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

执行下脚本,没出现问题

69e6e0a38c8f9063ed77e49d771fdd0f.png

我们查看日志,已经被切割了

e31be4de838c56ad7300195d7324f684.png

可以定义一个crontab定时任务

crontab -e

00 00 * * * /opt/bigdata/nginx-1.12.2/scripts/cut_nginx_log.sh

c9ed13a236bd9e0f0f125cfa6f1fa1fe.png

创建脚本:vim put_log_hdfs.sh

767ad16a0d88d0cd91ef75c50342f0e2.png

授权chmod 755 put_log_hdfs.sh

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

执行脚本

2ac9d2003fb615e9f82be391f823fdc2.png

查看HDFS上,数据已经上传

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

flume上传到hdfs

创建flume配置文件

touch flume-nginx-hdfs.properties

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

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

可以看到数据已经上传了

eb8a7f801f6ac07cbe4ceef18f6a8c76.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值