离线数仓(二)【用户行为日志采集平台搭建】(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版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
9月前
|
监控 Kubernetes Go
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
712 86
|
7月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
1444 21
|
8月前
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
309 5
|
4月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
326 1
|
5月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
406 16
|
9月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
6月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
887 1
|
10月前
|
监控 算法 测试技术
突破极限: 高负载场景下的单机300M多行正则日志采集不是梦
在当今数字化时代,日志数据已成为企业 IT 运营和业务分析的关键资源。然而,随着业务规模的扩大和系统复杂度的提升,日志数据的体量呈现爆发式增长,给日志采集和处理系统带来了巨大挑战。
657 99
|
7月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。