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

背景

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

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

体验流程

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

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

使用IDEA创建Android项目

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

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

安装AndroidSDK

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

创建一个空的Activity

创建一个虚拟设备

虚拟设备安装完成

集成友盟+APM的SDK

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

1. 创建应用

2. 添加SDK依赖

3. 初始化信息上报

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

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);

}

}

最终配置

启动后报错:无法联网

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

为APP配置联网权限

集成成功效果

模拟各类异常

为了体验友盟+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");

}

}

栈溢出异常:StackOverflowError

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

public void exceptionStackOverFlow(View view) {

try {

exceptionStackOverFlow(view);

} catch (Exception e) {

UMCrash.generateCustomLog(e, "5002");

}

}

内存溢出异常:. 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");

}

}

异常自动上报

除0异常上报:ArithmeticException

栈溢出异常上报:StackOverflowError

内存溢出异常上报:OutOfMemoryError

异常告警

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

统计分析

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

总结

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

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

作者:牛晓青

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

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

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

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

原文链接

本文为阿里云原创内容,未经允许不得转载。

使用友盟+的APM服务实现对移动端APP的性能监控的更多相关文章

  1. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等

    说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...

  2. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  3. 友盟分享SDK集成步骤

    1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...

  4. 多语言应用性能监控系统:Elastic APM

    ▶ 概述 Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统.通过 Elastic APM 可以监控应用程序,收集有关请求的响应时间.数据库查询.高速缓存调用.外部 H ...

  5. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

  6. 友盟+U-APM应用性能报告:Android崩溃率达0.32%,OPPO 、华为、VIVO 崩溃表现良好

    ​随着信息技术高速发展,移动互联几乎已成为了一种生活方式的代名词,在全民上网的数字热潮中,如何能最大程度保障产品服务的稳定性,提供良好的用户体验,是当前企业都需要思考和亟待解决的问题.App的应用性能 ...

  7. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)

    为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...

  8. 【Android】友盟的自动更新组件

    前言 又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心 ...

  9. 使用友盟进行apk的自动更新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  10. 友盟iOS推送配置(从真机调试到推送)

    下面我来讲解一下友盟iOS的推送配置,其实友盟只是一个示例,换做其余的第三方推送服务也会适用,只是第三方的后面服务变了而已. iOS推送(包括真机调试)所需要的步骤和文件如下: 备注:这里我将省略掉一 ...

随机推荐

  1. 微信小程序开发:异步处理接入的生成式图像卡通化

    书接上文,我们完成了对接阿里云人像动漫化接口,现已完成的界面是这样的: 就是效果看着一般,看看效果: 然后我就在阿里云api市场转悠,就想看看还有没有什么其他奇奇怪怪的api,结果就发现了这个: ap ...

  2. Serverless学习笔记

    Serverless 闲言碎语 前段时间看了一些Serverless的文章,恰好最近又听了一门Serverless的应用实践课程,就把笔记拿出来和大家分享一下,如表述有误还请各位斧正 大家关心的问题 ...

  3. Java博客大汇总

    目录介绍 01.Java基础[30篇] 02.面向对象[15篇] 03.数据结构[27篇] 04.IO流知识[11篇] 05.线程进程[9篇] 06.虚拟机[12篇] 07.类的加载[7篇] 08.反 ...

  4. 记录--Uni-app接入腾讯人脸核身

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 人脸核身功能有多种接入方式,其中包含微信H5.微信小程序.APP.独立H5.PC端.API接入6种方式. ​ 我们的产品是使用uni-ap ...

  5. Oracle存储过程打印输出错误信息、行号,快速排查

    测试存储过程如下: create or replace procedure prc_test is p_1 varchar2(2); begin p_1 := 'lxw测试'; exception w ...

  6. QT数据库学习笔记

    简介 QT通过模块化管理,对于某种模块需要添加对应的模块实现.QT SQL也是需要增加对应的模块来实现.QT数据库的层次关系为: 驱动层:数据库到SQL语言之间的桥梁 SQL API层: SQL语句的 ...

  7. 基于logisim-D触发器设计四人抢答电路

    实验1:设计一个简易4人知识竞赛抢答电路,要求是: 裁判掌握一个按钮,作用是给电路复位和发出抢答开始命令;4名竞赛者各掌握一个按钮,每人对应一个指示灯,在主持人发出开始抢答命令后,哪位参赛者先按钮其对 ...

  8. kingbaseES 优化之操作系统瓶颈排查

    针对操作系统性能瓶颈的判断和排查是数据库优化工作的一项重要技能,尤其是针对实例整体优化 操作系统的性能瓶颈排查无外乎四个方面 CPU.内存.磁盘.网络 针对这四个方面整理了一些相关心得和大家分享. 在 ...

  9. Java面试题【3】

    20)什么是线程安全? 含义:当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以 ...

  10. 【Java】多线程之实现Runnable接口

    1 /** 2 * 3 */ 4 package com.raliable.chapter_0; 5 /** 6 * @author : Administrator 7 * @date :2022年4 ...