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

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 友盟推出了全新的应用性能监控平台 U-APM,U-APM 可以帮助我们深入了解应用的性能和稳定性,帮助我们高效提升应用的质量。通过实时采集新版本上线后的崩溃信息,提供了多种辅助定位问题的关键信息及多维度分析报表,从而能够快速发现问题、定位问题、解决问题。

前言

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

正文

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

1. 大核心优势

1)捕获采集类型丰富,支持JavaNativeSwiftObjective-CANR、自定义异常的捕捉。

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

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

4)主流热门机型,随时随地获取海量AndroidiOS云端真机,稳定不掉线,操作流畅无延迟,省却百万真机购入费用,保障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

1.jpg

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

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

2.jpg

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

哦.jpg

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

集成基础 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.jpg

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)

代码截图如下:

4.jpg

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

调用初始化函数UMConfigure.init(),友盟初始化函数声明如下:
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret)

代码截图如下:

5.jpg

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

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

6.jpg

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

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

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

7.jpg

最终,折腾了好久,也没有通过在线模式集成友盟 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 集成后,就可以通过后台首页发现对应的应用名称集成状态显示已集成。同时,我们还可以查看应用程序的运行状态,比如异常次数和影响用户数。

8.jpg

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

1. 崩溃实例分析

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

9.jpg

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

10.jpg

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

11.jpg

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

12.jpg

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

13.jpg

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

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

14.jpg

2. 设置告警策略

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

15.jpg

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

16.jpg

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

17.jpg

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

18.jpg

3. 其他功能

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

1ANR分析,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 平台,为移动端开发的小伙们带来新的福音。



作者:刘振

社区笔名:liuzhen007Data-Mining)

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
|
4月前
|
监控 Kubernetes Go
全链路追踪 & 性能监控,GO 应用可观测全面升级
当前,大多数面向 Golang 应用的监控能力主要是通过 SDK 方式接入,需要开放人员手动进行埋点,会存在一定问题。对此,可观测 Go Agent 应运而生。本文介绍的阿里云可观测 Go Agent 方案,能通过无侵入的方式实现应用监控能力。
108715 24
|
3月前
|
监控 Java 开发者
揭秘Struts 2性能监控:选对工具与方法,让你的应用跑得更快,赢在起跑线上!
【8月更文挑战第31天】在企业级应用开发中,性能监控对系统的稳定运行至关重要。针对流行的Java EE框架Struts 2,本文探讨了性能监控的工具与方法,包括商用的JProfiler、免费的VisualVM以及Struts 2自带的性能监控插件。通过示例代码展示了如何在实际项目中实施这些监控手段,帮助开发者发现和解决性能瓶颈,确保应用在高并发、高负载环境下稳定运行。选择合适的监控工具需综合考虑项目需求、成本、易用性和可扩展性等因素。
44 0
|
3月前
|
Prometheus 监控 Cloud Native
性能监控之 Golang 应用接入 Prometheus 监控
【8月更文挑战第4天】性能监控之 Golang 应用接入 Prometheus 监控
207 0
性能监控之 Golang 应用接入 Prometheus 监控
|
4月前
|
缓存 监控 Java
Spring Boot应用的性能监控与优化
Spring Boot应用的性能监控与优化
|
5月前
|
监控 Java 数据安全/隐私保护
性能监控之 JMX 监控 Docker 容器中的 Java 应用
【6月更文挑战9天】性能监控之 JMX 监控 Docker 容器中的 Java 应用
642 1
|
4月前
|
运维 监控 Java
Spring Boot应用的性能监控与优化指南
Spring Boot应用的性能监控与优化指南
|
6月前
|
Prometheus 监控 Cloud Native
Prometheus监控平台配置--监控集群资源信息
在scrape_configs 配置项下添加Linux 监控的job,其中 IP 修改为上面部署node_exporter机器的ip,端口号为9100,需要注意缩进。
247 6
|
6月前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
6月前
|
Rust 监控 算法
Rust中的系统性能监控与调优:提升应用效能的关键实践
随着Rust在系统级编程中的广泛应用,性能监控与调优变得尤为关键。本文介绍了在Rust中实施系统性能监控的方法,探讨了Rust应用的性能瓶颈,并提供了调优策略与最佳实践,旨在帮助开发者更有效地提升Rust应用的性能。
下一篇
无影云桌面