使用友盟+的APM服务实现对移动端APP的性能监控

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 对于信息系统服务,一般我们的重点监控对象都是核心的后端服务,通常会采用一些主流的APM(Application Performance Management)框架进行监控、告警、分析。那么对于移动端的APP、小程序的运行时状态如何进行实时监控与分析呢?经过这次CSDN官方的推荐,友盟+提供的APM服务可以实现我们的这一目标,下面我们就尝试集成体验下友盟+提供的这款APM服务。

背景

对于信息系统服务,一般我们的重点监控对象都是核心的后端服务,通常会采用一些主流的APM(Application Performance Management)框架进行监控、告警、分析。那么对于移动端的APP、小程序的运行时状态如何进行实时监控与分析呢?经过这次CSDN官方的推荐,友盟+提供的APM服务可以实现我们的这一目标,下面我们就尝试集成体验下友盟+提供的这款APM服务。

由于我们的 APP是基于华为的鸿蒙操作系统进行开发,而注册友盟后,发现当前对于移动端APP,友盟官方提供了 AndroidiOS移动端操作系统的集成与接入,尚未提供对华为鸿蒙操作系统的支持(不过后来看到在上报的异常处可按照 只看鸿蒙设备 进行筛选:指发生错误/异常的设备为HarmonyOS,但尚未支持HarmonyOS系统级别错误)。

1.jpg

体验流程

本着体验下友盟+提供的APM服务的目的,这里使用一个基于 AndroidHello World示例:

  • 首先按照官方文档完成移动端 APP与友盟 SDK的集成;
  • 然后在示例中抛出一些异常( OOM等);
  • 最后在友盟的移动端应用监控首页可以看到我们应用上报的异常信息。

使用IDEA创建Android项目

当然,集成之前需要先搭建一个极简的 AndroidHello World应用。

由于我之前并没有Android的移动端开发经验,当然也没有对应的开发环境,那么这里直接使用IDEA创建一个Android应用。

安装AndroidSDK

IDEA中创建一个Android项目,先安装AndroidSDK,我这里使用默认位置直接安装。


2.jpg

创建一个空的Activity

3.jpg

创建一个虚拟设备

4.jpg

虚拟设备安装完成

5.jpg

集成友盟+APMSDK

友盟+的APMSDK集成过程也是相当丝滑,参考官方文档推荐的 maven 线上接入 SDK,只需三步:1.创建应用;2.添加SDK依赖;3.初始化信息上报。

1. 创建应用

6.jpg

2. 添加SDK依赖

7.jpg

3. 初始化信息上报

8.jpg

涉及到的配置与代码如下:

dependencies {

   implementation fileTree(dir: 'libs', include: ['*.jar'])

   implementation 'androidx.appcompat:appcompat:1.0.2'

   implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

   testImplementation 'junit:junit:4.12'

   androidTestImplementation 'androidx.test:runner:1.1.1'

   androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

 

   // 友盟基础组件库(所有友盟业务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产品包依赖(必选)

}

 

// umeng

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/' }

   }

}

// 通用初始化

public class MainActivity extends AppCompatActivity {

 

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       // umeng

      UMConfigure.setLogEnabled(true);

       UMConfigure.init(this, "613b2a85314602341a0df802", "csdn", UMConfigure.DEVICE_TYPE_PHONE, "");

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

   }

}    


最终配置

9.jpg

启动后报错:无法联网

由于项目启动后,友盟+SDK会进行信息上报,这时需要联网,而默认创建项目后没有联网权限,因此会出现一个报错信息。

10.jpg

APP配置联网权限

11.jpg

集成成功效果

12.jpg

模拟各类异常

为了体验友盟+APM服务基本的监控功能,我们这里模拟一些异常,然后看这些异常信息是否可以上报至APM平台。

  • 普通的运行时异常:ArithmeticException/NullPointerException
  • 栈溢出异常:StackOverflowError
  • 内存溢出异常:. OutOfMemoryError

0异常:ArithmeticException

// 发送异常按钮的点击事件:模拟除零异常

       public void exception(View view) {

       try {

           int value = 8 / 0;

       } catch (Exception e) {

          UMCrash.generateCustomLog(e, "5001");

       }

   }


13.jpg

栈溢出异常:StackOverflowError

// 发送SoF异常按钮的点击事件:模拟栈溢出异常

       public void exceptionStackOverFlow(View view) {

       try {

          exceptionStackOverFlow(view);

       } catch (Exception e) {

          UMCrash.generateCustomLog(e, "5002");

       }

   }


14.jpg

内存溢出异常:. OutOfMemoryError

 // 发送OOM异常按钮的点击事件:模拟内存溢出异常,当然OOM还有其他类型,这里以堆溢出为例进行演示

       public void exceptionOutOfMemory(View view) {

       try {

           List<byte[]> list = new ArrayList<>();

           while (true) {

               list.add(new byte[1024 * 1024]);

           }

       } catch (Exception e) {

           UMCrash.generateCustomLog(e, "5003");

       }

   }

15.jpg

异常自动上报

0异常上报:ArithmeticException

16.jpg

栈溢出异常上报:StackOverflowError

17.jpg

内存溢出异常上报:OutOfMemoryError

18.jpg

19.jpg

异常告警

支持邮箱、钉钉、企业微信、飞书以及Webhook方式推送。

20.jpg

统计分析

可对不同类型的异常进行多维度的统计与分析,大家可以继续探索挖掘。

21.jpg

总结

通过以上流程,我们测试了移动端APP异常数据上报与统计功能,这个其实有点类似我们物联网设备数据采集、传输与分析的流程,而且整个集成的流程也比较顺畅,简单几步就给我们的APP做了做了一个服务远程监控端。

后面我们APP上线后,友盟+这款APM服务将是我们线上移动端应用监控的一把利器。另外,期待友盟+官方可以提供鸿蒙操作系统的接入,以便直接支持Huawei DevEco Studio中的基于HarmonyOS虚拟设备,同时方便开发与调试。



作者:牛晓青

1. 曾参与脑电信号模式识别研究,教学软件、分布式互联网项目以及大型物联网平台的设计开发等工作。

2. 4年团队管理经验,曾从01搭建技术团队,从最初的1人到现在的25人。负责的项目已落地多个城市。

3. 负责20+人团队管理、日常工作任务分配、工作进度跟踪、工作成果汇报、团队内部分享。精进管理,取得PMP项目管理专业人士资格认证。

4. 负责公司业务平台架构设计,方案编写,资金申报,研发部团队建设,项目验收培训、对外宣讲等工作。持续输出,获得CSDN博客专家认证。

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
3月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
15天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
55 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
13天前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
32 1
|
3月前
|
运维 Kubernetes 容器
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
|
3月前
|
开发者
【Azure 应用服务】如果发现当前使用的订阅无法在China North 3 区中创建App Service服务,如何来解决这个问题呢?
【Azure 应用服务】如果发现当前使用的订阅无法在China North 3 区中创建App Service服务,如何来解决这个问题呢?
|
3月前
|
Java Linux Windows
【Azure 应用服务】App Service / Function App 修改系统时区为中国时区的办法(Azure中所有服务的默认时间都为UTC时间,转换为北京时间需要+8小时)
【Azure 应用服务】App Service / Function App 修改系统时区为中国时区的办法(Azure中所有服务的默认时间都为UTC时间,转换为北京时间需要+8小时)
|
3月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
3月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
3月前
|
API
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
|
3月前
【Azure 应用服务】可以在app service里建SFTP服务吗?
【Azure 应用服务】可以在app service里建SFTP服务吗?

热门文章

最新文章