TA的每日心情 | 无聊 昨天 09:05 |
---|
签到天数: 1050 天 连续签到: 1 天 [LV.10]测试总司令
|
三、实时数据(流处理)的线上监控详解
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次检测均不通过.");
- String content = "实时交易数据异常预警: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报表承接了元数管理平台的监控统计,而当前监控涉及多个平台,需要对各平台的监控数据做实时聚合统计,会涉及指标设计、实时任务、前后端的开发。
|
|