浅谈如何建设指标监控体系
作者介绍
@ 图图
BAT数据产品经理;
专注于数据产品、并持续学习;
“数据人创作者联盟”成员。
对于数据人尤其是数据产品和分析师,最难排查(头疼)的问题就是指标为什么升/降/没数,一旦业务方提出这种问题就意味着有大半天的时间要花在确认指标口径+计算逻辑+埋点采集上,而且要同时跟业务方、分析师、数据产品、数仓甚至是负责埋点的开发沟通,所以对于业务达到一定复杂度和指标达到一定量级的情况下,采用人肉运维的方式显然是事倍功半的,搭建一套指标监控体系来保证产出数据的时效性和数据质量才是正解。
由于搭建指标监控体系要做的工作实在太多,本文我们重点讨论几个场景,在这些场景下我们数据产品经理能够发挥哪些作用。
以一个实际场景case举例,聊聊当数据出现异常波动时监控体系是如何发挥其作用的。
业务小李同学发现,昨天App首页的人均停留时长日环比上涨了40%,于是小李找到分析师和数据产品询问指标下降的原因。
此类问题相信各位数据人都不陌生,大家的反应都是先和业务确认最近是否产品有过升级或者策略调整,如果没有的话就要排查数据流转的各个环节是否有问题,以下图为路线,我们分析在这些环节是否能前置的做些监控和定位工作。
01 数据同步
不管是埋点数据和还是业务数据,最终都是以一张张日志表的形式同步到数仓ODS层,如果是数据同步有缺失,可以查看数据拉取服务、埋点日志解析、ETL等过程是否异常,可以将上述注意点整理一个checklist,做成任务每天例行检查,能做到对以上异常情况的定位也就初步完成了数据同步环节的监控。数仓同学经排查并未看到执行失败的任务,可以确定数据同步环节是正常的。
02 调度监控
其实调度监控和任务管理有着很密切的联系,最终目的都是为了把这些任务有序的运行起来,调度系统的设计可以重点考虑以下几个特性:
那么如何通过产品化的形式展示当前任务的调度状态呢?一般大家都会选择用血脉图来展示,数据产品在设计血脉图的展现形式时,可以考虑不仅能展示作业组、节点、表名、字段名、运行状态等,还要考虑能将业务实体,也就是指标与调度信息进行关联。 当然能做到这个粒度依托与数仓治理的程度,如果数仓规范和治理做的没那么精细,我们可以抓重点来做:比如梳理一些重要指标的调度关系,先把这些重要指标的调度监控做起来,这样也是比较容易看到成效的。
此时我们查看血脉图可以看到总停留时长这个指标是执行成功状态,且依赖的作业也是执行成功的状态,而我们要排查的人均停留时长指标是总停留时长指标的派生指标,这样我们可以得出结论并非是调度任务出现问题,接下来可以排查是否是运行指标的任务出了问题。
03 任务管理
看到这儿会发现我们越来越接近指标层了,而随着指标数量越来越多、指标口径越来越复杂,就会出现下面令人头疼的问题:
----任务不能在计划时间内完成
----下游依赖的任务已经执行了但上游任务还没跑完,这时候没有数据下游任务报错
----两个任务并行执行影响数据结果
排查任务错误原因越来越麻烦、各种依赖关系越来越复杂、最后排查问题就要从一团团乱麻中理出已跟麻绳。
而为了保证指标产出的准确性,就必须要求生成这些指标的任务按照上下游依赖有序进行,最终能确保按时生成指标。
为了保证指标产出的监控性,要做到对导入任务的监控,具体有支持查看导入任务的执行纪录、执行状态、失败原因等,这样当指标数据未产出时可以通过导入任务的执行状态来分析问题。
而为了保证指标的时效性我们可以配置指标负责人、运维人员、SLA来保证,当任务执行时间超过SLA触发报警机制。
接下来回到我们排查人均停留时长这个问题,已知他的原子指标总停留时长的作业是没问题的,那么我们分析这个指标的计算逻辑:
人均停留时长=总停留时长/DAU
我们看到上游产出DAU的任务失败了,后经开发排查,是因为DAU的表里有个小时表执行失败了,导致DAU算的数据偏少,进而人均停留时长数据异常增长。
04 指标检验
最后就是对指标数据进行检验,在导入任务执行完产出数据后,如何验证产出的数据符合预期呢?我们可以给指标的波动范围设计阈值(一般是日环比和周同比的形式),关于阈值如何设定,有的团队可能采用业务方提供的波动值来作为阈值,但这种判断容易受主观思维影响,从数据的角度出发可以考虑取以往的指标波动均值作为参考阈值,这样我们在阈值的设定上是比较科学的,如果是业务调整带来的波动,那在计划调整的时候肯定是有个预期的波动值,我们只需要在调整后及时在报表展示平台添加好提示,同时也检查下数据波动和业务的预期是否一致,这样也会降低一些因业务调整带来的口径波动解释成本
在指标校验环节我们发现人均停留时长这个指标已经超过了设置的20%的阈值,所以业务同学收到了报警,然后就开始了我们文章一开始出现的那一幕。
指标监控体系看似是对指标的监控,实际上是对整个数据生产流程的监控,但本文只是简单的讲了这几个环节,排查实际问题中并不只是这些环节会有问题,比如数据同步环节发现解析到的埋点日志很少,那么我们要排查是否埋点出现异常;调度监控除了血脉图还有元数据管理平台等等。。。
总之数据采集到数据可视化是个漫长且复杂的链路,对于企业级的指标监控系统,这些事还远远不够,不同公司面临的困难不一样,方法也不一样,思考如何制定适合自己业务和技术现状的监控方案,这样才能更好的落地实施。