业务报警与检测
说明
检测与报警,大概分为以下几部分:
1. 基础服务的稳定性
1. 云服务器
2. DDoS
2. 应用服务器的稳定性
1. ???
3. 关键业务的报警
关键业务报警具体例子
- 背景
现有业务漏斗: APP总活跃用户数(p1) -> APP点击活动页面用户数(p2) -> APP进入下单页面用户数(p3) -> APP产生订单用户数(p4) -> APP产生付费订单用户数(p5),
现在需要检测 p1~p5每个上一次到下一级的转化率是否在合理范围内,如果不合理,则通过短信报警。
- 根据现有的架构,用到的具体技术如下:
- linux cron tab
- sparing quartz
- sqoop
- spark
- oozie-workflow
- oozie-coordinator
- rabbitMQ
流程图
具体实现
- 业务db -> 数据中心db
- spring-quartz,每5分钟同步业务表数据到数据中心db中
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 &
spark 每10分钟 运行sql监测一下业务数据
![MacDown image]
如有异常,发送警报消息至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(); } } } }
- 业务db -> 数据中心db