业务报警与检测

业务报警与检测

说明

检测与报警,大概分为以下几部分:
1. 基础服务的稳定性
    1. 云服务器
    2. DDoS
2. 应用服务器的稳定性
    1. ???
3. 关键业务的报警  

关键业务报警具体例子

  1. 背景
现有业务漏斗: APP总活跃用户数(p1) -> APP点击活动页面用户数(p2) -> APP进入下单页面用户数(p3) -> APP产生订单用户数(p4) -> APP产生付费订单用户数(p5),
现在需要检测 p1~p5每个上一次到下一级的转化率是否在合理范围内,如果不合理,则通过短信报警。
  1. 根据现有的架构,用到的具体技术如下:
    1. linux cron tab
    2. sparing quartz
    3. sqoop
    4. spark
    5. oozie-workflow
    6. oozie-coordinator
    7. rabbitMQ
  2. 流程图
    业务报警与检测_第1张图片

  3. 具体实现

    1. 业务db -> 数据中心db
      1. spring-quartz,每5分钟同步业务表数据到数据中心db中
    2. linux cron tab 每10分钟把数据从mysql导入hive

      */10 7-23 * * * /bin/sh /data/hadoop/sqoopShell/check_funnel_import.sh >/data/hadoop/sqoopShell/log/check_funnel_import.sh 2>&1 &
    3. spark 每10分钟 运行sql监测一下业务数据
      ![MacDown image]
      业务报警与检测_第2张图片

    4. 如有异常,发送警报消息至RabbitMQ

    private static void sendToMq(String phoneNum, String msg) {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername(username);
        factory.setPassword(password);
        factory.setHost(host);
        factory.setPort(port);
    
        Connection connection = null;
        Channel channel = null;
        try {
            connection = factory.newConnection();
            channel = connection.createChannel();
    
            channel.exchangeDeclare(EXCHANGE_MSG, "direct", true);
    
            Map<String, Object> arguments = new HashMap<>();
            arguments.put("x-ha-policy", "all");
            channel.queueDeclare(QUEUE_MSG, true, false, false, null);
    
            channel.queueBind(QUEUE_MSG, EXCHANGE_MSG, ROUTINGKEY_MSG);
    
            // content
            Map<String, Object> map = new HashMap<>();
            map.put("mobile", phoneNum);
            map.put("content", msg);
            String sendMsg = JsonConverterUtil.objectToJson(map);
    
            byte[] msgBytes = sendMsg.getBytes("UTF-8");
    
            channel.basicPublish(EXCHANGE_MSG, ROUTINGKEY_MSG, null, msgBytes);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            if(channel != null) {
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }
            }
    
            if(connection != null) {
                try {
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

你可能感兴趣的:(大数据)