数据监控架构文档
背景¶
我们在2023年引入了 dbt + soda,解决了大部分的数据质量校验的问题,但是只解决了数据开发过程中的数据质量问题,加上上手门槛较高,普通用户没法直接上手,需要构建一套前后端的平台,帮助用户快速上手,在解决数据质量的同时能够即时的监控业务数据的波动情况,及时反馈。确保数据满足四个基本原则:完整性、准确性、一致性和时效性。同时,还需要满足各个用户实际场景的定制化需求。
设计方案¶
在现有的 soda DQC 的基础上,增加支持用户界面配置校验规则的功能,支持 UI 到 Soda DSL 解析的功能, 支持分布式执行规则功能,支持用户自定义告警规则功能。
大体的架构流程如下图:
整个系统分 Master、Worker、Metadata、Monitor 5个模块,每个模块的职责如下:
- Master:负责跟用户交互、管理元数据、定期扫描数据源生成数据集元数据、定期根据配置生成校验规则任务
- Metadata:主要是负责保存元数据,确保分布式任务操作的原子性
- Worker:负责具体的规则校验任务执行,包括从 Metadata 中抢占任务,解析任务,执行任务,执行完毕后更新任务的元数据(运行状态、校验状态、校验结果值等信息)
- Monitor:不断的去 poke Metadata 获取运行状态处于校验失败且尚未发出告警信息的任务,根据告警配置信息构建告警消息体发送给告警平台或者直接发出告警信息到用户的邮箱或者企业微信中
Master 设计¶
Master 主要提供以下功能: 用户交互 API、元数据管理 API、数据源扫描、数据集生成、校验规则任务生成API。 用户通过界面配置数据源,数据源元数据信息写入到 metadata 中,master 的 datasource scan 进程会根据元数据,扫描数据源获取需要的数据集。 数据源元数据
字段名称 | 字段描述 | 备注 |
---|---|---|
数据源名称 | 用于标记数据源,需要全局唯一,可以采用 {type}{catalog} | |
数据源类型 | 可支持: datalake、rds、mpp等类型 | |
数据源 host | ||
数据源 port | ||
数据源 user | ||
数据源 password | ||
db_name | 默认为空,如果 db_name 不填写、那么采集所有的db | |
include_db_list | 默认为空,如果 db_name不填写,那么采集include_db_list里的db | |
exclude_db_list | 默认为空,如果 db_name不填写,那么采集所有不在exclude_db_list里的 db | |
激活状态 | 如果为激活状态,那么可以启动采集任务,否则无法执行采集操作 | |
调度周期 | 可以是 @daily、@hourly 也可以是 普通的 crontab 表达式 |
数据集元数据
字段名称 | 字段描述 | 备注 |
---|---|---|
data_source_name | 数据源名称 | |
db_name | DB 名称 | |
table_name | Table 名称 | |
dataset_name | 数据集名称 | |
schedule_interval | 调度周期 | |
is_active | 激活状态 |
校验规则元数据
字段名称 | 字段描述 | 备注 |
---|---|---|
dataset_name | 数据集名称 | |
check_name | 规则名称 | |
check_yml | 规则配置 yml | |
weight | 权重 | |
owner | check 的owner | |
alert_list | 高级列表 | |
校验规则任务元数据
字段名称 | 字段描述 | 备注 |
---|---|---|
dataset_name | 数据集名称 | |
check_name | 规则名称 | |
execution_date | 运行周期 | |
weight | 权重 | |
owner | 规则owner | |
state | 规则运行状态 | |
retry_number | 重试次数 | |
start_date | 开始时间 | |
end_date | 结束时间 |
校验规则任务结果元数据
字段名称 | 字段描述 | 备注 |
---|---|---|
dataset_name | 数据集名称 | |
check_name | 校验名称 | |
execution_date | 执行周期 | |
owner | owner | |
check_attribute | 告警规则阈值 | |
alert_list | 告警列表 | |
result_value | 校验结果值 | |
state | 校验状态:pass、fail、error | |
alert_tag | 告警状态 |
Metadata 设计¶
目前使用 RDS 当作 metadata 模块,目前压测是能支撑 2000 左右的并行操作, 我们目前的集群最多就启 500 个 pod,足以支撑我们的业务。
Worker 设计¶
worker 主要是去获取可执行的校验任务,执行校验任务。
大致流程如下图:
Monitor 设计¶
周期性的去轮询校验规则任务结果元数据,获取需要发出告警的任务,构建告警消息体。