数据埋点 click_项目实战埋点系统初探

前言

最近杂七杂八的事情比较多,难得抽出时间来弥补一下之前的系列,欠大家的埋点系列现在开始走起来

为什么需要埋点系统

电影中

前端开发攻城狮开开心心的 coding,非常自豪的进行了业务、UI 分离开发,各种设计模式、算法优化轮番上阵,代码写的 Perfect(劳资代码天下第一),没有 BUG,程序完美,兼容性 No.1,代码能打能抗质量高。下班轻松打卡,回家看娃。

现实中

实际上,开发环境与生产环境并不能等同,并且测试的过程再完善,依然会有漏测的情况存在。考虑到用户使用客户端环境、网络环境等等一系列的不确定因素存在。

所以在开发过程中一定要记得三大原则(我胡诌的)

  1. 没有完美的代码,只有没发现的 BUG

  2. 绝对不要相信测试环境,没有一种测试环境都涵盖所有线上情况

  3. 如果线上没有一点反馈,不要怀疑,问题应该藏得很深、很深

什么是埋点系统

埋点就像城市中的摄像头,从产品的角度考虑,它可以监控到用户在我们产品里的行为轨迹,为产品的迭代、项目的稳定提供依据,WHO、WHEN、WHERE、HOW、WHAT 是埋点采集数据的基础维度。

对前端开发而言,可以监控页面资源加载性能,异常等等,提供了页面体验和健康指数,为后续性能优化提供依据,及时上报异常和发生场景。从而能够及时修正问题,提高项目质量等。

埋点可以大概分为三类:

  1. 无痕埋点 - 无差别收集页面所有信息包括页面进出、事件点击等等,需要进行数据冲洗才能获取到有用信息

  2. 可视化埋点 - 根据生成的页面结构获取特定点位,单独埋点分析

  3. 业务代码手动埋点 - 根据具体复杂的业务,除掉上述两种不能涵盖的地方进行业务代码埋点

代码埋点可视化埋点无痕埋点
典型场景无痕埋点无法覆盖到,比如需要业务数据简单规范的页面场景简单规范的页面场景,
优势业务数据明确开发成本低,运营人员可直接进行相关埋点配置无需配置,数据可回溯
不足数据不可回溯,开发成本高不能关联业务数据,数据不可回溯数据量较大,不能关联业务数据

大部分情况,我们可以通过无痕埋点收集到所有的信息数据,再配合可视化埋点,能够具体定位到某一个点位,这样大部分的埋点信息都据此分析出来。

在特殊情况下,可以多加上业务代码手动埋点,处理一下特别的场景(大部分情况是走强业务与正常的点击,刷新事件无关需要上报的信息)

埋点 SDK 开发

埋点数据收集分析

  • 事件基本数据

    • 事件发生时间

    • 发生时页面信息快照

  • 页面

    • 页面 PV,UV

    • 用户页面停留时长

    • 页面跳转事件

    • 页面进入后台

    • 用户离开页面

  • 用户信息

    • 用户 uid

    • 用户设备指纹

    • 设备信息

    • ip

    • 定位

  • 用户操作行为

    • 点击目标

    • 用户点击

  • 页面 AJAX 请求

    • 请求成功

    • 请求失败

    • 请求超时

  • 页面报错

    • 资源加载报错

    • JS 运行报错

  • 资源加载新性能

  • 图片

  • 脚本

  • 页面加载性能

上面的数据通过 3 个维度来定义埋点事件

  • ·LEVEL: 描述埋点数据的日志级别

    • INFO:一些用户操作,请求成功,资源加载等等正常的数据记录

    • ERROR:JS报错,接口报错等等错误类型的数据记录

    • DEBUG:预留开发人员通过手动调用的方式回传排除bug的数据记录

    • WARN:预留开发人员通过手动调用的方式回传非正常用户行为的的数据记录

  • CATEGORY:描述埋点数据的分类

    • WILL_MOUNT:sdk对象即将初始化加载,生成一个默认ID,跟踪全部相关事件

    • DID_MOUNTED:sdk对象初始化完成,主要获取设备指纹等等的异步操作完成

    • TRACK: 埋点SDK对象的生命周期管理整个埋点数据。

    • AJAX: AJAX相关数据

    • ERROR:页面中的异常相关数据

    • PERFORMANCE:关于性能相关数据

    • OPERATION:用户操作相关数据

  • EVENT_NAME:具体的事件名称

根据上述的维度,我们可以简单设计如下的架构

53396e18e329e2da092c2a81772134ac.png

根据上图的架构,再进行下面的具体代码开发

代理请求

在浏览器中现在主要有 2 种请求方式,一个是 XMLHttpRequest, 一个是 Fetch

代理 XMLHttpRequest
function NewXHR() {
var realXHR: any = new OldXHR(); // 代理模式里面有提到过
realXHR.id = guid()
const oldSend = realXHR.send;

realXHR.send = function (body) {
oldSend.call(this, body)
//记录埋点
}
realXHR.addEventListener('load', function () {
//记录埋点
}, false);
realXHR.addEventListener('abort', function () {
//记录埋点
}, false);

realXHR.addEventListener('error', function () {
//记录埋点
}, false);
realXHR.addEventListener('timeout', function () {
//记录埋点
}, false);

return realXHR;
}
代理 Fetch
 const oldFetch = window.fetch;
function newFetch(url, init) {
const fetchObj = {
url: url,
method: method,
body: body,
}
ajaxEventTrigger.call(fetchObj, AJAX_START);
return oldFetch.apply(this, arguments).then(function (response) {
if (response.ok) {
//记录埋点
} else {
//上报错误
}
return response
}).catch(function (error) {
fetchObj.error = error
//记录埋点
throw error
})
}

监听页面的 PVUV

在进入页面时,我们通过算法生成一个唯一 session id,作为这次埋点行为的全局 id,上报用户 id,设备指纹,设备信息。在用户未登录的情况下,通过设备指纹来计算 UV,通过 session id计算 PV

异常捕获

异常就是干扰程序的正常流程的不寻常事故

RUNTIME ERROR

JS中可以通过 window.onerrorwindow.addEventListener('error', callback) 捕捉运行时异常,一般使用window.onerror,它兼容性更好。

window.onerror = function(message, url, lineno, columnNo, error) {
const lowCashMessage = message.toLowerCase()
if(lowCashMessage.indexOf('script error') > -1) {
return
}
const detail = {
url: url
filename: filename,
columnNo: columnNo,
lineno: lineno,
stack: error.stack,
message: message
}
//记录埋点
}
Script Error

在这里我们过滤了 Script Error, 它产生的原因主要是页面中加载的第三方跨域脚本报错,比如托管在第三方 CDN 中的 js 脚本。这类问题比较难以排查。解决的方法有:

  • 打开 CORS(Cross Origin Resource Sharing,跨域资源共享),如下步骤

    • 修改Access-Control-Allow-Origin: * | 指定域名

  • 使用 try catch

      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、课程简介随着技术的飞速发展,经过多年的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各大公司目前都需要着重发展投入的技术领域。数据仓库是面向分析的集成化数据环境,为企业所有决策制定过程,提供系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。二、课程内容本次精心打造的数仓项目的课程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。三、课程目标本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。四、课程亮点本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。
数据挖掘分析项目实战是指在实际应用中使用数据挖掘技术来解决问题或提供价值。在一个数据挖掘分析项目实战中,一般会经历以下几个步骤: 1. 理解业务目标和需求:首先需要明确项目的业务目标和需求,了解需要解决的问题或提供的价值。 2. 数据收集和预处理:收集相关的数据,并对数据进行预处理,包括数据清洗、去重、缺失值处理等,以确保数据的质量和可用性。 3. 特征工程:根据业务需求和数据特点,进行特征选择、特征提取和特征转换等操作,以提取出对问题有用的特征。 4. 模型选择和建立:根据问题的性质和数据的特点,选择适合的数据挖掘模型,如基于物品的协同过滤算法。然后使用训练数据集来建立模型。 5. 模型评估和调优:使用测试数据集对建立的模型进行评估,评估模型的性能和准确度。根据评估结果,对模型进行调优,以提高模型的性能。 6. 结果解释和应用:根据模型的结果,对数据进行解释和分析,得出结论并提供相应的建议或决策支持。 在数据挖掘分析项目实战中,以上步骤是一个迭代的过程,需要不断地进行模型的优化和改进,以达到更好的结果。同时,还需要注意数据的隐私和安全保护,确保数据的合规性和保密性。 #### 引用[.reference_title] - *1* *2* *3* [python数据分析与挖掘实战(电子商务网站用户行为分析及服务推荐)](https://blog.csdn.net/m0_61463713/article/details/129941556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值