深入理解数仓开发(一)数据技术篇之日志采集

前言

        今天开始重新回顾电商数仓项目,结合《阿里巴巴大数据之路》和尚硅谷的《剑指大数据——企业级电商数据仓库项目实战 精华版》来进行第二次深入理解学习。之前第一次学习数仓,虽然尽量放慢速度力求深入理解,但是不可能一遍掌握,尤其是关于数仓建模,那需要实打实的经验!

        好在最近发现了这两本好书,但是发现纸质版虽然很好,但是标注那么多零碎的知识点复习起来还是不够直观,所以这里用博客的形式把我第二遍学习中学到的东西记录下来(只针对我的问题)对于一些理论比如基础的工具使用,一些专业术语不多废话,最多一句带过。

        两本书对整个数仓的开发步骤基本是一致的,所以学习的时候会结合着一起学,互相弥补各自的不足(《阿里巴巴大数据之路》理论非常丰富,《剑指大数据—企业级电商数仓实战》更加贴近实战)。

        文章的结构我会按照《阿里巴巴大数据之路》来分层,每个章节总结到博客应该又是一篇万字长文。

1、📄日志采集

        电商项目的日志采集主要分为两部分:浏览器(Web 端)和无线客户端(APP、小程序),阿里巴巴对于这两部分日志的采集方案分别为 Aplus.js(浏览器)UserTrack (APP)

1.1、🌍浏览器的页面日志采集

浏览器页面的日志采集可以分为两类:

  • 页面浏览日志

        也就是一个网页被加载的次数,因为只有网页被加载成功时才会被记录为日志。页面浏览日志有两大基本指标:PV(页面浏览量)UV(用户访客数)

  • 页面交互日志

        即捕获用户的行为操作,通过采集用户的行为数据,以便量化获知用户的兴趣点和体验优化点。

1.1.1、🌍浏览器的浏览日志采集流程

  • 1️⃣用户在浏览器地址栏输入一个请求地址
  • 2️⃣浏览器发送一个 http 请求
    • 一个标准的 http 请求分为 3 部分:
      • 请求行(请求方法、URL、http协议版本)
      • 请求头(附加信息,比如 Cookie)
      • 请求体(可选,一般为空)
  • 3️⃣服务器接收并响应请求
    • 一个标标准的 http 相应也分为 3 部分:
      • 状态行(状态码,比如 200)
      • 响应头(附加信息,比如 Cookie)
      • 响应体(非空,比如 json、html、image、text、mp4等)
  • 4️⃣浏览器接受响应内容并渲染

        日志采集的动作发生在上面的第 4 步,也就是在浏览器解析响应的页面的时候。所以实现日志采集的思路就是:在 HTML 文档合适的位置插入一个日志采集节点(比如一段 js 脚本),当浏览器解析到这个节点的时候,将自动触发发送一个特定的 http 请求到日志采集服务器

具体采集日志的过程如下:

  • 1️⃣客户端日志采集
    • 由植入到 HTML 文档中的一段 JS 脚本来执行,在执行时采集当前页面参数,浏览器行为的上下文信息(比如该页面的上一页)以及一些运行换信息(比如当前浏览器的版本、屏幕大小、操作系统信息)
    • 具体的采集脚本可以是提前写入到 HTML 中,也可以是在返回响应时动态植入。
  • 2️⃣客户端日志发送
    • 采集脚本执行时,会向日志服务器发送起一个 http 请求,将采集到的日志发送到日志服务器。
    • 采集到的日志信息一般以 URL 参数的形式放在 HTTP 请求行中。
  • 3️⃣服务器端日志收集
    • 日志服务器接收到客户端发来的日志请求后,一般会立即返回一个请求成功的响应,防止客户端页面长时间等待。
    • 同时,日志服务器会把该日志的内容写入一个缓冲区内,完成对这条日志的收集。
  • 4️⃣服务器端日志解析存档
    • 日志缓冲区中的日志会被顺序读出并解析,解析出的数据会被转存到标准的日志文件,而且如果有实时分析需求的话会被注入到实时消息通道供其它后端程序读取并加工。

经过格式化的日志,为后面日志的加工和计算得以顺利进行打下了基础。

1.1.2、🌍页面的交互日志采集

        PV 日志解决了页面流量和流量来源统计的问题,但是随着业务的发展,仅了解用户访问的页面和路径,已经远远不能满足用户细分研究的需求。很多场景下更需要了解用户访问某个页面时的互动行为数据(比如鼠标焦点的变化)。所以这些行为无法通过常规的 PV 日志采集方法解决。

        交互日志采集和浏览日志采集完全不同,交互日志千变万化,呈现出高度自定义的业务特征,但是阿里巴巴有自己的一套专门用来采集交互日志的技术方案(也叫“黄金令箭”)。这里丢这个技术不多介绍,毕竟书里也没有过多透露关于这个技术的细节,大概流程就是:

  • 1️⃣业务方(比如程序员)通过这套系统(“黄金令箭”)将具体的业务场景下的交互采集点注册到系统当中,系统会自动生成与之对应的交互日志采集模板。
  • 2️⃣业务方将采集模板植入到目标页面,并将采集代码与需要监测的交互行为进行绑定。
  • 3️⃣当用户在页面交互触发制定行为时,采集代码会被触发执行并通过 HTTP 请求发送到日志服务器。
  • 4️⃣日志服务器接收到日志后将数据进行转存。

        之后,业务方就可以对这部分行为数据根据业务需求进行解析处理,并可以与浏览数据进关联运算。

1.1.3、🌍页面日志的服务器端清洗和预处理

        经过上面采集处理后的数据一般并不会直接提供给下游使用,基于下面的 4 个原因,在时效性宽松的情况下还需要对数据进行一些离线预处理。

  • 1️⃣识别流量攻击,网络爬虫和流量作弊
  • 2️⃣数据项补正
    • 对日志中一些公共并且重要的字段取值归一(将数据特征缩放到一个特定的范围当中,比如 [ 0,1 ] ,以消除不同量纲和量纲单位对数据分析结果的影响)、标准化处理或反向补正(根据新日志对旧日志中的个别数据项做回补,比如用户登录后,对用户登录之前的页面做身份信息的回补)。
  • 3️⃣无效数据剔除
    • 采集到的数据难免会存在一些无意义的数据(比如因为业务变更、采集配置不当或者冗余的数据),会消耗存储和算力。所以需要定时检查采集配置并按照配置对无效数据进行剔除。
  • 4️⃣ 日志隔离分发
    • 考虑到数据安全,一般会对一些日志进入到公共环境之前做隔离。

        至此,页面日志(浏览日志和行为日志)的采集流程就算完成了,此时的日志已经具备了结构化或半结构的特征,可以被关系型数据库装载和使用了(Hive 当然也可以)。

1.2、📲客户端的日志采集

        移动端的数据采集一方面是为了服务于开发者,帮助他们进行一些数据分析(设备信息、用户行为信息);另一方面是为了对 APP 进行不断的优化,提升用户体验。

        浏览器的网页日志是使用 JS 脚本来采集的,而这里的移动客户端的日志采集使用采集SDK 来完成。移动端的日志采集根据不同的用户行为分为不同的事件,常用的包括页面事件(页面浏览)和控件点击事件(页面交互)等。

        阿里巴巴对于移动端的日志采集使用的是 UserTrack (简称 UT)。

1.2.1、📲页面事件

 每条页面事件日志记录三类信息:

  • 设备和用户基本信息
  • 被访问页面的信息(比如商品id、所属店铺)
  • 访问的基本路径(页面来源、来源的来源)

        对于页面事件,有的采集 SDK 选择在页面创建时就发送日志。而阿里巴巴的 UT ,它提供了两个接口,分别在页面展现和页面退出时调用。当进入该店铺详情页时,调用页面展现的接口,该接口会记录一些页面进入时的状态信息,但是不发送日志。当从该店铺详情页离开时(比如退出手机淘宝,或者返回上一页),这是才会调用页面退出接口,该接口会发送日志。

        除了页面展现和退出这两个基础接口外,UT 还提供了页面扩展信息的接口,在页面离开前,该接口会给页面添加一些扩展信息,比如店铺ID、店铺类别(天猫/淘宝)等。

        上面的三个接口必须配合使用,其中页面展现和退出必须成对使用,而页面扩展接口必须在这两个接口使用的前提下使用。

日志发送的时机

        对于网页浏览日志,基本都是页面加载之后,当浏览器解析到相关的日志发送JS脚本就会自动执行发送。而对于移动端日志发送,则是在页面离开后发送,因为移动端可以对页面停留时长进行一个准确的计算。

用户行为路径还原

        在很多场景下需要采集更多的信息来减少计算分析的成本,UT 针对这种情况提功力透传参数的功能。所谓透传参数就是把当前页面的某些信息传递到下一个或者下下一个页面的日志中。比如我搜索 "手机" 之后给我推荐了很多商品,我点进去一个商品之后,我的搜索词也应该被记录到该商品日志当中去。

1.2.2、📲控件点击和其它事件

        和网页交互日志一样,交互类行为呈现出高度自定义的业务特征。对于控件点击事件,它首先也会记录基本的设备和用户信息,此外,它还会记录页面名称控件名称控件的业务参数等。

        除此之外,UT 还提供了一些默认的日志采集方法,比如自动捕获应用崩溃,应用的退出、页面的前后台切换等。

1.2.3、📲特殊场景

日志聚合:

        上面所有的场景(页面事件和交互事件)都是一个行为产生一条日志,比如一次浏览、一次点击。对于用户量很大的公司,为了平衡日志的大小,减少流量消耗、日志服务器的压力、网络传输压力等,采集 SDK 提供了聚合功能。对于一下曝光或者性能技术类的日志,可以选择对这类日志进行一个聚合,以减少对日志采集服务器的请求量,适当减小日志的大小。比如对于曝光日志,手机一次滚动屏幕可能会触发几十个商品的曝光,我们总不可能让它生成几十个曝光日志,所以采集 SDK 提供了本地聚合的功能,在客户端对这类日志进行聚合,然后再去发送到日志采集服务器。

1.2.4、📲设备标识

        这里简单介绍,设备标识用来标识用户的唯一性。对于 UV 指标,可以通过用户 ID  来进行唯一标识,但是很多网页或软件并不要求用户必须登录,所以就难以标识日志的来源。对于这种情况 PC 端可以通过 Cookie 来解决,但是移动端就难以解决了。

        对于单APP的公司,设备标识并不是非要攻克的难题,但是对于阿里巴巴有大量APP的大公司,唯一标识就必须解决。阿里巴巴使用的是 UTDID ,它是通过特定的算法来生成的,大部分情况下可以唯一标识一个设备。

1.2.5、📲日志传输

        移动端的日志传输一般先存储在客户端本地,然后伺机上传(启动后、使用过程中 、切换后台时)。触发上传日志的时机并不是单纯依靠间隔时间,还要结合日志的大小以及上传时网络的耗时不断调整上传机制。

        移动端上传日志是向日志服务器发送 POST 请求,当天的日志会被存储到当天的日志文件中。

之后当这些日志需要被下游使用时,一般会把日志放到消息队列(比如 Kafka ,阿里巴巴用的是 TimeTunel)供下游消费者(比如 Hadoop 等,阿里巴巴用的是 MaxCompute)消费。

总结

        日志采集这一部分主要是《阿里巴巴大数据之路》中专门拎出来讲,学完之后确实对数据采集的过程有了更深刻的印象和理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我在去哪儿薅到了5块钱火车票代金券,速薅

哈哈,亲爱的薅羊毛小伙伴们! 刚刚在去哪儿大佬那儿发现了一个超级薅羊毛福利!我只花了短短两分钟,就搞到了一张5块钱火车票代金券,简直是天上掉馅饼的节奏啊! 话不多说,薅羊毛的姿势给你们摆好…

代码随想录算法训练营第十六天(py)| 二叉树 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路1 迭代法 层序遍历 层序遍历的思路很简单,其结果本来就是按层数记录的,只需返回结果的长度皆可。…

【C语言回顾】联合和枚举

前言1. 联合体1.1 联合体的声明1.2 联合体的特点1.3 联合体的使用 2. 枚举2.1 枚举的声明2.2 枚举的特点2.3 枚举的使用 结语 #include<GUIQU.h> int main { 上期回顾: 【C语言回顾】结构体 个人主页&#xff1a;C_GUIQU 专栏&#xff1a;【C语言学习】 return 一键三连;…

解决法律条文的录入前判断发条冲突的需求;怎么选择NLPModel?怎么使用模型?

要在NLPModel类中实现法律条文的冲突检测功能&#xff0c;可以使用BERT模型来计算句子相似度。以下是详细的步骤&#xff0c;包括如何选择模型、训练模型以及使用模型。 选择NLP模型 根据你的需求&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Tra…

Linux多线程系列三: 生产者消费者模型,信号量使用,基于阻塞队列和环形队列的这两种生产者消费者代码的实现

Linux多线程系列三: 生产者消费者模型,信号量,基于阻塞队列和环形队列的这两种生产者消费者代码的实现 一.生产者消费者模型的理论1.现实生活中的生产者消费者模型2.多线程当中的生产者消费者模型3.理论 二.基于阻塞队列的生产者消费者模型的基础代码1.阻塞队列的介绍2.大致框架…

别说废话!说话说到点上,项目高效沟通的底层逻辑揭秘

假设你下周要在领导和同事面前汇报项目进度&#xff0c;你会怎么做&#xff1f;很多人可能会去网上搜一个项目介绍模板&#xff0c;然后按照模板来填充内容。最后&#xff0c;汇报幻灯片做了 80 页&#xff0c;自己觉得非常充实&#xff0c;但是却被领导痛批了一顿。 这样的境…

树的非递归遍历(层序)

层序是采用队列的方式来遍历的 就比如说上面这颗树 他层序的就是&#xff1a;1 24 356 void LevelOrder(BTNode* root) {Que q;QueueInit(&q);if (root){QueuePush(&q, root);}while (!QueueEmpty(&q)){BTNode* front QueueFront(&q);QueuePop(&q);print…

简析网络风险量化的价值与应用实践,如何构建网络风险预防架构

网络风险量化能够让公司董事会和高管层看清当前的网络安全风险格局&#xff1b;它还将使安全团队能够在业务需求的背景下做出网络安全决策&#xff0c;帮助组织确定哪些风险对业务构成最大的威胁&#xff0c;以及预期的经济损失将是什么。 随着网络攻击手段的日益多样化和复杂…

多模态大模型新进展——GPT-4o、Project Astra关键技术丨青源Workshop第27期

青源Workshop丨No.27 多模态大模型新进展—GPT-4o、Project Astra关键技术主题闭门研讨会 刚刚过去的两天&#xff0c;OpenAI、Google纷纷发布了多模态大模型的最新成果&#xff0c;GPT-4o、Project Astra先后亮相。 本周五&#xff08;北京时间5月17日&#xff09;18点&#x…

O2OA(翱途)开发平台数据统计如何配置?

O2OA提供的数据管理中心&#xff0c;可以让用户通过配置的形式完成对数据的汇总&#xff0c;统计和数据分组展现&#xff0c;查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置统计。 一、先决…

eNSP学习——OSPF多区域配置

目录 主要命令 前期准备 实验内容 分析 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 1、基本配置 配置与测试结果(部分) 2、配置骨干区域路由器 配置与测试结果(示例) 3、配置非骨干区域路由器 查看OSPF邻居状态 查看路由表中的OSPF路由条目 查看OSPF链…

【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

python设计模式--观察者模式

观察者模式是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;当主题对象状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新。 在 Python 中&#xff0c;观察者模式通…

PersonalLLM——探索LLM是否能根据五大人格特质重新塑造一个新的角色?

1.概述 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;&#xff0c;例如ChatGPT&#xff0c;致力于构建能够辅助人类的个性化人工智能代理&#xff0c;这些代理以进行类似人类的对话为重点。在学术领域&#xff0c;尤其是社会科学中&#xff0c;一些研究报告已经…

正心归一、绽放真我 好普集团正一生命文化艺术大赛(中老年赛区)正式启动

为进一步弘扬社会主义核心价值观&#xff0c;弘扬生命文化&#xff0c;提升公众对生命价值的认识与尊重&#xff0c;同时展现中老年艺术家的创作才华&#xff0c;激发广大中老年朋友的艺术热情和创造力。好普集团主办&#xff0c;幸福金龄会与正一生命科学研究&#xff08;广州…

adb获取点击坐标并模拟点击事件(模拟滑动)

屏幕分辨率&#xff1a; $ adb shell wm size Physical size: 1080x2340 获取设备的最大X和Y&#xff1a; 为8639 18719 $ adb shell getevent -p | grep -e "0035" -e "0036" 0035 : value 0, min 0, max 8639, fuzz 0, flat 0, resolution 0 0036 : v…

AWS安全性身份和合规性之Artifact

AWS Artifact是对您很重要的与合规性相关的信息的首选中央资源。AWS Artifact是一项服务&#xff0c;提供了一系列用于安全合规的文档、报告和资源&#xff0c;以帮助用户满足其合规性和监管要求。它允许按需访问来自AWS和在AWS Marketplace上销售产品的ISV的安全性和合规性报告…

网络模型-VLAN聚合

VLAN聚合 VLAN聚合(VLAN Aggregation,也称SuperVLAN)指在一个物理网络内&#xff0c;用多个VLAN(称为Sub-VLAN)隔离广播域并将这些Sub-VLAN聚合成一个逻辑的VLAN(称为SuperVLAN)&#xff0c;这些Sub-VLAN使用同一个IP子网和缺省网关&#xff0c;&#xff0c;进而达到节约IP地址…

BOM..

区别&#xff1a;

基于BERT的医学影像报告语料库构建

大模型时代&#xff0c;任何行业&#xff0c;任何企业的数据治理未来将会以“语料库”的自动化构建为基石。因此这一系列精选的论文还是围绕在语料库的建设以及自动化的构建。 通读该系列的文章&#xff0c;犹如八仙过海&#xff0c;百花齐放。非结构的提取无外乎关注于非结构…