数据质量线上监控的案例(下)
三、实时数据(流处理)的线上监控详解1 实时数据描述
今日实时数据的统计时间均为今日零时截至当前更新时间,有赞数据中心实时数据主要分为店铺和商品两个维度,会对交易(正逆向)、流量、营销、商品多个业务方的数据做处理,最后结果数据落入底层存储,涉及的处理组件为Flink,底层存储为druid和TIDB。
1.1 准确性规则-线上监控梳理
实时数据的准确性校验分为上下游数据对比、昨日实时与昨日离线数据对比。
上下游数据对比:是指业务方binglog日志传到数据侧时,在TIDB存入明细数据,按指标统计规则处理后与底层存储对比。
昨日实时与昨日离线数据对比:是指昨日实时数据完全落库后,通过接口再提取出来与昨日离线的数据进行比较。
1.2 及时性规则-线上监控梳理
实时数据及时性,上层表象为实时指标不变或者变化缓慢,下层表象是kafka有积压,导致延迟的主要影响因子是Flink的配置和集群资源,对于集群和kafka的监控由运维同学cover,暂不做详细介绍。
2 线上监控规则的实现
上下游数据对比,执行时间为:全天每20分钟执行一轮,一轮校验500次,均不相等时,触发告警。
<font size="3">@Override
@Scheduled(cron="0 0/20 * * * ?")
public void teamOrderCheck() {
tidbCheck();
druidCheck();
}
public void druidCheck() {
boolean druidAlert = true;
try {
//druid
for (int i = 0; i < 500; i++){
boolean res = checkOnceTeamOrder();
if (res){
druidAlert = false;
break;
}
Thread.sleep(2000 );
}
String druidPayCnt = getDruidPayCnt();
String detailPayCnt = getDetailPayCnt();
if (druidAlert && !druidPayCnt.equals(detailPayCnt)){
log.warn("500次检测均不通过.");
Stringcontent = "实时交易数据异常预警:druid 统计支付订单数:%s, 交易明细支付订单数:%s";
alertBiz.commonAlert(String.format(content,druidPayCnt, detailPayCnt));
}
}catch(Exception e){
log.warn("team order check error.");
}
}</font>
昨日实时和昨日离线数据对比,是基于接口自动化平台,分别调用数据应用的实时指标统计与离线接口,因依赖昨日离线数据,所以执行时间为每天早上7点,10分钟轮询调度方式,示例如下图:
四、线上监控效果
21年上半年以来,线上监控累计预警问题25+,其中18个是延迟性问题,有1个问题升级为故障,能够较好的在商家发现问题前,响应和处理,为商家正常使用准确的数据进行运营决策保驾护航。
五、后续规划
在数据质量线上监控实践中,仍有一些事项没有去落地,比如告警影响面评估、数据质量监控大盘等
【告警影响面评估】出现告警时,需要确认监控的业务影响范围有哪些,不仅仅可以给到客满同学,在回复商家咨询问题时更精准,更是可以在问题修复后,可以进行准确的回归测试。
【数据质量监控大盘】BI报表承接了元数管理平台的监控统计,而当前监控涉及多个平台,需要对各平台的监控数据做实时聚合统计,会涉及指标设计、实时任务、前后端的开发。
页:
[1]