1. 前言
在前边的章节,我们设计完存储模型,开发了 ETL 任务,并且配置好流程依赖,然后上调度系统,至此我们的数据仓库基本搭建完成,而且所有流程任务都可以自动化运转了。
随着公司上线的数据处理任务越来越多,我们可以安排专门的运维人员定时监控任务执行情况,定时去检查终端应用,尽最大可能的发现问题(比如源数据迟到、数据量突增、异常数据或者开发考虑不周、有人修改代码且测试不充分、服务器异常、调度宕机等等),并且赶在业务使用前解决掉。
不过技术人嘛,这种全靠人肉去监控的方法总感觉太低端,而且心里很不踏实。所以,就需要上一套工具,来监控 ETL 运行情况、稽核数据质量,并根据监控稽核结果及时的发出告警或者通知。
涉及到技术层面,我们必须做一下几点工作:
- ETL 计算逻辑、流程控制准确合理。(这个有 ETL 开发人员保证,测试人员把关。当然了很多时候开发测试都是同一个人,责任重大但谁让你是高级开发呢?)。
- ETL 任务流程在规定的时间点能够被调起来。(这个有调度系统保证,另外再配上监控告警系统,超时未启动触发告警)。
- 对于时效性 SLA 有要求的任务,需要添加超时告警。(这个调度系统可能会有,没有的话监控告警系统有也行,超时未完成触发告警)。
- 稽核校验系统,根据检查点规则配置的校验时间启动校验,发现问题触发报警。(当然,有时候会在任务执行完成后,直接启动关联的数据质量稽核校验)。
综上所属,除了正常的 ETL 任务流程和调度系统外,我还需要再有三大模块:ETL运行情况监控、数据质量稽核、告警通知系统。
另外,我最近在规划一套数据质量监控+告警通知系统,现在只是设计了表结构,其它的代码+页面都还没有,有兴趣的可以一起参与进来。
https://code.aliyun.com/lipengbo123/dqc
2. ETL 运行情况监控
首先,整个 ETL 流程任务是经过充分测试后才会上线的,所以理论上讲,只要整体流程,能在规定的时间内运行结束且不报错,一切就 OK。
所以,监控的首要目的就是做好 ETL 运行情况的监控。每一步关键节点都要记录日志,并且标明层级。
2.1 大致流程介绍
大致分为三部分:
- ETL任务执行过程中,记录详细的 ETL 运行日志
- 分析 ETL 运行日志,汇总关键信息到监控结果日志表。
- 直接根据规则调用告警通知模块,或者将告警通知信息写入告警记录表。
下图中的流程,事实上当时我们处理监控 ETL 执行情况外,还做了 ODS 层数据抽取完整性校验,和数据库存储空间使用情况检查。
2.2 记录运行日志的方法介绍
我们当时使用了 Kettle 做为 ETL 工具,当然使用其它工具、 Shell 脚本,又或者调度工具方法都是类似的。
第一层 ETL,每一步节点都会判断成功还是失败,失败则直接记录失败日志然后结束任务。
第二层 ETL。第一层里的 JOB_DW 任务节点下钻后的第二层任务。当第二层里的任意一个节点失败,状态都会回传到上层,然后触发上一层任务流程的终止。
再往下层,方法类似,我们就不做多余介绍了。
2.3 表结构设计
2.3.1 流水线运行日志 T_BAS_ETL_LOG
2.3.2 ETL监控结果汇总信息T_ETL_RST_COLLECTINFO
2.3.2 通知告警记录表
这个参考第四部分:告警通知系统设计
2.4 报表展示设计
除了告警通知,我们还需要有系统页面,方便事后的分析和查看。
2.4.1 ETL运行情况日志
报表01:最外层 ETL 任务
如果有错误,需要标成红色,并且显示错误信息,报表 02 同理
报表02:报表下转后的明细 ETL 任务。
2.4.2 数据抽取完整性日志
2.4.3 数据库空间存储日志
这个是当时 Oracle 数据库的统计,当空间占用达到80%时候需要告警
3. 数据质量稽核
在某些情况下,就算 ETL 运行正常也不能保证整体数据就正常,比如源端数据迟到或缺失、ETL代码被人错误的修改、调度未执行等等。
所以,我们需要对重要或者关键节点上的数据,做好稽核校验。
我们之前项目上,通过 Oracle 存储过程 + Oracle job 实现过一版,大致思路就是通过比对两条 SQL 的查询结果来校验,但缺陷是待校验的数据必须存在于数据库里。
另外,我刚毕业时候,公司有一个网页版的工具(CData),现在想想拿来做数据质量稽核会更合适一些。
3.1 大致流程如下
- 配置数据源,可以是各种数据库。
- 配置比对规则。
- 指定数据源。
- 指定表,或者自己写查询 SQL。
- 字段映射,映射的时候可以配置简单的转换,需要区分维度和指标。
- 设定阈值,比如指标差异多少算作异常。
- 根据配置的调度时机执行校验。
- 执行日志实时展示,事实上是一张报表,可以下钻,报错的会重点标红,正常的标绿。
3.2 表结构设计
3.2.1 数据质量稽核校验-配置表 dqc_check_config
3.2.2 数据源配置表 dqc_check_config_datasource
3.2.3 校验结果数据 dqc_check_result
3.2.4 规则执行日志 dqc_check_log
4. 告警通知系统
ETL 运行情况监控或者数据质量稽核发现问题后,需要触发告警通知。
4.1 实现方法
- 封装成一个整体,以 API 的形式对外开放出来,ETL 运行情况监控或者数据质量稽核发现问题后实时调用该 API 触发告警/通知。传入参数如下:触达方式(邮件/短信/电话/微信/钉钉)、通知组、消息内容。
- 写入告警信息表,告警通知系统另起一个调度任务对该表定时轮询。
4.2 三种用途
- 确保监控和稽核任务发现问题后能够自动触发告警,以便运维人员能够及时处理。
- 没有收到告警并不能代表无错误,可能是监控或者稽核任务没有执行,最稳妥的办法就是一切 OK 的时候,后发一条完成通知消息。
- 每日的信息简报也可以通过该系统推送消息。比如运营日报、监控日报。
4.3 表结构设计
4.3.1 数据质量-告警通知组 dqc_notify_group
4.3.2 数据质量-告警通知触达对象 dqc_notify_object
4.3.3 数据质量-告警通知日志 dqc_notify_log
下一篇我们介绍“元数据”。
我们正连载更新“数据仓库和大数据”相关的知识体系。感兴趣的话欢迎关注下方公众号。
数仓与大数据
体系化的总结归纳数据仓库相关知识、大数据相关知识,为广大圈内同仁,提供一套完备的学习资料。
公众号
扩展阅读:
数据仓库详细介绍(二.架构)
数据仓库详细介绍(三.规范)心法篇
数据仓库详细介绍(五.ETL)方法篇
数据仓库详细介绍(五.ETL)工具篇上
数据仓库详细介绍(五.ETL)工具篇下
留个微信,大家不妨交个朋友,共同交流。同时,欢迎关注、分享、转载。
微信扫一扫
关注该公众号