第3章 数据生成模块3.1目标数据我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据、播放数据和错误数据。3.1.1页面页面数据主要记录一个页面的用户访问情况包括访问时间、停留时间、页面路径等信息。1日志范例如下{actions: […],common: {…},displays: […],page: {during_time: 11622,item: 57,item_type: course_id,last_page_id: course_list,page_id: course_detail},ts: 1645529967261}2所有页面类型如下home(首页)course_list(列表页)course_detail(商品详情)chapter_video(章节视频)cart(购物车)order(下单结算)payment(支付页面)exam(考试)mine(我的)3所有页面对象类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.2事件事件数据主要记录应用内一个具体操作行为包括操作类型、操作对象、操作对象描述等信息。1日志范例{actions: [{action_id: favor_add,item: 57,item_type: course_id,ts: 1645529967261},{action_id: cart_add,item: 57,item_type: course_id,ts: 1645529967261}],common: {…},displays: […],page: {…},ts: 1645529967261}注对于下单、支付等业务数据可从业务数据库获取。2所有动作类型如下favor_add新增收藏review_add新增课程评价comment_add新增章节评价cart_add加购物车3所有动作目标类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.3曝光曝光数据主要记录页面所展示的内容包括曝光对象曝光类型等信息。1曝光日志范例{actions: […],common: {…},displays: [{display_type: query,item: 6,item_type: course_id,order: 1,pos_id: 4},{display_type: query,item: 8,item_type: course_id,order: 2,pos_id: 5},{display_type: query,item: 1,item_type: course_id,order: 3,pos_id: 4},{display_type: query,item: 10,item_type: course_id,order: 4,pos_id: 1},{display_type: promotion,item: 4,item_type: course_id,order: 5,pos_id: 4},{display_type: promotion,item: 4,item_type: course_id,order: 6,pos_id: 4},{display_type: query,item: 9,item_type: course_id,order: 7,pos_id: 1}],page: {…},ts: 1645529967261}2所有曝光类型如下promotion(商品推广)recommend(算法推荐商品)query(查询结果商品)activity(促销活动)3所有曝光对象类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.4启动启动数据记录应用的启动信息。1启动日志范例:{common: {…},start: {entry: notice,first_open: 0,loading_time: 17970,open_ad_id: 20,open_ad_ms: 2876,open_ad_skip_ms: 0},ts: 1645532980257}2所有启动入口类型如下icon(图标),notice(通知),install(安装后启动);3.1.5播放播放日志记录播放信息。1播放日志范例{appVideo: {play_sec: 19,video_id: 3904},common: {…},ts: 1645526307119}3.1.6错误错误数据记录应用使用过程中的错误信息包括错误编号及错误信息。上述五种日志都有可能包含错误信息此处仅对 appVideo 的错误日志进行展示。1错误日志范例{appVideo:{…},common:{…},err:{error_code:3485,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts:1645538276217}3.2数据埋点3.2.1主流埋点方式了解目前主流的埋点方式有代码埋点前端/后端、可视化埋点、全埋点三种。代码埋点是通过调用埋点SDK函数在需要埋点的业务逻辑功能位置调用接口上报埋点数据。例如我们对页面中的某个按钮埋点后当这个按钮被点击时可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口来发送数据。可视化埋点只需要研发人员集成采集 SDK不需要写埋点代码业务人员就可以通过访问分析平台的“圈选”功能来“圈”出需要对用户行为进行捕捉的控件并对该事件进行命名。圈选完毕后这些配置会同步到各个用户的终端上由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。全埋点是通过在产品中嵌入SDK前端自动采集页面上的全部用户行为事件上报埋点数据相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。3.2.2埋点数据上报时机埋点数据上报时机包括两种方式。方式一在离开该页面时上传在这个页面产生的所有数据页面、事件、曝光、错误等。优点批处理减少了服务器接收数据压力。缺点不是特别及时。方式二每个事件、动作、错误等产生后立即发送。优点响应及时。缺点对服务器接收数据压力比较大。本次项目采用方式一埋点。3.2.3埋点数据日志结构我们的日志结构大致可分为三类一是普通页面埋点日志二是启动日志三是播放日志。普通页面日志结构如下每条日志包含了当前页面的页面信息所有事件动作、所有曝光信息以及错误信息。除此之外还包含了一系列公共信息包括设备信息地理位置应用信息等即下边的common字段。1普通页面埋点日志格式{actions: [{action_id: favor_add,item: 57,item_type: course_id,ts: 1645529967261},{action_id: cart_add,item: 57,item_type: course_id,ts: 1645529967261}],common: {ar: 16,ba: iPhone,ch: Appstore,is_new:1,--是否首日使用首次使用的当日该字段值为1过了24:00该字段置为0。md: iPhone 8,mid: mid_161,os: iOS 13.3.1,sc: 2,sid: 9acef85b-067d-49f9-9520-a0dda943304e,uid: 272,vc: v2.1.134},displays: [{display_type: query,item: 6,item_type: course_id,order: 1,pos_id: 4},{display_type: query,item: 8,item_type: course_id,order: 2,pos_id: 5},{display_type: query,item: 1,item_type: course_id,order: 3,pos_id: 4},{display_type: query,item: 10,item_type: course_id,order: 4,pos_id: 1},{display_type: promotion,item: 4,item_type: course_id,order: 5,pos_id: 4},{display_type: promotion,item: 4,item_type: course_id,order: 6,pos_id: 4},{display_type: query,item: 9,item_type: course_id,order: 7,pos_id: 1}],page: {during_time: 11622,item: 57,item_type: course_id,last_page_id: course_list,page_id: course_detail},err:{error_code:1359,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645529967261}2启动日志格式启动日志结构相对简单主要包含公共信息启动信息和错误信息。{common: {ar: 1,ba: Redmi,ch: wandoujia,is_new: 1,md: Redmi k30,mid: mid_356,os: Android 11.0,sc: 2,sid: 76909678-abaf-41c4-916d-a0a72f546bc1,uid: 161,vc: v2.1.134},start: {entry: notice,first_open: 0,loading_time: 17970,open_ad_id: 20,open_ad_ms: 2876,open_ad_skip_ms: 0},err:{error_code:2959,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645532980257}3播放日志播放日志结构相对简单主要包含公共信息播放信息和错误信息。{appVideo: {play_sec: 19,video_id: 3904},common: {ar: 4,ba: Sumsung,ch: oppo,is_new: 0,md: Sumsung Galaxy S20,mid: mid_253,os: Android 11.0,sc: 1,sid: 47157c4a-4790-4b9a-a859-f0d36cd62a10,uid: 329,vc: v2.1.134},err:{error_code:3485,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645526307119}
在线教育之采集系统 day02
第3章 数据生成模块3.1目标数据我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据、播放数据和错误数据。3.1.1页面页面数据主要记录一个页面的用户访问情况包括访问时间、停留时间、页面路径等信息。1日志范例如下{actions: […],common: {…},displays: […],page: {during_time: 11622,item: 57,item_type: course_id,last_page_id: course_list,page_id: course_detail},ts: 1645529967261}2所有页面类型如下home(首页)course_list(列表页)course_detail(商品详情)chapter_video(章节视频)cart(购物车)order(下单结算)payment(支付页面)exam(考试)mine(我的)3所有页面对象类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.2事件事件数据主要记录应用内一个具体操作行为包括操作类型、操作对象、操作对象描述等信息。1日志范例{actions: [{action_id: favor_add,item: 57,item_type: course_id,ts: 1645529967261},{action_id: cart_add,item: 57,item_type: course_id,ts: 1645529967261}],common: {…},displays: […],page: {…},ts: 1645529967261}注对于下单、支付等业务数据可从业务数据库获取。2所有动作类型如下favor_add新增收藏review_add新增课程评价comment_add新增章节评价cart_add加购物车3所有动作目标类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.3曝光曝光数据主要记录页面所展示的内容包括曝光对象曝光类型等信息。1曝光日志范例{actions: […],common: {…},displays: [{display_type: query,item: 6,item_type: course_id,order: 1,pos_id: 4},{display_type: query,item: 8,item_type: course_id,order: 2,pos_id: 5},{display_type: query,item: 1,item_type: course_id,order: 3,pos_id: 4},{display_type: query,item: 10,item_type: course_id,order: 4,pos_id: 1},{display_type: promotion,item: 4,item_type: course_id,order: 5,pos_id: 4},{display_type: promotion,item: 4,item_type: course_id,order: 6,pos_id: 4},{display_type: query,item: 9,item_type: course_id,order: 7,pos_id: 1}],page: {…},ts: 1645529967261}2所有曝光类型如下promotion(商品推广)recommend(算法推荐商品)query(查询结果商品)activity(促销活动)3所有曝光对象类型如下course_id(课程Id)keyword(搜索关键词)video_id(视频id)chapter_id(章节id)coupon_id(购物券id)order_id(订单id)paper_id(考卷id)exam_id(考试id)3.1.4启动启动数据记录应用的启动信息。1启动日志范例:{common: {…},start: {entry: notice,first_open: 0,loading_time: 17970,open_ad_id: 20,open_ad_ms: 2876,open_ad_skip_ms: 0},ts: 1645532980257}2所有启动入口类型如下icon(图标),notice(通知),install(安装后启动);3.1.5播放播放日志记录播放信息。1播放日志范例{appVideo: {play_sec: 19,video_id: 3904},common: {…},ts: 1645526307119}3.1.6错误错误数据记录应用使用过程中的错误信息包括错误编号及错误信息。上述五种日志都有可能包含错误信息此处仅对 appVideo 的错误日志进行展示。1错误日志范例{appVideo:{…},common:{…},err:{error_code:3485,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts:1645538276217}3.2数据埋点3.2.1主流埋点方式了解目前主流的埋点方式有代码埋点前端/后端、可视化埋点、全埋点三种。代码埋点是通过调用埋点SDK函数在需要埋点的业务逻辑功能位置调用接口上报埋点数据。例如我们对页面中的某个按钮埋点后当这个按钮被点击时可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口来发送数据。可视化埋点只需要研发人员集成采集 SDK不需要写埋点代码业务人员就可以通过访问分析平台的“圈选”功能来“圈”出需要对用户行为进行捕捉的控件并对该事件进行命名。圈选完毕后这些配置会同步到各个用户的终端上由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。全埋点是通过在产品中嵌入SDK前端自动采集页面上的全部用户行为事件上报埋点数据相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。3.2.2埋点数据上报时机埋点数据上报时机包括两种方式。方式一在离开该页面时上传在这个页面产生的所有数据页面、事件、曝光、错误等。优点批处理减少了服务器接收数据压力。缺点不是特别及时。方式二每个事件、动作、错误等产生后立即发送。优点响应及时。缺点对服务器接收数据压力比较大。本次项目采用方式一埋点。3.2.3埋点数据日志结构我们的日志结构大致可分为三类一是普通页面埋点日志二是启动日志三是播放日志。普通页面日志结构如下每条日志包含了当前页面的页面信息所有事件动作、所有曝光信息以及错误信息。除此之外还包含了一系列公共信息包括设备信息地理位置应用信息等即下边的common字段。1普通页面埋点日志格式{actions: [{action_id: favor_add,item: 57,item_type: course_id,ts: 1645529967261},{action_id: cart_add,item: 57,item_type: course_id,ts: 1645529967261}],common: {ar: 16,ba: iPhone,ch: Appstore,is_new:1,--是否首日使用首次使用的当日该字段值为1过了24:00该字段置为0。md: iPhone 8,mid: mid_161,os: iOS 13.3.1,sc: 2,sid: 9acef85b-067d-49f9-9520-a0dda943304e,uid: 272,vc: v2.1.134},displays: [{display_type: query,item: 6,item_type: course_id,order: 1,pos_id: 4},{display_type: query,item: 8,item_type: course_id,order: 2,pos_id: 5},{display_type: query,item: 1,item_type: course_id,order: 3,pos_id: 4},{display_type: query,item: 10,item_type: course_id,order: 4,pos_id: 1},{display_type: promotion,item: 4,item_type: course_id,order: 5,pos_id: 4},{display_type: promotion,item: 4,item_type: course_id,order: 6,pos_id: 4},{display_type: query,item: 9,item_type: course_id,order: 7,pos_id: 1}],page: {during_time: 11622,item: 57,item_type: course_id,last_page_id: course_list,page_id: course_detail},err:{error_code:1359,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645529967261}2启动日志格式启动日志结构相对简单主要包含公共信息启动信息和错误信息。{common: {ar: 1,ba: Redmi,ch: wandoujia,is_new: 1,md: Redmi k30,mid: mid_356,os: Android 11.0,sc: 2,sid: 76909678-abaf-41c4-916d-a0a72f546bc1,uid: 161,vc: v2.1.134},start: {entry: notice,first_open: 0,loading_time: 17970,open_ad_id: 20,open_ad_ms: 2876,open_ad_skip_ms: 0},err:{error_code:2959,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645532980257}3播放日志播放日志结构相对简单主要包含公共信息播放信息和错误信息。{appVideo: {play_sec: 19,video_id: 3904},common: {ar: 4,ba: Sumsung,ch: oppo,is_new: 0,md: Sumsung Galaxy S20,mid: mid_253,os: Android 11.0,sc: 1,sid: 47157c4a-4790-4b9a-a859-f0d36cd62a10,uid: 329,vc: v2.1.134},err:{error_code:3485,msg: Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.atguigu.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)},ts: 1645526307119}