《阿里大数据之路》读书笔记:第二章 日志采集

news2024/11/24 13:56:06

第二章 日志采集

一、浏览器的页面日志采集

浏览器的页面型产品/服务的日志采集可分为两大类:

  • 页面浏览(展现)日志采集

    • 指一个页面被浏览器加载呈现时采集的日志

    • 此类日志是最基础的互联网日志

    • 此类日志是目前所有互联网产品的两大基本指标(页面浏览量(Page View,PV)和访客数(Unique Visitors,UV))的统计基础

  • 页面交互日志采集

    • 用户操作记录

1.1 页面浏览日志采集流程

主要是为了对指标网页浏览量(PV)和访客数(UV)进行分析。

采集页面被浏览器加载展现的记录,这是最原始的互联网日志采集需求,也是一切互联网数据分析得以展开的基 础和前提。

一次典型的页面访问(请求-响应)过程:

以用户访问淘宝首页为例

  1. 用户在在地址栏中输入网址并回车

  2. 浏览器向服务器发起HTTP请求

  3. 服务器接收并解析请求

  4. 浏览器接收到服务器的响应内容,并将其按照文档规范展现给用户,从而完成一次请求

在上述网页浏览过程中,如果我们需要记录这次浏览行为,日志采集则是在这四个步骤中的某一环节。

第一二步中,用户的请求尚未抵达服务器。直到第三步完成,我们也只能认为服务器处理了请求,不能保证浏览器能够正确地解析和渲染页面,不能确保用户已确实打开页面,因此在前三步是无法采集用户的浏览日志的。所以,采集日志的动作是发生在第四步,也就是浏览器开始解析文档时才能进行。

日志采集思路

  • 在HTML文档内的适当位置增加一个日志采集节点,当浏览器解析到这个节点时,将自动触发一个特定HTTP请求到日志采集服务器。

  • 当日志采集服务器接收到这个请求时,就可以确定浏览器已经成功地接收和打开了页面。

页面浏览日志采集的主要过程如下:

采集:客户端日志采集。HTML文档内植入JavaScript脚本进行采集。

  • 采集脚本被浏览器加载解析后执行,在执行时采集当前页面参数、浏览行为的上下文信息(如读取用户访问当前页面时的上一步页面)以及一些运行环境信息(如当前的浏览器和分辨率等)

  • HTML文档内植入日志采集脚本的动作可以由业务服务器在响应业务请求时动态执行,也可以在开发页面时由开发人员手动植入。

发送:客户端日志发送。日志采集完成后会立即发送或延迟发送。采集到的日志信息一般以URL参数形式放在HTTP日志请求的请求行内。

  • 采集脚本执行时,会向日志服务器发起日志请求,以将采集到的数据发送到日志服务器。

收集:服务器端日志收集。由日志服务器完成对日志的收集。

  • 日志服务器接收到客户端请求后,会立即向浏览器发回一个请求成功的相应。

  • 日志收集模块会将日志请求内容写入一个日志缓冲区内,完成此条浏览日志的收集。

存档:服务器端日志解析存档。日志服务器对浏览日志解析并存档。

1.2 页面交互日志采集

用户在访问某个页面时具体的互动行为特征(交互日志)的采集,比如鼠标或输入焦点的移动变化(代表用户关注内容的变化)、对某些页面交互的反应(可借此判断用户是否对某些页面元素发生认知困难)等。常规的PV日志采集方法无法完成对上述操作日志的采集,因为这些行为往往并不触发浏览器加载新页面。

交互日志的采集是以技术服务的形式呈现的。

采集的交互日志发送到日志服务器需经过以下步骤:

  • 注册业务等的具体交互采集点,注册完成后,系统将生成与之对应的交互日志来集代码模板

  • 业务方将交互日志采集代码植入目标页面,并将采集代码与需监测的交互行为做绑定

  • 当用户在页面上产生指定行为时,采集代码和正常的业务互动代码起被触发和执行

  • 采集代码在采集动作完成后将对应的日志通过HTTP协议发送到日志服务器,日志服务对数据进行转储

1.3 日志的清晰和预处理

在大部分场合下,经过上述解析处理之后的日志并不直接提供给下游使用。一般还需要进行相应的离线预处理。具体操作如下:

  • 识别流量攻击、网络爬虫和流量作弊(虚假流量)

    • 对所采集的日志进行合法性校验,依托算法识别非正常的流量并归纳出对应的过滤规则集加以滤除。

  • 数据缺项补正

    • 对日志中的一些公用且重要的数据项做取值归 、标准化处理或反向补正(即根据新日志对稍早收集的日志中的个别数据项做回补或修订(例如,在用户登录后,对登录前页面日志做身份信息的回补))。

  • 无效数据剔除

    • 剔除无意义、已经失效或者冗余的数据项。

  • 日志隔离分发

    • 考虑到安全性,某些日志在进入公共数据环境之前需要做隔离。

二、无线客户端的日志采集

采集思路:无线客户端的日志采集采用采集SDK来完成。

移动端的数据采集目的:

  • 服务于开发者,协助开发者分析各类设备信息

  • 帮助开发者了解用户、用户行为,不断对APP进行优化,提升用户体验

与浏览器日志采集的不同之处:移动端的日志采集根据不同的用户行为分成不同的事件,“事件”为无线客户端日志行为的最小单位。

  • 区分不同事件的日志触发时机、日志内容和实现方式的差异

  • 更好地完成数据分析

在阿里巴巴内部,多使用名为UserTrack(UT)来进行无线客户端的日志采集。基于常规的分析, UserTrack(UT)把事件分成了几类,常用的包括页面事件(同前述的页面浏览)和控件点击事件(同前述的页面交互)等。

2.1 页面事件

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

  • 设备及用户的基本信息。

  • 被访问页面的信息。主要是一些业务参数(如商品详情页的商品 ID 、所属的店铺等)

  • 访问基本路径。如页面来源、来源的来源,用于还原用户完整的访问行为。

对于页面事件,UT提供了页面事件的无痕埋点, 即无须开发者进行任何编码即可实现。

UT提供了两个接口,分别在页面展现和页面退出时调用。除此之外,还有页面扩展信息的接口,该接口必须在使用页面展现和页面退出方法的前提下使用。

UT还提供了透传参数功能。所谓透传参数,即把当前页面的某些信息,传递到下一个页面甚至下下一个页面的日志中。

2.2 控件点击及其他事件

1、控件点击事件

记录了基本的设备信息、用户信息。

记录了控件所在页面名称、控件名称、控件的业务参数等。

控件点击事件的逻辑比页面事件要简单得多,就是操作页面上的某个控件,因此只需把相关基础信息告诉采集 即可。

2、其他事件

用户可以根据业务场景需求,使用自定义事件来采集相关信息。

UT 提供了一个自定义埋点类,其包括:

  • 事件名称

  • 事件时长

  • 事件所携带的属性

  • 事件对应的页面

2.3 特殊场景

为了平衡日志大小,减小流量消耗、采集服务器压力、网络传输压力等,采集 SDK 提供了聚合功能,对某些场景如曝光或一些性能技术类日志 ,我们提倡在客户端对这类日志进行适当聚合,以减少对日志采集服务器端的请求 ,适当减小日志大小。

总体思路就是每个曝光的元素一般都属于一个页面,利用页面的生命周期来实现适当的聚合及确定发送时机。

2.4 H5 & Native 日志统一

APP 分为两种:

  • 纯Native APP

  • 既有Native,又有H5页面嵌入的APP ,即Hybrid APP

Native页面采用采集SDK进行日志采集,H5页面一般采用基于浏览器的页面日志采集方式进行采集。

考虑到后续日志数据处理的便捷性、计算成本、数据的合理性及准确性,需要对Native H5日志进行统一处理。

阿里选择Native部署采集SDK的方式,将H5日志归到Native日志。原因如下:

  • SDK可以采集到更多的设备相关数据,这在移动端的数据分析中尤为重要

  • 采集SDK处理日志,会先在本地缓存,而后借机上传,在网络状况不佳时延迟上报,保证数据不丢失

2.5 设备标识

互联网产品的两大基本指标:页面浏览量(Page View,PV)和访客数(Unique Visitors,UV)。

关于UV,对于登录用户,可以使用用户ID来进行唯一标识。PC一般使用Cookie信息来作为设备的唯一信息。对于APP来说,则需要选的设备唯一信息,不同版本的系统选择的标识不一样。

2.6 日志传输

无线客户端日志上传、压缩及传输

此时日志不是产生一条就上传一条,而是日志产生后,先存储在客户端本地,然后再伺机上传

伺机:需要有数据分析的支持,如在启动后、使用过程中、切换到后台时这些场景下分别多久触发一次上传动作。

  • 日志切分维度为天,当天接收的日志存储到当天的日志文件中。

  • 为了后续数据处理,以及特殊时期不同日志的保障级别,还根据应用及事件类型对每日高达数千亿的日志进行了分流。

日志采集完成后,日志采集服务器的日志怎么给到下游呢?

阿里主要使用消息队里(TimeTunel,TT)来实现从日志采集服务器到数据计算的MaxCompute。

TT将消息收集功能部署到日志采集服务器上进行消息的收集,便于后续计算。

  • 实时计算:应用实时来订阅TT收集到的消息,进行实时计算。

  • 离线计算:离线的应用定时来获取消息,完成离线计算。

三、日志采集的挑战

各类采集方案提供者所面临的主要挑战已不是日志采集技术本身,而是如何实现日志数据的结构化和规范化组织,实现更为高效的下游统计计算,提供符合业务特性的数据展现,以及为算法提供更便捷、灵活的支持等方面。

3.1 阿里典型场景及解决方案

1、日志分流及定制处理

大型互联网网站的日志类型和日志规模都呈现出高速增长的态势,而且往往会出现短时间的流量热点爆发。这一特点使得在日志服务器端采用集中统一的解析处理方案变得不可能,其要求在日志解析和处理过程中必须考虑业务分流(相互之间不应存在明显的影响,爆发热点不应干扰定常业务日志的处理)、日志优先级控制,以及根据业务特点实现定制处理

为了避免资源浪费(尽可能多地进行预处理)和需求覆盖不全(仅对最重要的内容进行预处理)两者取舍问题。阿里互联网日志采集体系的基本原则是分治策略。将分类任务前置到客户端,尽可能靠前地布置路由差异,就可以尽可能早地进行分流,降低日志处理过程中的分支判断消耗,并作为后续的计算资源调配的前提,提高资源利用效率。

阿里的客户端日志采集代码的一个突出特点是实现了非常高的更新频次(业界大多以季度乃至年为单位更新代码,阿里则是以周/月为单位),并实现了更新的配置

2、采集与计算一体化设计

以PV日志为例,归类与汇总是页面PV日志采集之后的一个基础性操作。

早期时,是以URL路径,继而以URL(正则)规则集为依托来进行日志分类的。网站规模小时,这种方式没问题,但是当网站规模大了,这种方式就不现实了,失控的大规模正则适配甚至会将日志计算硬件集群彻底榨干。

阿里对采集与计算进行一体化设计,给出了两套日志规范和与之对应的元数据中心。

  • PV日志的解决方案是目前用户可直观感知的SPM规范(例如,在页面的URL内可以看见spm参数)和SPM元数据中心。

    • 通过SPM的注册和简单部署(仅需要在页面文件内声明一个或多个标签),用户即可将任意的页面流量进行聚类,不需要进行任 多余的配置。

  • 自定义日志的解决方案则是黄金令箭(Goldlog)/APP端的点击或其他日志规范及其配置中心。

    • 通过注册一个与所在页面完全独立的令箭实体/控件实体,用户可以一键获得对应的埋点代码,并自动获得实时统计数据和与之对应的可视化视图。

日志本身不是日志采集的目的,服务于基于日志的后续应用,才是日志采集正确的着眼点。

3.2 大促保障

这里以阿里“双11"为例。

数据处理全链路如下图:

  1. 端上实现服务器端推送配置到客户端,且做到高到达率;

  2. 对日志进行分流;

  3. 在实时处理方面,不断优化以提高应用的吞吐量;

  4. 实时处理方面,评估峰值数据量,在高峰期通过服务器端推送配置的方式对非重要日志进行适当限流 ,错峰后逐步恢复。

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

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

相关文章

【Linux】LVS负载均衡群集 NAT模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LVS负载均衡群集 NAT模式 一、理解负载均衡群集的原理1.企业群集应用概述2.企业群集分类3.负载均衡群集架构4.负载均衡群集工作模式分析5.NAT模式6.TUN模式7.DR模式 二、LVS虚…

ESP32 BLE蓝牙服务端客户端通信

官方帮助见这里 BLE服务端命令 ATRESTORE//复位 ATBLEINIT2 //将esp32设置成蓝牙SERVER ATBLEGATTSSRVCRE //GATTS创建服务, 建议初始化后就建立GATTS, 建立连接在创建会报错 ATBLEGATTSSRVSTART //GATTS 开启全部服务。 ATBLEGATTSCHAR? //GATTS 发现服务特征 ATBLEADDR…

回收站的文件删除了怎么恢复?实用的2个方法推荐!

我一直以为回收站里的文件都是我自己删除的文件,因此没有怎么在意。但是我刚刚清空了回收站,却发现我有些重要的文件是被误删而放入回收站的,现在这些文件都被删除了,这可怎么办? 回收站中通常会存放很多我们删除的文件…

使用QT: ActiveX控件生成文件,实现在QT项目中调用.c文件

以连接的其他控件为例,控件的位数(32/64),需要和QT编译器保持一致 我在此处连接的是.h和.c文件的类接口,在QT中使用 原始接口: 1.在QT程序中添加模块 QT axcontainer2.查看COM控件的UUID 打开一个.ui文件…

Java基础-多线程JUC-生产者和消费者

1. 生产者与消费者 实现线程轮流交替执行的结果; 实现线程休眠和唤醒均要使用到锁对象; 修改标注位(foodFlag); 代码实现: public class demo11 {public static void main(String[] args) {/*** 需求&#…

java jvm TLAB是什么?指针碰撞解释,空闲列表解释

1. 对象的创建: 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程…

SpringBoot 实现审核功能

一、审核功能实现的方式 1、普通 方案:经办时入A表,审核后从A表读取数据,然后操作目标B表; 优势:思路简单 劣势:对后端功能实行高度的嵌入;审核功能数据操作不统一 2、弹框式 方案&#x…

HummerRisk 配置 HTTPS访问

简介 HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生的安全和治理问题。核心能力包括混合云的安全治理和云原生安全检测。 HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密和身份验证来保护网络通信安全的协议。它…

ChatGPT对高等教育的可能影响与对策建议

ChatGPT来袭,将对高等教育带来哪些影响,我们又该如何应对? 对于ChatGPT,有人欢喜有人忧,不同人、不同领域评价不一。在一些人眼里,它就是天使,而在另外一些人眼里,它几乎可以说是魔…

php导出pdf

插件官网:TCPDF 博主用的是tp6框架 、tcpdf插件 composer require tecnickcom/tcpdf --ignore-platform-reqs 后面是忽略平台要求的参数 ---------------中文乱码start------------------ 关于中文乱码问题: 网上说的下载字体放入fonts 利用tools…

Linux之系统管理

系统管理 Linux中的进程和服务 计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。 启动之后一直存在、常驻内存的进程,一般被称作“服务”(service) service 服务管理&#xff…

GaussDB OLTP云数据库配套工具DDM

目录 一、前言 二、DDM定义 三、DDM业务架构 四、为什么需要DDM? 五、DDM特性 六、DDM应用场景 一、前言 现在越来越多的企业应用在逐步向云平台迁移,同时这对云平台带了一个严峻的考验和挑战。但针对华为云GaussDB数据库, 我们在生态方面做了比…

利用iptables + zabbix-agent 监控进程端口流量

这几天部署了一台ARM架构的linux系统的监控,服务器系统上没有任何工具可以获取数据来获取端口流量,yum,apt-get软件包管理工具都没有,所以想获取数据比较困难。 最终决定使用iptables来添加几条指定端口的规则来统计入站流量和出站…

电子时钟制作(瑞萨RA)(7)----按键修改数码管时间

概述 前几节课程已经单独驱动了数码管和RTC,同时已经整合成了能够用数码管显示具体时间,但是无法修改时间,这节就来配置使用按键修改具体的日期。 硬件准备 首先需要准备一个开发板,这里我准备的是芯片型号R7FA2E1A72DFL的开发…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册9

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

记录Maven 依赖包版本号奇奇怪怪的问题 - okhttp3、okio 版本指定无效

问题背景 SprintBoot项目使用Okhttp 封装SDK common-http&#xff0c;根据官网使用Maven导入JavaSDK <dependency><groupId>io.github.admin4j</groupId><artifactId>http</artifactId><version>0.7.4</version> </dependency&…

Vue 数据双向绑定

双向数据绑定 : 通过前面学习知道 Vue 是数据驱动的&#xff0c;数据驱动有一个精髓之处是数据双向绑定&#xff0c; 即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。&#xff08;就是mvvm数据发生变化…

MyCat2 使用教程(一)初始安装

MyCat2 使用教程&#xff08;一&#xff09;初始安装 Mycat2是Mycat社区开发的一款分布式关系型数据库&#xff08;中间件&#xff09;。它支持分布式SQL查询&#xff0c;兼容MySQL通信协议&#xff0c;以Java生态支持多种后端数据&#xff0c;通过数据分片提高数据查询处理能…