1.1 产品介绍
移动分析服务(Mobile Analysis Service,简称 MAS)是 mPaaS 平台的一个核心基础服务组件,是一项方便您轻松地大规模收集、可视化并理解应用程序使用数据的服务。MAS 通过统计和分析客户端流量、性能质量和用户行为等数据,用数据实现产品、运营、推广的决策;通过对闪退的分析,快速定位闪退原因,提高程序稳定性。
1.1.1 功能简述
如图1-1所示,目前移动分析服务可分为以下功能:
用户行为分析:提供应用使用分析,包括用户报活、用户登录、新增用户等多种指标的统计功能,并支持按照平台、版本、地域、时间的多维度分析对比,方便用户更快速、便捷的了解自身App的使用情况。
稳定性分析:提供应用稳定性分析,包括闪退监控、异常监控、性能监控及用户诊断功能,帮助开发人员及时发现、定位问题。
问题诊断:提供应用问题诊断,包括个人用户诊断和诊断日志采集两部分。其中个人用户诊断实时获取用户客户端行为,诊断日志采集通过push方式下发指令到客户端传回客户端本地日志。
图1‑1 MAS产品功能图
1.1.2 功能特点
移动分析服务具备以下功能特点:
(1)极简接入:引入移动分析组件便可自动搜集用户行为日志、网络日志、异常日志,简单方便。
(2)全面分析:具备用户行为、终端问题、流量、电量、通讯链路、性能等多个目标的分析角度。
(3)多维度展现:可以从终端类型、终端版本、地域、网络类型、厂商机型等多个维度展现和分析移动应用数据。
(4)快速定位问题:闪退、异常日志提供发生错误的接口名称、异常原因、运行环境等信息,帮助开发者快速定位问题。
1.1.3 组件原理
MAS涉及的相关组件如下:
1. 移动日志网关(mdap)
移动日志网关内部有一个用于接收客户端投递日志的 nginx 进程,还有一个负责将日志传输到消息队列的JAVA进程。
2. 消息队列
消息队列负责将客户端的消息分发到后续系统。目前在阿里云底座使用的是SLS、在物理机底座使用的是开源的KAFKA。
3. 流处理引擎
流处理引擎处理消息队列中的日志并实时生成处理结果。MAS 控制台上的性能分析、日志回放、基础大盘 (PV/UV) 监控等分钟级别指标均为此引擎生成。目前是使用蚂蚁内部的 jstorm 版本以实现。
4. 离线处理引擎
离线处理的过程是:首先将消息队列中的日志进行保存到离线存储hdfs中,然后每天定时处理之前积攒的所有数据。
1.1.4 使用场景
(1)通过数据指导业务:帮助开发、运营人员利用数据进行产品、运营、推广方案的决策。
(2)提升用户体验:快速定位闪退位置,结合热修复功能快速修正APP闪退,提升用户体验、增加客户留存率。
1.2 产品架构
如图7-2所示,MAS系统由以下几个组件组成:
1. 流量入口
MAS的流量入口只有一个,就是客户端通过HTTP/HTTPS服务将日志投递给日志网关。
2. 存储结构
(1)关系型数据库 (MYSQL、OB)
用于保存用户配置的元数据(页面分析、自定义分析)、性能分析相关分类数据 (闪退分类、卡顿分类)和实时计算规则数据。
(2)时序数据库 ( MESDB )
用于保存实时计算引擎处理结果、实时计算引擎元数据、实时计算引擎自监控数据。
(3)OLAP数据库 ( EXPLORER )
用于保存自定义分析数据(实时计算产出)、漏斗分析数据(离线计算产出)。
3. 移动日志网关
移动日志网关(mdap)内部有一个用于接收客户端投递日志的 nginx 进程,还有一个负责将日志传输到消息队列的JAVA进程。
4. 消息队列
消息队列负责将客户端的消息分发到后续系统。目前使用的技术实现有阿里云的SLS、蚂蚁的ANTQ、开源的KAFKA。
5. 流处理引擎
流处理引擎处理消息队列中的日志并实时生成处理结果。MAS控制台上的性能分析、日志回放、基础大盘 (PV/UV) 监控等分钟级别指标均为此引擎生成。目前是使用蚂蚁内部的 jstorm版本以实现。
6. 离线处理引擎
离线处理的过程如图1-2所示,首先将消息队列中的日志进行保存到离线存储,然后每天定时处理之前积攒的所有数据。
图1‑2 MAS产品架构图
1.2.1 实时计算
客户端在启动时会将本地已有的日志打包压缩后上报到mdap应用上,mdap会投递一份日志到kafka,之后jstorm会从kafka中消费日志,分别进行实时的计算。jstorm内配置有三个拓扑(基础大盘拓扑、日志检索拓扑、自定义分析拓扑),三个拓扑会去消费不同topic里的日志,消费之后jstorm会做实时的计算,并把计算后的不同数据存储到对应的数据库存储比如mesdb、explorer、hbase等。
mappcenter通过masweb获取数据,不同的界面展示masweb会从不同的数据库中读取数据。比如实时大盘就是从mesdb中读取的数据;自定义分析就是从explorer中读取的数据。
其中用户通过mappcenter设置的配置信息,会由masweb存储到ob中。
1.2.2 离线计算
此外有一些更为复杂的日志分析,需要不同的规则清洗、耗时计算等,才能得到最终数据的分析结果。比如页面时长、漏斗分析等。
移动日志网关mdap上的flume进程会把原始日志数据同步一份存储到hdfs,由spark(离线计算的系统,每天凌晨计算以及跑批量任务)根据masweb的切分规则、计算规则等,进行数据清洗、计算等,最终计算后的数据会写入到hbase当中,masweb从hbase中获取数据进行展示(前一日的数据)。
1.2.3 日志模型
hdfs中存储的是原始日志,有些客户想要到自己的大数据分析平台上做一些自己的分析,这时就可以从hdfs中同步出来,自己做二次分析。
mdap上对应存储不同的日志类型包括以下类型:
(1)uniform_behavior行为日志
(2)uniform_behavior_auto自动行为日志
(3)uniform_exception异常日志
(4)monitor_performance性能日志
1.3 网络架构
如图7-3所示,主要分为实时计算和离线计算两个流程。
1. 实时计算
App客户端日志会先到mdap应用上,实时同步到kafka,kafka的日志再由jstorm消费进行实时计算,将时序性数据存储到mesdb,自定义分析数据存储到explorer数据库,最终masweb再将数据取出展示页面。
2. 离线计算
离线会同步到hdfs,由spark每天定时任务处理,数据存储hbase再由masweb获取展示。OceanBase主要保存元数据、配置信息等,也包括日志切分规则等缓存。
图1‑3 MAS网络架构图
1.4 常用日志
如图1-4所示,包含了MAS常用的运维日志目录,可用于日常运维问题排查使用。
图1‑4 MAS常用日志介绍
1.5 常见问题
1.5.1 MAS运维常用平台地址
hbasemaster-1/hbasemaster-2:60010 #hbase控制台
hbasemaster-1/hbasemaster-2:50070 #hdfs控制台
https://{mPaaSdpc-history-1-IP}:8443 #Azkanban管控界面
http://{mesdb外网slb的vip}:4200 #mesdb是mas里的一个数据库应用,打开是mesdb控制台
http://{masweb的外网slb的vip}/monitor/
http://{explorer-bee容器ip}:8047 #Ant Analytics平台,explorer-bee使用
http://{explorer-bee外网slb的vip}:9090/console.html #explorer每隔一个小时会把数据写入到hdfs里面
http://{nimbus容器ip}:8080 #jstorm的拓扑管理页面
http://{mPaaSdpc-manager容器的IP}:8000 #hive控制台
1.5.2 拓扑执行异常重启
MAS共运行了三个拓扑:
(1)kepler_custom 自定义分析拓扑
(2)kepler_mPaaS_master 基础大盘拓扑
(3)kepler_mPaaS_replays 日志检索拓扑
当出现以下场景可以进行重启:
(1)nimbus不可用,jstorm节点挂掉之后无法调度worker到其他jstorm节点
(2)nimbu可用,jstorm节点不可用导致拓扑异常
重启方法:进入nimbus容器执行以下命令
su admin
/home/admin/jstorm/bin/jstorm restart kepler_custom ## 重启自定义分析拓扑
/home/admin/jstorm/bin/jstorm restart kepler_mPaaS_master ## 重启基础大盘拓扑
/home/admin/jstorm/bin/jstorm restart kepler_mPaaS_replays ## 重启全文检索拓扑