大数据---离线数仓实战项目(四)

离线数仓实战---网站流量日志分析系统

  • 一、模块开发---数据生成模块
    • 1.1、目标数据
      • 1.1.1、页面数据
      • 1.1.2、事件数据
      • 1.1.3、曝光数据
      • 1.1.4、启动数据
      • 1.1.5、错误数据
    • 1.2、数据埋点
      • 1.2.1、主流埋点方式
      • 1.2.2、埋点数据上报时机
      • 1.2.3、埋点数据日志结构
    • 1.3、模拟数据

一、模块开发—数据生成模块

在大数据—离线数仓实战项目(三)中,介绍了项目需求及架构设计,这一部分介绍数据生成模块。

1.1、目标数据

我们要收集和分析的数据主要包括页面数据事件数据曝光数据启动数据错误数据

1.1.1、页面数据

页面数据主要记录一个页面的用户访问情况,包括访问时间、停留时间、页面路径等信息。

1.1.2、事件数据

事件数据主要记录应用内一个具体操作行为,包括操作类型、操作对象、操作对象描述等信息。

1.1.3、曝光数据

曝光数据主要记录页面所曝光的内容,包括曝光对象,曝光类型等信息。

1.1.4、启动数据

启动数据记录应用的启动信息。

1.1.5、错误数据

错误数据记录应用使用
过程中的错误信息,包括错误编号及错误信息。

1.2、数据埋点

1.2.1、主流埋点方式

目前主流的埋点方式,有代码埋点(前端/后端)可视化埋点全埋点三种。
代码埋点是通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据。
可视化埋点只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。
全埋点是通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。

1.2.2、埋点数据上报时机

埋点数据上报时机包括两种方式。
方式一,在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力。缺点,不是特别及时。
方式二,每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。

1.2.3、埋点数据日志结构

我们的日志结构大致可分为两类,一是普通页面埋点日志,二是启动日志
普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。
(1)普通页面埋点日志格式

{
     
  "common": {
                       -- 公共信息
    "ar": "230000",              -- 地区编码
    "ba": "iPhone",              -- 手机品牌
    "ch": "Appstore",            -- 渠道
    "is_new": "1",--是否首日使用,首次使用的当日,该字段值为1,过了24:00,该字段置为0。
	"md": "iPhone 8",            -- 手机型号
    "mid": "YXfhjAYH6As2z9Iq", -- 设备id
    "os": "iOS 13.2.9",          -- 操作系统
    "uid": "485",                 -- 会员id
    "vc": "v2.1.134"             -- app版本号
  },
"actions": [                     --动作(事件)  
    {
     
      "action_id": "favor_add",   --动作id
      "item": "3",                   --目标id
      "item_type": "sku_id",       --目标类型
      "ts": 1585744376605           --动作时间戳
    }
  ],
  "displays": [
    {
     
      "displayType": "query",        -- 曝光类型
      "item": "3",                     -- 曝光对象id
      "item_type": "sku_id",         -- 曝光对象类型
      "order": 1,                      --出现顺序
      "pos_id": 2                      --曝光位置
    },
    {
     
      "displayType": "promotion",
      "item": "6",
      "item_type": "sku_id",
      "order": 2, 
      "pos_id": 1
    },
    {
     
      "displayType": "promotion",
      "item": "9",
      "item_type": "sku_id",
      "order": 3, 
      "pos_id": 3
    },
    {
     
      "displayType": "recommend",
      "item": "6",
      "item_type": "sku_id",
      "order": 4, 
      "pos_id": 2
    },
    {
     
      "displayType": "query ",
      "item": "6",
      "item_type": "sku_id",
      "order": 5, 
      "pos_id": 1
    }
  ],
  "page": {
                            --页面信息
    "during_time": 7648,        -- 持续时间毫秒
    "item": "3",                  -- 目标id
    "item_type": "sku_id",      -- 目标类型
    "last_page_id": "login",    -- 上页类型
    "page_id": "good_detail",   -- 页面ID
    "sourceType": "promotion"   -- 来源类型
  },
"err":{
                          --错误
"error_code": "1234",      --错误码
    "msg": "***********"       --错误信息
},
  "ts": 1585744374423  --跳入时间戳
}

(2)启动日志格式

{
     
  "common": {
     
    "ar": "370000",
    "ba": "Honor",
    "ch": "wandoujia",
    "is_new": "1",
    "md": "Honor 20s",
    "mid": "eQF5boERMJFOujcp",
    "os": "Android 11.0",
    "uid": "76",
    "vc": "v2.1.134"
  },
  "start": {
        
    "entry": "icon",         --icon手机图标  notice 通知   install 安装后启动
    "loading_time": 18803,  --启动加载时间
    "open_ad_id": 7,        --广告页ID
    "open_ad_ms": 3449,    -- 广告总共播放时间
    "open_ad_skip_ms": 1989   --  用户跳过广告时点
  },
"err":{
                          --错误
"error_code": "1234",      --错误码
    "msg": "***********"       --错误信息
},
  "ts": 1585744304000
}

1.3、模拟数据

此处使用模拟数据产生每天的日志数据,如有需要可直接到尚硅谷官网或联系我获得日志生成脚本。
我在hadoop101、hadoop102两台机器模拟生成日志数据。
模拟数据生成脚本

  1. 在在/home/用户名/bin目录下创建脚本log.sh
vim log.sh
  1. 在脚本中编写如下内容
#!/bin/bash
for i in hadoop101 hadoop102
	do
    	echo "========== $i =========="
    	ssh $i "cd jar包所在路径; java -jar 模拟日志生成的jar文件 >/dev/null 2>&1 &"
	done 
/dev/null代表Linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。
标准输入0:从键盘获得输入 /proc/self/fd/0 
标准输出1:输出到屏幕(即控制台) /proc/self/fd/1 
错误输出2:输出到屏幕(即控制台) /proc/self/fd/2
  1. 修改脚本执行权限
chmod 777 log.sh

你可能感兴趣的:(大数据,数据仓库)