本篇内容介绍了“大数据开发中表数据波动和码值分布波动监控方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
设计摘要:
任务执行、监控和报警从设计上是可以完全分开的,分开可以让任务执行尽可能只做任务执行的事情,监控可以根据多种监控规则来进行数据统计,数据分布,而报警则专注于如何根据监控的结果进行自定义灵活地报警。其中在设计上可以以监控为主体,任务执行和报警可以依据需求来定制,从而更好满足各方需求。 监控规则的设计,暂时从以下几个方面入手,数据分区的生成、数据分区的数据量、数据分区的数据量波动、表数据字段的码值分布波动。监控的主要职责是跑数,跑出报警需要的数据,而报警,可以根据监控的输出数据以及监控配置进行生成done文件或者undone 和 报警。
done目录和原表目录类似 表/版本/分区或日期/done/a.done or b.done or c.done (根据配置的根目录 + 表路径的后半部分来生成)
监控什么?要达到什么目的?
监控主要有两个目的,一个是报警,另外一个是拦截,拦截为了发生问题时不继续往下走,所以一般配置有拦截必有报警,有报警不一定有拦截,比如延时报警。
一个调度平台的调度时间,以天为单位,最后体现在跑批日志的分区字段上,可以支持回溯,其他监控需要的配置信息都在表数据监控的主表里面,一些特别的配置信息,会用到附属表,比如分布子表。
1.2.1分区有没有生成 show partitions | grep xx
1.2.2分区数量大于某个阈值,默认0:select count(*) from db_table where {db_table_date_column} = f($input_date) and version=20201205
1.2.3 分区数量波动:(分区数量的count - 前几天的count平均值) / 前几天的count平均值
1.2.4 数据码值分布波动监控
如何衡量数据分布波动
假设某指标码值和数据分布如下:
2020-12-05 | 2020-12-06 | 2020-12-07 |
---|---|---|
a 10% | a 9% | a 1% |
b 50% | b 51% | b 90% |
c 40% | c 40% | c 9% |
可以看到在12.07日,波动较大,需要做预警,问如何衡量这个波动,以及设置预警
把a,b,c看成一个向量,求比如最近一周(不包括当天)的向量平均值
$$ a1,b1,c1 $$
,然后计算当前向量
$$ a0,b0,b1 - a1,b1,c1 / (a1,b1,c1) = a3,b3,c3 $$
数据分布波动计算模型
key 当天向量
$$ a=(x,y,z...) $$
$$ b=(x1,y1,z1....) $$
那么波动向量
$$ c=(a-b)/a $$
,最终结果
$$ c=(x2,y2,z2...) $$
报警任务的每次启动可以依赖当天分区数据监控的日志跑批分区,即至少有跑批日志,才开始进行报警任务。报警的输入是监控主表和监控跑批表,输出done,undone && 报警,于报警日志中。
使用平台例行任务来调度监控任务,使用mysql开发环境来读配置,使用gp来存储结果数据,使用平台同步功能将同结构的hive结果表同步到gp来做报表展示,整个过程支持回溯。
表数据监控配置表:
-- 总表 create table table_monitor_conf ( db_table string, table_charge_people string comment '表负责人', done_path string comment 'done 文件输出位置前缀', where_condition string comment 'where 子句内容 eg:version=20201201 and dt=#YYYYMMdd#', if_done string comment '总开关:是否生成done文件' if_check_partition string comment '规则1:是否监控产出分区', if_check_partition_count string comment '规则2:是否监控产出分区数据量', if_check_partition_count_fluctuates string comment '规则3:是否监控产出分区数据量波动', if_check_distribute string comment '规则4:是否监控产出表数据分布波动' ) -- 分布子表if_check_distribute 为1时候使用 create table table_monitor_distribute_conf ( db_table string comment '表名', with_code_value_keys string comment '有码值的keys:k1,k2,k3', no_code_value_keys string comment '无码值的keys:k1,k2,k3' )
其中当table_monitor_conf 的 db_table = 'default.default' 时候表示是所有配置记录的默认值。
表数据量监控跑批记录:
create table table_monitor_records ( run_db_table string comment '跑批表,来源table_monitor_conf 的db_table', check_date_time string comment '任务实际跑批时间-程序生成', run_check_partition string comment '规则1产出:根据where_condition 是否产出分区' run_check_partition_count bigint comment '规则2产出:根据where_condition 跑出来的表数量', run_check_partition_count_fluctuates string comment '规则3产出:表数据量相对一周前平均值的数据波动', run_check_distribute_json comment '规则4产出:数据分布的大json', run_check_distribute_fluctuates comment '规则4产出:数据分布的大json相对一周平均值的波动大json' ) partition by (dt string comment '数据跑批分区,平台传入') comment '监控跑批记录表'
报警配置表
create table table_monitor_notify_conf( db_table string comment '库表', notify_enable string comment '是否开启此报警', normal_produce_datetime string comment '表数据正常产生时间', check_count_threshold bigint comment '监控产出分区数据量的阈值', check_count_fluctuates_threshold double comment '监控产出分区数据量波动的阈值' , check_distribute__json_threshold double comment '表数据分布阈值' )
报警日志表
create table table_monitor_notify_records( db_table string comment '哪个表有问题', view_url string comment '页面展示地址', table_charge_people string comment '表负责人', trouble_description string comment '有什么问题', check_date_time string comment '报警时间-程序生成', ) patition by (dt string comment '数据跑批分区,平台传入')
写出数据,done 文件 ,undone文件 每个表,每个分区只有一个
数据分布,在分布波动的第一次跑数据时候,就会写一份
总共有几个任务:监控任务,报警任务各1个,每天1点->晚上8点,10分钟一次
其他:
hi_email_message_phone string comment '报警方式,保留字段' zhiban_people string comment '值班负责人,保留字段',
TODO:
[ ] 增加值班人,报警方式升级、
[ ] 根据依赖来报警
[ ] 通过群内机器人,来操作报警日志表,达到报警暂停一段时间的作用 大数据开发。
“大数据开发中表数据波动和码值分布波动监控方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。