背景
對于信息系統服務,一般我們的重點監控對象都是核心的后端服務,通常會采用一些主流的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()
}
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()
}
}
// 通用初始化
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 {
Listlist = 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 虛擬設備,同時方便開發與調試。
關于作者
牛曉青,碩士,畢業于寧波大學,電子與通信工程專業,研究方向為腦電信號處理及模式識別。
曾參與腦電信號模式識別研究,教學軟件、分布式互聯網項目以及大型物聯網平臺的設計開發等工作。
有4年團隊管理經驗,曾從0到1搭建技術團隊,從最初的1人到現在的25人。負責的項目已落地多個城市。
負責20+人團隊管理、日常工作任務分配、工作進度跟蹤、工作成果匯報、團隊內部分享。
精進管理,取得PMP項目管理專業人士資格認證。
負責公司業務平臺架構設計,方案編寫,資金申報,研發部團隊建設,項目驗收培訓、對外宣講等工作。持續輸出,獲得CSDN博客專家認證。