首页-> 博客 -> 详情

连连支付-基于大数据分析的移动端APM介绍

作者:永学 发布时间:2018-11-14

什么是APM?

APM(Application Performance Management)应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本﴾TCO﴿。虽然APM定义为性能管理,但是随着APM产品的发展,业内APM产品都包含了用户行为分析等用户体验管理UEM(User Expeirence Management)的功能。

移动端APM监控有那些功能?

●App Crash﴾崩溃﴿分析:崩溃次数、崩溃率、崩溃代码详情、慢交互。
●网络性能监控:网络耗时、网络错误、地域分布、运营商、DNS解析耗时、TCP建立连接耗时、SSL建立连接耗时、DNS劫持预警。
●用户体验与运营分析:点击率、PV/UV、用户地域分布统计、新老用户统计、用户停留时间、用户行为路径。

市面上提供移动端APM监控产品的厂商有哪些?

国外:
●AppDynamics http://www.appdynamics.cn/
●New Relic https://newrelic.com/

国内:
●百度云 https://cloud.baidu.com/product/apm.html
●阿里云 https://www.aliyun.com/product/arms
●听云 https://www.tingyun.com/
●网易 http://napm.netease.com/

为什么需要移动端APM?

移动端APM的目的主要为:1、协助开发者进行技术分析;2、帮助产品经理了解自己的用户。为移动APP产品提供以下帮助:
●及早发现网络问题,定向优化网络,提升用户体验。
●及时收到线上崩溃问题反馈,快速定位问题原因。
●产品运营数据分析,为产品运营做出决策提供数据支持。

连连支付移动端APM介绍

事件类型
日志采集以事件为最小单位,将事件分为以下类型:
●崩溃(crash)
●网络访问(network)
●页面浏览(进入(pageViewInto) /退出(pageViewOut))
●控件点击(clickControl)
●应用(启动(sdkStart)/退出(sdkStop))
●自定义事件(前后台切换)
对事件做分类的原因是因为:每种事件的触发上传时机不同,日志内容不同,实现方式,重要程度不同,针对不同的事件类型会采用不同的上传策略(实时、延时、采样)。

上报接口
对上报接口进行分类,是因为不同事件的上报策略不一样,需要根据日志报文大小、实时性要求等多方面考虑。上报策略可以有:实时上报、延迟上报、采样、客户端聚合后上报等。另外考虑到日志大小、为减少流量消耗和服务器压力,客户端需要进行适当的日志聚合后上传。
●异常捕获上报
●用户行为上报
●网络性能上报

配置管理
考虑到在交易高峰期,需要保证关键数据的上报稳定和及时,需要对其他非关键数据降级,延迟上报或采样。

元数据
●交易token
●APP信息:名称、appid、版本
●设备信息:品牌(苹果/华为)、设备型号﴾iPhone4/iPhone6/iPad﴿、操作系统(iOS7.1/iOS8.1)、分辨率(640*1136)、Mac地址
●网络信息:运营商(中国移动、中国联通)、联网方式﴾3G\4G\WIFI﴿、客户IP
●事件内容:崩溃信息、页面信息、访问网络等
●扩展信息:该事件类型的扩展内容。

技术架构

客户端数据采集和上传
客户端通过埋点将收集的数据上传到服务端,数据上传采用的数据传输格式为Google Protobuf。Protobuf是Google的一种数据交换的格式,它独立于语言,独立于平台。Google提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。与同类型的数据交换格(json,xml)式相比,由于Protobuf是基于二进制数据传输格式,因此它具有高效的解析速度和更小的体积,并且由于它是直接基于.proto文件生成对应语言的数据结构,因此它的转换过程更加简单直接。
主要优点有:
        ●高效的解析速度
        ●小巧的传输体积
        ●直接上手,简单易用
        ●解析可控,误解率低
另外对一些上传的数据进行了加密处理,因密钥存放在客户端容易被反编译获取,所以不适宜采用对称加密算法(DES、3DES、AES等),需要选用非对称加密算法(RSA、DSA、ECC等)。非对称加密算法的密钥分为公钥和私钥,公钥用于加密,私钥用于解密。私钥不便公开,只能由密钥所有者保存,公钥可以公开。因此可以选用非对称加密算法RSA作为数据的加解密算法。客户端使用公钥进行加密,服务端使用私钥进行解密。

服务端数据解析和采集
服务端通过搭建的nginx集群提供HTTP协议的数据上传接口,nginx服务器接收到请求后对报文进行解密和解析,然后将结果输出到access.log日志文件中,使用Filebeat监控access.log日志文件的变化,并将数据发送到消息队列kafka。

数据处理和存储
采集的日志数据分别存储到Elasticsearch和mysql。一、日志数据通过Logstash存储到日志仓库Elasticsearch,通过Kibana可以查看原日志内容。二、日志数据通过聚合和流处理Spark Streaming后,将结果指标写入mysql数据库。

结果指标展示和监控
连连卫士读取mysql数据库的实时结果指标进行展示,并实时对异常进行监控告警。