前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超实用案例:美团终端主动监控平台的建设

超实用案例:美团终端主动监控平台的建设

作者头像
IT大咖说
发布2018-07-30 10:20:32
1.2K0
发布2018-07-30 10:20:32
举报
文章被收录于专栏:IT大咖说

内容来源:2018 年 01 月 05 日,美团高级技术专家李燕青在“2018 移动技术创新大会”进行《终端主动监控平台的建设》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:3430 | 9分钟阅读

摘要

本次演讲主要分享美团的终端主动监控平台建设过程,分别介绍了目前的被动监控的局限性,以及主动监控的实现难点。

嘉宾演讲视频PPT回顾,请复制链接:http://t.cn/RdtLzmF,粘贴至浏览器地址栏即可。

为什么要做主动监控?

这张示意图乍看没什么问题,但是其实还是存在漏洞,比如当组件化的机器人某一部分变的足够大的时候,该部分其实可以脱离出来成为新的机器人,而当插件化机器人功能越来越弱小的时候也可以演变从一个组件。总的来说组件

很多公司都会有监控系统,包括前端的性能监控,业务数据监控,后端API服务质量监控等,从运维层面来看这些都非常重要。

一般来说监控在服务端应用的会比较多一些,那么为什么我们终端也要做主动监控呢?在讨论这个问题之前,我们先来看下上图展示的两个场景。一个在退票环节中遇到白屏,另一个是应用loading时间过长。

对于前端来说出现白屏的原因有多种,有可能是Webview初始化的时候出现问题。目前在使用了React 、Vue等框架之后,页面已经成为了一个大的模块,其他模块都是由这个入口进入,已经没有了静态的内容,因此无从判断具体问题的出处。这种情况其实在测试阶段很难被发现,因为它并不是普遍现象。

最后我们对这两种情况经过排查发现,白屏问题是由运营商劫持造成的。第二种问题是由于在美团应用中用户选择的城市和定位城市不一致,导致数据接口返回数据出现问题。

被动监控

目前业界的监控系统基本上分为3类。一类是业务监控,这应该是每个公司都必备的,比如订单和GMV的监控。第二类是客服,是否存在客服主要由公司的性质决定。第三类是用户反馈,最直接的方式就是App Store的用户评价。以上这三类监控方式其实都是被动式的。

被动监控主要面临的问题有三个。一是滞后,只有在问题发生且已经造成损失之后才能去着手解决。二是发现难,因为在上线之前已经通过测试解决了普遍性的问题,等到上线之后所出现的问题其实都不具备普遍性。三是复现难,综合考量用户基数、设备、网络环境等各方面的情况就会发现问题的出现有着很多可能,即使用户给予了反馈也很难再现问题发生时的环境。

如何做?

主动监控做什么

既然被动监控存在各种问题,那么就要开始做主动监控,其目的是为了先于用户之前发现问题。初期我们的目标是能够监控白屏、运营商劫持、客户端接口错误等问题。

主动监控的目标

主动监控的实现需要达到几个目标。第一个是覆盖尽可能多的样本率。第二个是要有时效性,虽然从被动监控的业务数据波动中也能发现问题,但是不同情况下灵敏度会出现差异。第三个是覆盖,这里主要指的是覆盖业务的整个流程,以及各种平台。最后是自动化,尽可能的减少人工干预的时间。

接下来我们来看下这四个目标所涉及的具体问题。首先是样本率,主要涵盖台、设备、网络和操作方式四个方面,就以平台来说移动端的优先级要高于PC端,另外网络环境不能仅限于WiFi下。其次是时效性,一方面要保证实时性,另一边要配备相应的报警系统,最后还是要有人值班。到了自动化阶段,稳定性是优先要求,其次要有日志存储的功能,因为有些问题并不能轻易的复现,另外还要选择合适的测试框架。最后是覆盖,我们希望覆盖的范围足够的广,包括搜索、支付、退票、验证码等。

可以发现这里面所涉及的问题还是比较多的,也存在不少难点,所以我们一期做的还是比较简单。首先是样本率方面,虽然我们的安卓用户较多,但同时碎片化也非常严重,因此初期只选择了PC和iOS这两个平台。设备上则使用ipad和MacBook Pro跑自动化流程。自动化方面,iOS上采用的是Appium加WDA的方案,PC端采用的是Google的Headless Chrome(puppeteer)。

PC流程图

我们先看下PC的初期方案。这里首先会有一些业务的case,用来保证整个流程的顺利执行,有点类似于自动化的case。图中左半部分运行在node上,通过Headless Chrome来承载抓包、打码、diff这几个功能。

抓包的主要作用是抓取每个请求的包,然后转化成HLR的包,最后存储起来方便后续分析问题。

打码针对的是内部验证码,主要是为了满足自动化的需求。

Diff是为了应付运营商的劫持,我们首先会跑一遍整个业务的流程,然后抓取到所有的js和css,最后将它们与git仓库中最新的业务代码做diff。如果发现有代码被篡改就实时发出警报。这套系统之上还有一个消息系统,用来通知每个负责的人,以及负责收集消息,它还会连接到报警系统,由报警系统通过短信或邮件的方式向内部报警。这里还需要有日志系统,一方面记录业务流程的进展,另一方面记录每一步请求所抓的包。

最后是值班系统,我们这边是每周固定一个人值守,值班系统每天会按级别分拣出报警。

问题

我们将一期的方案整个跑下来之后,发现只能算是勉强可用,还是存在各种问题。首先样本还是太少了,毕竟只有ipad和MacBook Pro,发现问题的几率太小。其次是流程经常中断,比如支付环节中输入验证码就无法做到自动化。第三在ipad上运行的时候app会有crash,这自然就会中断流程。第四是case变动频繁,一旦业务功能发生改变case就要随之改变。第五是上线的js会压缩混淆,这样diff的时候每次都会不一样,并没有什么意义。最后是存在大量报警,其中有效的并不多,需要依靠人工筛选。

美团点评云测

为了解决面临的样例过少的问题,我们接入了内部的美团点评云测。它是一个自动化测试系统,包含一个Jenkins和多个server,有着各种测试设备以及一个存储系统,可以自动或人工的提交自动化测试任务。

ios流程图

上图是二期接入美团点评云测后iOS的解决方案。首先Jenkins会自动的跑任务,之后还是一堆的测试case,再通过Applum加WDS实现流程自动化,测试设备iPad使用Usb hub连接起来。其他的消息系统、报警系统和值班系统还是没有变化,不过这里多出来了proxy和server。Proxy是为了app中的抓包,抓取的是与服务端的一些请求,包括js、css以及图片。

对于支付的自动化问题,其实只要开通支付宝白名单就可以免验证码,Js的diff改为基于AST之后也能够正确的验证。

Case变动频繁

我们针对Case变动频繁的解决方案可能会比较激进。就是iOS、Android、H5只做展现,单独有一层完全使用js写的业务逻辑,这同时也解决了客户端的动态化问题。但该方案也存在缺陷,即Android的webview只支持ES5。

大量报警

大量报警的问题主要是通过人工标记配合决策树来解决。先通过人工审查标记报警,然后由决策树对它们进行分类,标记有效报警和无效报警,在积累到一定量之后决策树就会将某一类的错误全部归类为无效。

实践与效果

经过两期的实践,iOS和PC上已经可以自动化,流程覆盖率达到了95%,报警的时效性基本上在5分钟以内,上线一个月后发现了4次问题,其中一次较为严重。最终我们的可监控范围包括白屏、页面性能、资源加载、业务接口、js报错。

虽然已经做了两期主动测试,但还是有一些遗留问题。一是对比海量的用户之后样本率还是不足。二是地域问题,PC上还可以通过代理模拟地域,但是iOS上暂时不好解决。三是业务的强耦合,针对每个业务都要再去做一套主动测试。

未来我们还准备接入android平台,解决地域问题,以及其他业务的自动接入。

整个过程总结起来主要有两点。一是主动与被动相结合,其实大业务量的情况下其实被动监控会更灵敏,所以要发挥他们各自的优势。二是与自动化测试相结合。

这张图是我们总结的选型方案,分为普遍性问题和业务量大两个方向。普遍性问题可以直接通过自动化和人工测试解决。业务量大且又是普遍性问题的情况下被动测试会更灵敏。

以上为全部分享内容,谢谢大家! 推荐文章

  • 向Kubernetes容器云平台迁移,你必须知道的9件事
  • 从选型到实现——企业级云端大数据平台最佳实践
  • 小米弹性调度平台Ocean——从PaaS到DCOS
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档