lsekfe 发表于 2022-11-8 11:32:54

数据质量线上监控的案例(下)

三、实时数据(流处理)的线上监控详解
  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]
查看完整版本: 数据质量线上监控的案例(下)