主动监测在APM中应用的一些思考

博客首页文章列表 松花皮蛋me 2019-07-08 05:00
文章首发于公众号 松花皮蛋的黑板报松花皮蛋的黑板报,作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解

当用户碰到问题时极少会选择反馈,沉默的是大多数,现在不少APP比如知乎都提供了摇一摇弹出用户反馈入口,减少进入功能模块的时间成本,不过遗憾的是,针对同一个问题一百个人有一百种描述方法,用户反馈的语法分析和文本分类是一个大工程。另外通过排查传统基础层的方法很难快速定位到问题,比如运营商光缆被挖断,导致某地区CDN图片异常告警居高不下,由于用户到后端资源的不透明性,问题可能出现在缓存配置可能是因为小运营商非法调度也可能出现在源站,当你排查一圈后突然恢复了,诸如此类问题,通过主动监测可以快速定位到问题

那么什么是主动监测呢?主动监测是使用SDK在APP编译或者运行时自动地对代码进行注入下发监测任务,模拟用户真实请求,然后动态采集上报数据的一种技术,主动监测可以根据需要均衡采集,避免全采样或者频繁上报数据导致用户移动数据流量的流失,它还支持ping、traceroute、nslookup、抓包等网络性能问题定位的手段,另外可以提供完整的访问瀑布图包括错误元素

主动监测可以用于大网波动感知、CDN监控、网络劫持监测

大网波动感知比较好理解,就是通过不同省份不同运营商的用户去探测访问节点,然后得到各地区到各运营商的平均延迟和丢包情况,从而判断区域间链路故障情况

松花皮蛋的黑板报此处精彩内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“wx”,获取验证码。在微信里搜索“松花皮蛋的黑板报”或者微信扫描右侧二维码都可以关注本站微信公众号。

最后说说网络劫持监测,流量劫持一般是通过链路劫持插入特定报文或者抢答,另外一种是DNS劫持,它返回非真实网站IP地址,这两种都会使得客户端获取到错误数据,进而显示广告或者点击弹窗跳转,网上有一个前端神器Subresource Integrity,它是通过生成文件的唯一hash值进行对比校验的,但是对于大体量公司来说,涉及到多团队协作推进和后期新增模块约束保证,难度比较大,这个时候可以借助主动监测监控和处理劫持问题,劫持数据返回时间会比正常的时延低一个级别,TCP握手时候的TTL返回值会明显不一致,我们可以利用这些特点进行异常检测,另外可以利用白名单机制维护元素域名白名单、主机IP白名单、CNAME信息,但是会造成APP动态加载配置数据膨胀,需要一定的取舍,重点保障核心利益域名

DNS劫持涉及到买卖流量这个灰色产业链,想避免DNS劫持的话尽量不要使用运营商默认的DNS,可以使用移动解析(HttpDns),它基于HTTP协议向公司的DNS服务发送域名解析请求,替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式