教你玩转友盟应用性能监控U-APM平台

网友投稿 1205 2022-05-30

目录

前言

正文

一、U-APM 应用性能监控平台介绍

1. 大核心优势

2. U-APM 与其他产品功能对比

二、集成友盟 SDK 步骤

第一步、进入U-APM功能首页

第二步、填写应用程序信息并注册

第三步、下载并集成基础SDK

第四步、初始化代码

第五步、观察控制台统计数据

三、集成 SDK 过程中遇到的问题

问题1.  错误: 程序包com.umeng.commonsdk不存在

问题2. SDK集成好后,监控平台没有看到相关的统计数据

问题3. 报错:Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER

四、实际问题定位与解决

1. 崩溃实例分析

2. 设置告警策略

3. 其他功能

结尾

前言

友盟推出了全新的应用性能监控平台 U-APM,U-APM 可以帮助我们深入了解应用的性能和稳定性,帮助我们高效提升应用的质量。通过实时采集新版本上线后的崩溃信息,提供了多种辅助定位问题的关键信息及多维度分析报表,从而能够快速发现问题、定位问题、解决问题。

正文

一、U-APM 应用性能监控平台介绍

1. 大核心优势

1)捕获采集类型丰富,支持Java、Native、Swift、Objective-C、ANR、自定义异常的捕捉。

2)快速定位错误根源,提供行为日志、详细日志、内存快照、设备信息、自定义字段,帮您快速发现问题原因,提升问题解决效率。

3)智能告警专业服务,提供邮件、钉钉、飞书、企业微信告警触达通道,多时间段、多指标组合式告警,助您7*24小时监控应用情况。提供专业客服+技术支持,丰富用户课程,线下沙龙等,助您快速上手。

4)主流热门机型,随时随地获取海量Android和iOS云端真机, 稳定不掉线,操作流畅无延迟,省却百万真机购入费用,保障App质量。

2. U-APM 与其他产品功能对比

功能项

U-APM

其他产品

数据最长查询时间

90天

60天

崩溃捕获

支持

支持

ANR

支持

支持

自定义异常

支持

支持

卡顿分析

Android &iOS双端全采

仅支持Android

启动分析

首次\冷\热启动,慢启动设备查询、启动崩溃分析

不支持

内存分析

支持

不支持

网络分析

即将上线

不支持

页面分析

即将上线

不支持

错误/异常分布

系统、设备、版本、地域、运营商、渠道、使用时长、页面

系统、设备、版本

告警触达方式

钉钉、飞书、企业微信、邮箱

邮箱

告警类型

Java崩溃、Native崩溃、ANR、自定义异常、C#错误、Lua错误、卡顿、OOM异常

崩溃

支持单一错误告警

支持

不支持

告警触发条件

指标比值支持且/或设置,时间、版本可灵活交叉设定

固定指标固定条件

云真机

支持

不支持

二、集成友盟 SDK 步骤

如果想要集成友盟的SDK也是需要一定操作步骤的,在同类产品中,过程不算法复杂,但也不是很简单。至于如何更加便捷,是不是可以考虑把填写应用信息的步骤省略掉?好了,这个问题留给咱们产品同学吧。接下来,我们开始详细介绍。

第一步、进入U-APM功能首页

U-APM功能体验链接地址:https://at.umtrack.com/q0Dmaa

HYPERLINK "https://apm.umeng.com/apps/list" https://apm.umeng.com/apps/list

第二步、填写应用程序信息并注册

进入创建应用界面,首先填写应用名称 AVPlayer,然后选择平台,这里需要注意的是友盟支持iPhone、iPad、Android三个移动终端平台,我们选择安卓,默认中文为应用语言。我们的应用程序是一款播放器,因此应用类型选择影视观看/本地播放。最后,填写应用程序的基本描述信息,点击“注册应用”按钮。

完成注册后,系统会给出应用程序的AppKey,为了保密,截图中隐藏了部分内容,请见谅。

第三步、下载并集成基础SDK

教你玩转友盟应用性能监控U-APM平台

集成基础 SDK 有两种方式,分别是线上接入 SDK 和手动集成 SDK。目前,可能是考虑到新旧版本的兼容性问题,官方推荐新的 APP 使用线上接入 SDK 的方式。

那我们就与时俱进,以新版 APP 集成SDK为例进行演示说明。

1. 在工程 build.gradle 配置脚本中 buildscript 和 allprojects 段中添加 sdk maven 仓库地址。

配置方式如下:

buildscript {

repositories {

google()

jcenter()

maven { url 'https://repo1.maven.org/maven2/' }

}

dependencies {

classpath 'com.android.tools.build:gradle:3.4.0'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

}

}

allprojects {

repositories {

google()

jcenter()

maven { url 'https://repo1.maven.org/maven2/' }

}

}

2. 集成组件化各业务SDK

在 maven 中可以灵活配置所需的 SDK,在工程 App 对应 build.gradle 配置脚本 dependencies 段中添加基础组件库和统计 SDK 库的依赖。

配置方法如下:

// 友盟基础组件库(所有友盟业务SDK都依赖基础组件库)

implementation "com.umeng.umsdk:common:9.4.2" // 版本号(必选))

implementation "com.umeng.umsdk:asms:1.4.1" // asms包依赖(必选)

implementation "com.umeng.umsdk:apm:1.4.2" // U-APM产品包依赖(必选)

代码实例:

3. 功能依赖库介绍

当然,也可以根据应用程序 APP 的实际需要添加其他功能的依赖库,依赖库的种类非常多,比如:

1)友盟基础组件库(所有友盟业务SDK都依赖基础组件库)

业务

组件

基础组件

com.umeng.umsdk:common:x.x.x(必选)

基础组件

com.umeng.umsdk:asms:x.x.x(必选)

2)友盟统计SDK依赖坐标

业务

组件

友盟统计SDK

com.umeng.umsdk:abtest:x.x.x //ABTest模块依赖

友盟统计SDK

com.umeng.umsdk:game:x.x.x //游戏统计依赖

3)应用性能监控SDK依赖坐标库

业务

组件

基础组件(必选)

com.umeng.umsdk:common:x.x.x

asms包依赖

com.umeng.umsdk:asms:x.x.x

应用性能监控包(必选)

com.umeng.umsdk:apm:x.x.x

游戏统计SDK依赖(可选)

com.umeng.umsdk:game:x.x.x

4)友盟分享SDK核心库

业务

组件

友盟分享SDK核心库(使用U-Share必选)

com.umeng.umsdk:share-core:x.x.x

友盟分享面板核心库(使用U-Share必选)

com.umeng.umsdk:share-board:x.x.x

5)支持gradle在线依赖的友盟分享模块

业务

组件

QQ分享模块

com.umeng.umsdk:share-qq:x.x.x

微信分享模块

com.umeng.umsdk:share-wx:x.x.x

新浪微博分享模块

com.umeng.umsdk:share-sina:x.x.x

支付宝分享模块

com.umeng.umsdk:share-alipay:x.x.x

钉钉分享模块

com.umeng.umsdk:share-dingding:x.x.x

6)友盟推送SDK依赖坐标

业务

组件

PushSDK核心库

com.umeng.umsdk:push:x.x.x

PushSDK必须依赖utdid库,所以需要加入对应依赖

com.umeng.umsdk:utdid:x.x.x

httpdns支持库,必须添加

com.umeng.umsdk:alicloud-httpdns:x.x.x

httpdns支持库,必须添加

com.umeng.umsdk:alicloud-utils:x.x.x

httpdns支持库,必须添加

com.umeng.umsdk:alicloud_beacon:x.x.x

消息推送核心库,必须添加

com.umeng.umsdk:agoo-accs:x.x.x

消息推送网络核心库,必须添加

com.umeng.umsdk:agoo_networksdk:x.x.x

消息推送日志核心库,必须添加

com.umeng.umsdk:agoo_tlog:x.x.x

消息推送网络核心库,必须添加

com.umeng.umsdk:agoo_tnet4android:x.x.x

7)厂商推送依赖坐标(单一厂商通道下相关组件必须全部集成,例:小米通道集成2个组件)

业务

组件

小米-push

com.umeng.umsdk:xiaomi-push:x.x.x

小米-umengaccs

com.umeng.umsdk:xiaomi-umengaccs:x.x.x

华为-basetb

com.umeng.umsdk:huawei-basetb:x.x.x

华为-pushtb

com.umeng.umsdk:huawei-pushtb:x.x.x

华为-umengaccs

com.umeng.umsdk:huawei-umengaccs:x.x.x

魅族-push

com.umeng.umsdk:meizu-push:x.x.x

魅族-umengaccs

com.umeng.umsdk:meizu-umengaccs:x.x.x

OPPO-push

com.umeng.umsdk:oppo-push:x.x.x

OPPO-umengaccs

com.umeng.umsdk:oppo-umengaccs:x.x.x

vivo-push

com.umeng.umsdk:vivo-push:x.x.x

vivo-umengaccs

com.umeng.umsdk:vivo-umengaccs:x.x.x

第四步、初始化代码

统一对各个业务进行初始化接口,总共分三点,下面分别介绍。

1)隐私合规中加入友盟+SDK合规声明

https://developer.umeng.com/docs/147377/detail/213789。这一点是非常必要的,最近审核非常严格,特别是移动端APP。

2)在Applicaiton.onCreate函数中调用预初始化函数UMConfigure.preInit()

敏感的小伙伴,在这里就立马会提出一个疑问:调用友盟的这个方法会不会影响APP的移动速度?答案是多虑了。preInit() 作为预初始化函数,耗时极少,不会影响App首次冷启动的用户体验,不会采集设备信息,也不会向友盟后台上报数据。

友盟预初始化函数声明如下:

public static void preInit(Context context, String appkey, String channel)

代码截图如下:

3)客户端在用户同意隐私政策后,开始正式初始化友盟SDK

调用初始化函数UMConfigure.init(),友盟初始化函数声明如下:

UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret)

代码截图如下:

第五步、观察控制台统计数据

完成设置后,我们返回到首页,就可以查看相应的APP应用程序的统计信息了,包括异常次数、影响用户数、告警次数、云真机剩余分钟数等。

三、集成 SDK 过程中遇到的问题

问题1.  错误: 程序包com.umeng.commonsdk不存在

个人感觉,这是最常见的一种错误,但是官方的文档中居然没有相关的说明。官方常见问题列表地址:https://developer.umeng.com/docs/119267/detail/181401 ,感觉其中很多内容都是官方自己总结的,不够接地气,比如这个错误就不知道应该归到哪一类。官方是不是可以考虑增加一个社区模块,方便开发者之间交流。具体位置可以参考下图:

最终,折腾了好久,也没有通过在线模式集成友盟 SDK,后来还是换成了本地依赖模式解决这个问题。

问题2. SDK集成好后,监控平台没有看到相关的统计数据

这个问题是我疏忽导致的,我以为在调用UMConfigure.preInit()方法的时候传入AppKey就行了。而UMConfigure.init()方法没有同步更新,因此导致了这个问题。我也由此断定,真正起到关联作用的方法是UMConfigure.init()。当然也期待官方更合理的解释,因为我的理解可能有误。

问题3. 报错:Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER

集成友盟 SDK 后,安装 APP 时报了这个错误。后来,把之前老的 APP 从手机端卸载,再重新安装,问题解决。这样看来,和集成友盟 SDK 的关系不大,但是这个问题就是这么神奇。

四、实际问题定位与解决

我们完成友盟 SDK 集成后,就可以通过后台首页发现对应的应用名称集成状态显示“已集成”。同时,我们还可以查看应用程序的运行状态,比如异常次数和影响用户数。

接下来,我们根据具体的异常监控结果进行分析。

1. 崩溃实例分析

通过后台的“分析”页签,找到“崩溃分析”模块,可以发现今天有一例崩溃错误。

在当前页面往下划,我们可以看到相应的错误列表和错误分布。其中,错误列表包含了错误发生的摘要、ID、最近一次的发生时间、错误类型、版本范围、错误次数、影响用户数、处理状态等,具体内容如下图所示:

错误分布包含了设备分布、系统分布、运营商分布、版本分布、页面分布、时长分布、渠道分布、地域分布,具体内容如下图所示:

好了,接下来,我们具体分析一下这个错误。点击错误列表中错误摘要的链接进入错误详情,里边有错误的具体明细,比如下图所显示的错误原因是数组越界:ArrayIndexOutOfBoundsException,具体的代码位置在文件 UappActivity.java 的第 93 行。

我们找到对应的代码行数看一下代码情况,具体截图如下:

哇哦,看到代码再结合报错提示,我们立马知道了这行代码写的有问题,大小为 3 的数组,索引值最大为 2 ,不可能是 3,修改成 0、1、2,问题解决。

重新编译后安装,再运行看一下效果,执行相同的操作,崩溃不再发生。此时,我们就可以手动修改该崩溃的处理状态了,比如下图所示,将“未修复”修改为“已修复”,其中还包括另外两个状态,分别是“处理中”、“已忽略”。

2. 设置告警策略

另外,我们还可以针对某种错误类型设置告警策略,比如上面的崩溃问题,如果我们不确定是否真正解决了。那么就可以点击“告警”按钮,进入告警策略设置页面。

在新建告警计划页面中,我们需要设置告警计划名称,一般使用错误名称+错误ID的方式,但是注意不要超过20个字符。同时,还可以设置告警生效时间,默认实时通知,也可以自定义通知时间段,比如每周二的下午三点到四点。

另外,还可以自定义告警触发条件,一般都是错误发生次数大于 0 时就会生效。还可以指定生效的应用版本,比如我只想监控 APP 应用最新的 3.0 版本,就从下拉列表中选择对应的版本即可。通知方式可以选择邮箱、钉钉、企业微信、飞书中的至少一种,常见的方式是前两种。

但是,在实际使用过程中,自己尝试了两个告警计划,邮箱都没有收到对应的通知。对于这个功能官方好像没有版本限制,通知消息列表也是空的,非常奇怪,本来想把这个问题留给以后排查的。但是,后来不知过了多久,居然收到了邮件通知,看来延时还是挺大的。邮件截图如下所示:

3. 其他功能

友盟应用性能监控平台 U-APM 除了上边介绍的崩溃分析和告警通知功能外,还有ANR分析、自定义异常、卡顿分析、启动分析、内存分析、网络分析等功能模块。

1)ANR分析,ANR 是用户在使用 Android APP 过程中出现弹框,提示应用无响应,计为一次ANR。稳定性模块可以捕获发生在主进程和子进程中的ANR。通过对ANR发生次数的计算,为开发者展示了App在所选时间中的错误趋势、错误分布和错误列表,可快速地分析出导致APP发生ANR的主要原因。

注意事项:启动监控ANR功能,Android 需要集成Common 9.3.8及以上 + APM 1.1.0 及以上版本号。iOS 需要集成Common 7.2.8及以上 + APM 1.1.0 及以上版本号,升级后自动采集。

2)自定义异常,开发人员可以自己定义某种异常类型,程序对异常进行了捕获处理,为更好了解并监控这类异常,开发人员也将这类异常上报到友盟+的错误分析服务中。不得不说这个功能应用场景还是非常多的,Bugly也有类似的功能。

3)卡顿分析,当消息设定时长超出卡顿的定义阈值后会被记为卡顿,可以作为判断应用性能的指标。解决卡顿问题在提升用户体验方面具有非常重要的意义,合理优化卡顿指标在 APP 开发过程中是一件中长期的任务。

注意事项:使用卡顿功能,Android需要集成Common 9.3.8及以上 + APM 1.2.0 及以上版本号。iOS 需要集成Common 7.2.8及以上 + APM 1.2.0 及以上版本号,升级后自动采集。

4)启动分析,包括启动趋势、慢启动分析、启动过崩溃分析。通过监控 APP 应用启动耗时的平均值、分位值、区间分布等数据,以及启动阶段的性能分解数据,分析慢启动和启动崩溃的原因。

5)内存分析,包括 OOM 异常、内存占用。提供了 APP 在运行阶段的内存溢出、内存占用情况及分布详情,便于我们分析应用的健康状况和问题定位。

6)网络分析, 通过收集 HTTP 请求、网络错误、DNS解析等维度的数据,分析当前应用的网络状况,有利于开发人员定位网络相关的编码问题,比如超时处理,断网重连等常见问题。

结尾

通过本文的介绍,我们可以看出友盟应用性能监控平台 U-APM 的集成过程还是比较简单的,另外,U-APM 平台具备丰富的数据收集和功能分析能力,而且在具体的功能颗粒度划分方面做得也非常细。相比同类产品,比如Bugly、网易云捕等要强大很多。另外,在集成和使用过程中也遇到一些,并在文中有所体现,希望友盟团队不断完善 U-APM 平台,为移动端开发的小伙们带来新的福音。

刘振,全栈工程师,前后就职于传统广电巨头和音视频互联网公司,具有了丰富的音视频直播和点播相关开发经验,对WebRTC、FFmpeg和Electron有非常深入的了解。在 CSDN 上推出了很多音视频相关的技术专栏,累计产出了500余篇原创作品,荣获了 CSDN 2020 年博客专家荣誉勋章和 CSDN 2020 年博客之星 TOP40 荣誉称号。同时,作为华为云的云享专家,参加了很多社区活动并分享很多原创内容。

社区笔名:liuzhen007(Data-Mining)

Android API/SDK 应用性能管理 APM

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:excel表格里数字排序的方法详解(excel表格中数字排序方法)
下一篇:Java字符串相关的类详解(java常用的字符串类)
相关文章