离线数仓(二)【用户行为日志采集平台搭建】(1)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建

1、用户行为日志概述

       用户行为日志的内容,主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点

       目前主流的埋点方式,有代码埋点(前端/后端)、可视化埋点全埋点等。

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

目前用的比较多的是全埋点,但是毕竟使用第三方的 SDK 可能出现数据泄露的风险。

2、用户行为日志内容

本项目收集和分析的用户行为信息主要有页面浏览记录、动作记录、曝光记录、启动记录和错误记录。

2.1、页面浏览记录

       页面浏览记录,记录的是访客对页面的浏览行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息及页面信息等。

  • 用户 id:每个账号分配一个唯一的 id
  • 时间信息:用户跳入页面的时间和跳出的时间,以此来评估用户对该商品的感兴趣程度等等指标
  • 设备信息:获取用户的设备信息,可以用来做广告推荐等

2.2、动作记录

       动作记录,记录的是用户的业务操作行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息 及动作目标对象信息等。


  • 动作目标对象相关信息,比如用户点击了哪个模块 (优惠券?哪个优惠价)

2.3、曝光记录

       曝光记录,记录的是曝光行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息及曝光对象信息等。


  • 曝光相关信息:曝光指的是在当前界面展示过的内容

2.4、启动记录

启动记录,记录的是用户启动应用的行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息、启动类型及开屏广告信息等。


  • 启动类型:用户是点击软件按钮启动还是推送通知启动
  • 开屏广告信息:打开软件时广告界面的广告id

2.5、错误记录

       启动记录,记录的是用户在使用应用过程中的报错行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息、以及可能与报错相关的页面信息、动作信息、曝光信息和动作信息。

3、用户行为日志格式

       上面我们知道了各种用户行为日志的类型,我们可以发现,有很多记录其实是重复的,比如用户信息、设别信息、渠道信息 ... 存储重复的记录不仅没有意义而且占用磁盘空间,那么应该怎样存储呢?

       我们的日志结构大致可分为两类,一是页面日志,二是启动日志。

3.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                --跳入时间戳
}

3.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    --日志产生的时间
}

4、模拟数据

模拟数据我们直接使用封装好的日志生成 jar 包:

java -jar gmall2020-mock-log-2021-10-10.jar

我们需要在 hadoop102 和 hadoop103 上都配置好日志数据源,所以为了方便还需要写一个脚本:

#!/bin/bash
for i in hadoop102 hadoop103; do
    echo "========== $i =========="
    ssh $i "cd /opt/module/applog/; java -jar gmall2020-mock-log-2021-10-10.jar >/dev/null 2>&1 &"
done 

       我们在 hadoop102 和 hadoop103 的 /opt/module/applog/log 看到最新生成的日志,这个日志文件是按照时间滚动的


用户行为日志数据采集模块

1、数据通道

       现在,我们需要把用户行为日志数据通过 Flume 传输到 Kafka 的日志 topic 中。

       上面我们的 hadoop102 和 hadoop103 已经具备了生成日志的能力,之前我们说 flume 是但节点安装,确实没错,但是这里因为我们是两个地方产生日志,如果跨节点传输日志那样效率太低了,所以索性就直接安装两个 flume 即可。

这里我们回顾一下之前学习 flume 的时候讲到的 source ,有

  • taildir:适合用于监听多个实时追加的文件(支持不同目录的不同文件),并且能够实现断点续传
  • netcat:监听 netcat 端口发生过来的内容
  • exec:适用于监控一个实时追加的文件,不能实现断点续传
  • spooling:适合用于同步新文件,支持断点续传,但是它监听的是文件夹而不是文件,不适合对实时追加日志的文件进行监听并同步
  • avro:当需要多个 flume 节点之间传输日志时,之间必须使用 avro sourcce 和 avro sink
  • kafka:kafka source 其实就是一个 Kafka 消费者,从Kafka 的 topic 中读取数据:

还有 channel:

  • file :日志数据缓存在本地磁盘,并且在内存中保存有索引,磁盘中同样保存两份索引来保证读取的速度
  • memory:日志缓存在内存中,读取速度快,但是不安全
  • kafka:实际使用最多的

kafka channel 其实就是把 Event 保存到了 Kafka 集群当中,它支持 3 种结构:

1. 结合 source 和 sink

2. 只结合 source

3. 只结合 sink

离线数仓(二)【用户行为日志采集平台搭建】(2)https://developer.aliyun.com/article/1532361

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
2月前
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
161 6
|
3月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
17天前
|
监控 测试技术 开发者
一行代码改进:Logtail的多行日志采集性能提升7倍的奥秘
一个有趣的现象引起了作者的注意:当启用行首正则表达式处理多行日志时,采集性能出现下降。究竟是什么因素导致了这种现象?本文将探索Logtail多行日志采集性能提升的秘密。
|
1月前
|
SQL 存储 数据挖掘
快速入门:利用AnalyticDB构建实时数据分析平台
【10月更文挑战第22天】在大数据时代,实时数据分析成为了企业和开发者们关注的焦点。传统的数据仓库和分析工具往往无法满足实时性要求,而AnalyticDB(ADB)作为阿里巴巴推出的一款实时数据仓库服务,凭借其强大的实时处理能力和易用性,成为了众多企业的首选。作为一名数据分析师,我将在本文中分享如何快速入门AnalyticDB,帮助初学者在短时间内掌握使用AnalyticDB进行简单数据分析的能力。
54 2
|
2月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
2月前
|
DataWorks 数据挖掘 关系型数据库
基于hologres搭建轻量OLAP分析平台解决方案评测
一文带你详细了解基于hologres搭建轻量OLAP分析平台解决方案的优与劣
440 9
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
56 1
|
3月前
|
数据可视化 数据挖掘 OLAP
基于 Hologres 搭建轻量 OLAP 分析平台评测报告
【9月更文第6天】开作为互联网手游公司的产品经理和项目经理,数据分析对于我们的业务至关重要。我们一直在寻找高效、可靠的数据分析解决方案,以更好地了解玩家行为、优化游戏体验和提升运营效率。近期,我们体验并部署了《基于 Hologres 搭建轻量 OLAP 分析平台》解决方案,以下是我们对该方案的评测报告。
93 12
基于 Hologres 搭建轻量 OLAP 分析平台评测报告
|
3月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
3月前
|
SQL 人工智能 DataWorks
【云栖实录】DataWorks:新一代智能湖仓一体数据开发与治理平台
在9月21日的云栖大会上,DataWorks发布了新一代智能湖仓一体数据开发与治理平台。DataWorks历经Kubernetes改造与云原生调度系统的优化,实现了资源组全面Serverless化,降低了使用成本,最高可节省40%。新推出的DataWorks Data Studio,支持多种计算引擎,提供更开放的云原生WebIDE,提升开发效率。DataWorks Copilot智能助手也得到升级,支持多种SQL方言和Python代码生成,平均提升数据开发效率35%。此外,DataWorks还推出了全方位的数据资产治理体系,涵盖业务和技术视角,助力企业实现数据智能化管理和转型。
399 0
【云栖实录】DataWorks:新一代智能湖仓一体数据开发与治理平台
下一篇
DataWorks