第二章 日志采集

2.1浏览器页面日志采集

页面浏览日志采集,该日志采集是PV、UV指标计算的基础,也具有一定的挑战性。

页面浏览日志采集是在页面发送完HTTP请求后,得到服务器响应,并开始在页面进行渲染后才开始的。也就是在HTTP中某一个节点增加一个日志采集节点,当浏览器解析到该节点时,就向服务器发起日志采集请求。

日志采集的几个重要步骤:

1.浏览器日志采集

主要采集当前页面参数,浏览行为上下午信息,运行环境

2.浏览器日志发送

可能采集完后立即发送,也可能延迟发送,因为如果数据量较大,会采取合并多条日志再发送的策略。减少IO次数,

3.日志采集服务器接收日志

服务器收到日志后会立马返回浏览器一个成功响应,以避免浏览器的渲染的延迟。接收到的日志会进入日志缓冲区。

4.日志采集服务器解析并存档日志

主要是转义和解码

页面交互日志采集,用户喜好、系统优化点等业务都是基于此日志来完成的。

交互日志相较于页面浏览日志,更多样化,无法规定其统一的采集内容。需要技术人员更多的参与到其中,个性化程度较高。

阿里内部通过注册要采集的交互日志业务,具体的业务场景以及具体交互采集点来自动生成采集日志的代码模版。

也就是指定要采集的交互行为。

行为日志可与浏览日志做关联运算。

日志的服务器端清洗和预处理

对于实时性要求不高的应用场合,需要对日志做清洗和预处理。

1.识别流量攻击、流量作弊、网络爬虫

流量攻击指段时间内多次发起访问,按照一定的规则解析出流量攻击后要马上将数据反补回业务系统进行指定IP的防御

流量作弊多现与广告点击等业务场景,识别出来减少成本及损失

网络爬虫需要指定一定的反爬机制

2.数据补正

如用户登陆后,对稍早一些的该用户日志信息作填充。方便下游统计和方便计算。

3.无效数据剔除。

由于业务变更,页面端的日志采集配置没有发生相应的变更,产生了一些垃圾日志。会占用存储,也会影响下游的计算效率和准确性,固剔除这部分数据。

4.数据隔离分发

出于安全性考虑或者业务特征的考虑,在某些日志进入公共数据环境之前需要做日志隔离。

2.2无线客户端日志采集

会对日志做分类,分为页面事件和控件点击事件,而控件点击事件又分为多种,如单击、双击、滑动、长按等,下游的分析可能只针对某一类事件,而不用拿全部的事件日志。固将事件分类可以有效提升下游的分析,也有利于结构化存储。

1.页面日志一般会在用户退出该页面时发送日志,因为这样可以记录下用户停留在此页面的时长。也可以减少日志量,因为如果进入页面发送一条日志,离开时发送一条日志,则发送了两条日志。如果只是在离开时发送日志,则只发送了1条。在页面日志中可以故意多收集一些信息,如上个页面的信息甚至是上上个页面的信息。这样就可以分析当前页面的来源搜索关键字等。

2.除了页面浏览日志外还有页面点击日志和其他日志。

页面点击日志就是常见的用户点击操作,其他日志就是用户自定义的一些列操作日志。

除了上诉日志,还可以记录应用崩溃的日志,应用退出的日志,应用切换的日志等。这些日志对改进应用自身有很大的帮组。

设备标识难以采集问题:

web网页端如果采集不到设备信息,可以用cookie作为用户标识,app端没有cookie。阿里的做法是用算法对每一台app设备生成一个UTDID,随着各个品牌手机权限的收拢,目前该UTDID还不是很完善。

无线客户端的日志上传遵循一些列策略,不是来一条日志上传一条,有积赞的日志大小、积赞日志时长、app的切换、长时间停留无操作等都是上传契机。

2.3日志采集的挑战

总结起来就是在面对海量日志的情况下如何高度结构化、规范化的组织日志。以及高速、不重不漏的传输日志。

为解决上诉问题,阿里巴巴采用如下2个解决方案:

1.日志分流和定制处理

日志分流是指页面在对日志服务器发起日志传送请求时的分流,可以根据业务的类型而改变请求的URL,分别将请求打到不同的服务,以达到分流、分开热点日志和定常日志,让热点日志不要干扰定常日志的需求。

2.采集与计算一体化处理

大促保障

端上埋点采集-日志服务器收集-数据传输-实时分析。在这4个环境中,某一个环境出了问题,这条日志处理链路都是失败的,要保证日志链路就是要保证以上4个流程的高效、无误。

客户端到日志服务器收集端:

阿里采用了日志服务器推送配置到客户端形成相应的日志采集策略。并且在客户端日志URL到日志服务器端做了日志到达分流处理,将不同业务类型的日志做分流处理。

结合实时处理端的处理能力,评估峰值数据量。在高峰期采用服务端推送配置到客户端来达到对不重要的日志进行限流,以达到暂时削峰的作用。错峰后又逐步将延迟推送的日志上传到日志服务器。延迟的策略有延迟上报、部分采样等。所谓延迟上传,即先把日志保存在客户端,待配置恢复后再上传到服务器。部分采用是针对特殊的场景,如对app的性能监控,内存消耗等日志,只选取小部分日志上传,因为小部分日志就具有代表性了。阿里甚至做了直接在日志采集服务器端调用API做计算。减少日志传输流程,减少出错和资源占用。

你可能感兴趣的:(第二章 日志采集)