搞了一个数据质量监控软件
场景:
- 1、数据从mysql定时同步到es或者其他数据源,但是时不时总是数据不一致,并且问题的发现很滞后
- 2、业务突然减少或者突然增多,想及时发现
- 3、数据仓库计算指标是否正确,想做一些验证
- 4、需要时不时的导出一些数据给开发,给领导,给客户,明明写sql就可以,但是每次都要找对应的开发者,开发很烦恼;或者干脆要各个业务各自开发成功能,还要不停迭代
- ......
推荐一种解决方案:
开源项目 有度·UDO
UDO数据监控是一款对数据同步、数据生成、数据预测做出监控的开源软件,是一个前后端分离的web项目。附上链接: UDO后端 + UDO前端
只要写sql即可解决上述的场景问题。
功能支持
- 域帐号/非域帐号登录
- 添加数据源
- 支持mysql, es, hive, clickhouse数据源
- 对数据源数据做监控
- 及时性监控: 预测数据记录数
- 比如: 我们预测每日订单数不少于10000单, 少于10000单就报警
- 数据同步监控: 监控数据同步任务是否成功执行
- 比如: mysql同步数据到es, 可以监控每天mysql产生的数据记录数量于es中新增的数据记录数量相同
- 一致性监控: 监控数据是否一致
- 比如: mysql订单表同步数据到es后, 可以监控mysql新增的订单总GMV和es中新增的订单总GMV是否相同
- 业务监控: 根据指定的查询导出业务数据,并发送邮件或企业微信通知
- 比如: 每小时查询一次创建失败的订单, 导出并发送邮件或企业微信通知
- 及时性监控: 预测数据记录数
- 定时执行监控任务
- 支持监控报警:
- 支持企业微信群聊机器人报警, 支持邮件报警(邮件要自己实现)
- 用户管理
- 项目管理
- 权限管理
举例:
-
场景1:数据同步监控,监控内置count,同步完成的数据记录数一致
# 原数据库 select id from msyql_table where create_time >= curdate() # 目标数据库 es _xpack插件支持 sql, 对sql函数的支持,es7.x及之后的版本更好 select id from es_index where create_time >= CURRENT_DATE()如果结果不一样,会触发报警
-
场景2:数据及时性监控,监控内置count
# 统计一小时内数据,可以在页面设置sql结果必须大于1000,及时性监控内置count select id from msyql_table where create_time >= date_sub(now(), interval 1 hour)如果结果小于1000,则会触发报警
-
场景3:数据一致性监控
# 比对昨天的统计数据结果是否一致 # 原数据库 select shop_code, count(1) as coun from mysql_table where create_time < curdate() and create_time >= date_sub(curdate(), interval 1 day) group by shop_code # 目标数据库 比如: HIVE select shop_code, table_count from ads_table where and dt = date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1) group by shop_code如果不一致,会报警,得出结果,类似如下格式:
原始表shop_code 原始表coun 目标表shop_code 目标表table_count 001 1000 001 N/A 002 5000 002 5000 003 4000 003 3500 -
场景4:业务监控
select id, name, age from mysql_table where xxxxx会将查询结果上传到阿里云OSS,并提供下载链接,可以在企业微信或邮件中看到链接