使用友盟+的APM服务实现对移动端APP的性能监控_友盟性能监控能否传入页面自定义名称-程序员宅基地

技术标签: APP  华为鸿蒙  友盟+APM  运维  HarmonyOS  Android  移动应用性能优化  

背景

对于信息系统服务,一般我们的重点监控对象都是核心的后端服务,通常会采用一些主流的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 虚拟设备,同时方便开发与调试。

参考

https://at.umtrack.com/XHHrme


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013810234/article/details/120882631

智能推荐

winedt 自动换行_winedt状态栏-程序员宅基地

文章浏览阅读2.9k次。今天在写文章的时候,忽然发现winedt无法自动换行了,也不知道是按了什么组合键还是什么,同时行号变成了10 20 30... 这样的显示在网上看帖子,说只要点亮主界面 wrap 图标就可以了,找了半天也没找到,就想上网搜一搜图片,搜了好久才找到一张有这个图标的,发现是自己的view 选项没有勾选 status。至于行号那个,直接去设置里appearance有一个每十行显示_winedt状态栏

FTP上传大文件时连接重置或者中断,重新连接上传也出现同样情况处理办法_sftp大文件传输中断-程序员宅基地

文章浏览阅读5.5k次。上传大文件的时候经常连接被重置或者中断,重新连接上传出现同样错误,具体错误如下图所示:原因:机房防火墙设置了tcp空闲5分钟中断,如果使用被动模式上传较大的文件,上传速度比较慢时容易造成超时,所以连接会被中断重置。解决办法:将ftp软件设置为主动模式(port模式)进行连接上传即可。以下是几款常用FTP设置方式:1、LeapFTP2、FlashFXP3、FileZila4、CuteFTP..._sftp大文件传输中断

[PTA刷题]Maximum Subsequence Sum_像pta这样的刷题网站有哪些-程序员宅基地

文章浏览阅读761次。Given a sequence of KK integers { N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ }. A continuous subsequence is defined to be { N_iN​i​​, N_{i+1}N​i+1​​, ..., N_jN​j​​ } where 1 \le i \le j \le K1≤i≤j≤K._像pta这样的刷题网站有哪些

HDU1501 Zipper 拉链(dfs)_对两个字符串进行拉链操作-程序员宅基地

文章浏览阅读299次。ZipperTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9847 Accepted Submission(s): 3517Problem DescriptionGiven three strings_对两个字符串进行拉链操作

Maya Python 查询引用文件中的编码问题 -- 中文乱码_maya外部py中文打印出错-程序员宅基地

文章浏览阅读1.8k次。Maya Python 查询引用文件中的编码问题 – 中文乱码Datetime: 2020/01/27最近在做一个功能,查询 Maya 文件中引用的其他文件。Maya 官方文档提供的方法之一是用 Python 命令来查询引用的文件。后来又使用直接读取文件获取引用文件的方法。详情可以之前的两篇文章。本文主要来说说这之间遇到的一些编码问题,编码的问题一般就是中文乱码的问题。Maya Python 命令获取引用文件因为 Maya 安装目录下的 Python(mayapy.exe)版本为 Python 2._maya外部py中文打印出错

在ROS中 opencv 发布和接收图像消息-程序员宅基地

文章浏览阅读2.9k次,点赞5次,收藏36次。1、创建相关功能包首先进入到你的工作空间,比如我的工作空间是catkin_ws,然后进入src 目录下,使用catkin_create_pkg 命令创建你的功能包,以my_image_transport 功能包为例,注意功能包后面参数为该功能包的依赖项。$ cd catkin_ws/$ cd src/$ catkin_create_pkg my_image_transport imag..._在ros中 opencv 发布和接收图像消息

随便推点

微服务跨数据库联合查询_微服务架构下,解决数据库跨库查询的一些思路-程序员宅基地

文章浏览阅读2.2k次。加关注,不迷路! 前言在服务做微服务改造后,原先单库join查询已经不能满足要求,每个拆分的微服务对应一个数据库实例,而且部署在不同的服务器上,那么解决“跨库查询”就势在必行了。 以笔者实战经历来看,以下几个思路仅供参考: 表字段冗余想必大家已经很熟悉,几乎每天都会打交道,不用多讲。需要指出的是冗余字段不能太多,建议控制在2-4个左右。否则会出现数据更新不一致问题,一旦冗余字段有改..._微服务 跨库搜索

unity 第一篇 : unity vscode 代码提示_unity代码提示原理-程序员宅基地

文章浏览阅读3k次。1,按照如下官网地址操作:Unity - Manual: Integrated development environment (IDE) support2,在vscode 中设置:注:如果不起效果,请关闭vscode 再 重新打开_unity代码提示原理

翻译 Designing Stable Compensation Networks for Single Phase Voltage Mode Buck Regulators_appendix a error amplifier and compensation networ-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏11次。在网上看到 Designing Stable Compensation Networks for Single Phase Voltage Mode Buck Regulators,觉得不错,特定翻译出来,如有不妥之处,请指教Assumptions 假设This Technical Brief makes the following assumptions:1. The power supply designer has already designed the power stage of t_appendix a error amplifier and compensation networks design

Oracle分页查询性能优化及一些规则_oracle 分页查询慢-程序员宅基地

文章浏览阅读2.4k次。1.一个分页查询语句引发的思考2.优化分析过程3.Rowid和Rownum的区别4.多表关联查询对比5.SQL优化常用规则1.一个分页语句引发的思考执行计划显示耗时是2.491秒,这是Oracle预估时间,实际在PL/SQL中的执行时间是大于20s。2.优化分析过程全表查询单列进行排序与对全列进行排序的效率对比运用单列排序分页3.Rownum和Rowid的区别Rownum是逻辑地址。表示查询某条记录在整个结果集中的位置,同一条记录查询条件不同对应的.._oracle 分页查询慢

统计字符串出现的次数(C)_c语言两个字符串统计一个出现的次数-程序员宅基地

文章浏览阅读2.1k次。//头文件#include <stdio.h>#include <stdlib.h>#include <string.h>//主函数int main(){ //定义字符串1 char *src = "hello llo llo llo world"; //定义字符串2 char *dist = "llo"; //声明统计次数的变量 int count = 0; //strstr函数判断字符串2是否是字符._c语言两个字符串统计一个出现的次数

ubuntu16.04在标题栏显示内存、CPU、网速_ubuntu查看cpu 内存 网络 并显示在上方-程序员宅基地

文章浏览阅读1k次。使用的工具是System Monitor。 安装过程也简单:sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitorsudo apt updatesudo apt install indicator-sysmonitor然后在terminal中输入indicator-sysmonitor &启动。 在标题栏出现下图所示的信息。_ubuntu查看cpu 内存 网络 并显示在上方

推荐文章

热门文章

相关标签