该平台主要解决三种场景的问题:
1、数据质量场景
日常工作中,经常会遇到数据质量问题(完整性、准确性、一致性和及时性等)。该平台将整个数据质量处理过程形成一个闭环,从最初的规则库配置,到执行过程中质量异常告警,再到问题处理流程跟踪,到最后的解决方案沉淀等一系列的操作都在该平台完成。
2、常用集群(系统)的质量场景
目前平台组有好几个开源的集群和自己开发的系统,需要监控这些平台的可用性、正确性,以及记录这些平台常见问题的处理方案。比如说监控到es集群变为red,需要排查的步骤。
3、日常平台问题的解决方案记录场景
记录各个平台常见的问题解决方案。比如说hive sql oom,提供可配置的参数;hive sql 一个大表一个小表join提速的解决方案;es 查看一句话如何分词的解决方案;airflow dag依赖库版本错位的问题解决方案等。
1、整体介绍
整个闭环的质量处理流程如下:
1、质量需求
2、提炼规则
3、规则库
4、执行规则
5、问题数据
6、数据报告
7、落实处理
8、知识库
从最初的质量需求中提取规则,将该规则加入规则库。在规则库中配置数据源,监控指标,定时配置,告警规则等,由调度器调度执行这些规则。规则执行后发现问题数据,相关同学编写数据报告,记录整个问题发现、处理、改进的流程。这些解决方案可以记录到知识库,供其他同学查阅。也可以根据这些解决方案定制更详细的质量需求,回到第一步,循环处理。
接下来会着重介绍规则库模块,问题跟踪(问题数据,数据报告,落实处理)和知识库模块三个部分。
2、规则库模块
规则库模块配置层、代码生成层、执行层和检测层四部分。
2.1、配置层
配置层包含数据源、质量指标、其他配置三部分。
数据源指的是监控的数据,包含数据表和平台两部分。
数据表比如说hive表、es索引、mysql表等,平台比如说es集群,hadoop集群,airflow平台等。
质量指标包含表相关和平台相关的指标。比如说表相关的掉0,波动,枚举指定值,范围值、自定义等多种类型的指标;平台相关的比如说es的red,breaker监控,airflow的异常dag监控,10min中失败任务比率监控等。
其他配置包含定时配置、告警配置,版本控制、owner等信息。
2.2、代码生成层
代码生成层包含两部分的内容,一部分是根据配置层的所有配置信息生成可执行的代码,另外一部分是生成调度层的代码。
根据配置层的所有配置信息生成可执行的代码这一部分就是根据上述说的数据源配置、质量指标生成代码。比如说用户A配置了两个数据质量监控任务。第一个任务包含es common集群表A的field1的指定范围指标,field2的枚举值指标,es olap集群表B的波动30%的指标;第二个任务包含hive表C、表D延时不能超过10min的指标。此时会生成两个可执行的脚本,第一个脚本包含操作es集群的所有操作,第二个脚本包含监控hive表是否延时相关的操作。
生成调度层的代码是指根据定时配置、告警配置、执行层类型等生成执行层可执行的代码。比如说执行层是airflow,这里则是生成airflow的dag,并将该文件放到airflow指定的目录下面;如果是自己开发的调度平台,则需要生成调度平台的任务,并将脚本上传到指定目录。
2.3、执行层
执行层则就是外部的调度平台。执行生成层生成的代码。airflow是一种可选平台。
2.4、检测层
检测层主要是检测执行层执行的结果。如果出现质量问题,生成质量问题记录,并根据告警规则告警,如果告警一直没人处理,逐步向上升级。比如说一个告警,刚开始是app告警,10min告警一次,如果1个小时还没处理,升级为电话告警,如果电话告警未被接通,向其leader电话告警。
3、问题跟踪模块
如果有数据或者平台有质量问题,规则库会生成质量问题记录。问题跟踪模块则是对质量问题的发现,问题定级,处理流程的记录。
这一块没有技术难点,主要是记录质量问题整个的处理流程。
这里的质量问题可以是规则库执行后生成的质量问题,也可以是用户手动输入的问题。
问题的发现流程则是记录问题一步步定位的过程。比如说业务同学A 20200706 15:00接受到es common集群表index1 14点的数据丢失告警;业务同学A 15:01通知平台同学B数据丢失;平台同学B 15:05确认数据接入流程有问题,15:10处理完毕;15:30数据恢复正常。
问题的定级标准是根据数据的重要性、影响时间、影响数据量将其故障等级分为:
- S1:严重度极高;
- S2:严重度高;
- S3:严重度中;
- S4:严重度低等四项标准。
每个等级对应不同的惩罚措施。
处理流程需要明确三个点,出现质量问题的原因是什么,影响是什么,采用什么样的解决方案。解决方案要说明是临时方案还是长久方案,方案必须经过相关同学的评估。
4、知识库模块
知识库可做为一个单独的模块存在,记录日常遇到的平台或者sql问题的解决方案。该模块的问题描述和解决方案需要手动添加。该模块主要是给大家提供一个记录日常问题和解决方案的地方,方便查阅。
知识库中的每篇帖子包含正文、解决方案和标签三部分内容。正文包含两部分内容问题描述和异常相关,每篇帖子的解决方案和标签都可以包含多个。有点类似于stackoverflow,采用一问多答的方式。用户可以通过搜索异常代码或者异常描述来检索问题。这里可以简单实现,不实现点赞,用ES的nested存储即可。