自动采集数据(埋点与无埋点采集?会话粒度的数据怎么获取?)
优采云 发布时间: 2021-12-22 07:01自动采集数据(埋点与无埋点采集?会话粒度的数据怎么获取?)
问题
用户浏览网站、App或小程序采集的基本行为(浏览、点击、搜索、采集等)数据如何?如何获取会话粒度数据?埋点和无埋点采集?
背景
数据采集是整个数据分析的前奏,直接关系到后续数据呈现的准确性。本文重点介绍网站和H5编写的微信服务号,旨在统一用户行为数据采集方法,形成一致的SDK编码标准。
目前主流数据采集有两种方式:埋点和不埋点。所谓嵌入方式,就是在网站、APP或小程序的前端或后端某处嵌入一段js或java(scala、c++等)代码,对用户基本情况进行监控、采集和报告行为数据到服务器。埋点采集的最大缺点是每次分析一个业务指标都需要手动添加一段代码,后期开发运维成本高。但是不需要添加一段SDK来实时、完整、自动地采集用户行为数据,可以大大简化数据的成本采集,但技术瓶颈比较高。对于无埋点的原理及应用,
该方案是基于埋点法实现的。
方案 一、 系统结构
SDK组件:在网站或app的前后端嵌入点监控获取用户的原生行为数据。
Nginx 组件:采集指定格式的 sdk 发送的数据。
Flume组件:监控Ng服务器的日志目录,根据数据实时推送到Kafka,离线数据推送到HDFS的特点进行推送。
hdfs组件:存放采集之后的原创离线数据。
Kafka组件:存储采集之后的原创实时数据。
整个数据采集流程从渠道PC、adroid&ios、微信服务号三大入口开始。通过在门户前端集成js SDK,采集用户的基本行为数据,并将HTTP请求发送到Nginx服务器(如?requestdata,其中requestdata为json格式的日志数据)。Nginx在本地目录下按照指定格式生成日志文件,Flume监控并主动拉取新的日志数据,根据业务场景的不同实时性要求下沉到不同的接收源:hdfs-离线数据,kafka - 实时数据。
注意:Flume 直接从 Nginx 生产环境拉取日志数据,会影响系统性能。后面考虑在Nginx和Flume之间加一层FTP服务器:Nginx在空闲的时候主动上报日志数据给FTP,Flume*敏*感*词*获取FTP。记录数据。
二、SDK 介绍2.1 工作原理
基于事件驱动,根据采集的数据类型不同,分为三种事件:Register、PageView、自定义js和java事件。
js SDK和java SDK工作流程图
注意:
1),用UUID代替IP地址作为用户的思想标识符?如果使用拨号上网,用户的IP会发生变化,多个IP地址可能对应同一个用户。
2),在前端生成会话ID,而不是从数据库中读取。
2.2 API 说明
这部分以PageView事件为例介绍api的基本格式。
a) 常用参数说明。不同的api所涉及的参数不尽相同,但都有一些共同的参数:
b) PageView 事件描述
当用户访问页面/刷新页面时触发此事件。这个事件会自动调用,也可以由程序员手动调用:
操作手册
a) 编写 API
根据业务分析需求,编译相关采集方法。模板代码被省略。
b) 集成 SDK
js sdk的集成分为两种方式,第一种是直接使用script标签引入js,第二种是页面加载完成后执行js代码,然后加载js代码:
1
2
var _aelog_ = _aelog_ || [];
// 设置_aelog_相关属性
(function(){
var aejs = document.createElement('script');
})();
Java sdk通过eclipse等内置打包工具直接打包成.jar包,然后添加到项目的依赖中。
总结
本文简要介绍了埋点采集和无埋点采集,并详细介绍了数据采集的体系结构和JS SDK的工作原理以及基本的数据请求格式。
具体的js SDK示例代码以及Nginx和Flume的配置请参考下文。
参考
1] 摆脱只关注PV和UV的误区,叶丁丁做数据分析就能解决问题
2] 非埋点技术Growing IO官网产品级应用
3]水槽官网
4] Flume+Spark+Hive+Spark SQL离线分析系统
5] 线下分析项目实战-北风Jerry Liu [特别感谢]