接入 iOS

移动性能监控(APM)依赖移动分析客户端 SDK 来进行埋点,收集 App 性能相关数据生成日志并上报到服务端。根据 mPaaS 客户端与服务端协定的埋点数据格式,服务端从客户端上传的埋点日志中提取有效数据,从而实现对客户端各项指标的监控分析。

本文介绍如何在客户端配置性能监控埋点,包括网络监控、H5 性能监控、页面加载监控、启动速度监控、小程序监控。

前提条件

  • 确保 mPaaS 基线版本 ≥ 10.1.68.44。如当前使用的基线版本低于 10.1.68.44,可参考 mPaaS 10.1.68 升级指南进行基线版本升级。

  • 确保已接入移动分析组件。具体操作请参见 接入移动分析服务

  • 确保已接入移动网关组件。具体操作请参见 移动网关服务

  • 如需使用 H5 性能监控功能,需接入 H5 容器。具体操作参见 接入 H5 容器

  • 如需使用小程序性能监控功能,需接入小程序。具体操作参见 接入小程序

网络监控

开启网络监控开关

APM 网络性能监控埋点需要通过项目代码手动开启。在 App 启动过程中,调用如下代码以开启网络性能监控。

#import <MPMasAdapter/MPAnalysisHelper.h>

[MPAnalysisHelper startAPMNetMonitor];

mPaaS RPC 网络监控埋点

开启 APM 网络监控后,mPaaS RPC 的网络监控由 mPaaS 内置的网络框架自动进行,无需您在代码中手动进行埋点。

业务自定义网络监控埋点

如果您使用了非 mPaaS RPC 网络通讯,并想要对这部分的网络质量进行监控,则需要在 App 启动过程中开启 APM 网络监控,同时还需要对自己的网络调用进行手动埋点。

调用以下代码进行埋点:

#import <MPMasAdapter/MPRemoteLoggingInterface.h>

NSDictionary *param = @{
                @"totalRequestTimeInterval": @(totalRequestTime),
                @"dnsTimeInterval": @(dnsTime),
                @"tcpTimeInterval": @(tcpTime),
                @"sslTimeInterval": @(sslTime),
                @"firstPackageTimeInterval": @(firstPackageTime),
                @"transportTimeInterval": @(transportTime),
                @"downloadAverageSpeed": @(downloadAverageSpeed),
                @"httpStatusCode": @(httpStatusCode),
                @"rpcStatusCode": rpcStatusCode,
                @"operationType": operationType,
                @"clientIP": clientIP,
                @"gwIP": gwIP,
                @"traceId": traceId
            };
[MPRemoteLoggingInterface writeAPMNetLog:param];

传入的参数包括:

参数

说明

totalRequestTimeInterval

总请求用时,单位为 ms。

dnsTimeInterval

DNS 解析耗时,单位为 ms。

tcpTimeInterval

TCP 建连耗时,单位为 ms。

SSLTimeInterval

SSL 建连耗时,单位为 ms。

firstPackageTimeInterval

首包用时,从发起请求到收到服务器第一个数据包所用的时间,单位为 ms。

transportTimeInterval

传输用时,从收到第一个数据包到最后一个数据包所用的时间,单位为 ms。

downloadAverageSpeed

下载资源文件的平均速度。

httpStatusCode

HTTP 调用状态码,200 表示正常。

rpcStatusCode

RPC 调用状态码,200 表示正常。

operationType

接口标识符,用于标识网关操作。

clientIP

客户端 IP。

gwIP

网关 IP。

traceId

客户端请求的链路 ID。

H5 性能监控

H5 性能监控的埋点由 mPaaS H5 容器自动完成,您接入 H5 容器即可,无需手动进行埋点。

页面加载监控

原生页面的加载时长埋点由 mPaaS 原生页面自动化埋点 SDK 完成,您接入移动分析组件后,无需手动进行埋点。

启动速度监控

基于 mPaaS 框架

如果您的项目接入了 mPaaS 框架,那么启动速度由 mPaaS 框架进行记录,您只需在 App 启动完成(比如在首页出现时)后记录启动时间,并发出启动完成的通知即可。

// globalMonitorStartUpTime 是已定义的变量,导入 <mPaas/MPaaS+MonitorStartUpTime.h> 头文件后即可使用
double time = CFAbsoluteTimeGetCurrent() - globalMonitorStartUpTime;
[ [NSNotificationCenter defaultCenter] postNotificationName:@"APMonitor_Startup_Cost_Time" object:nil userInfo:@{@"CostTimeOnUserFeel": [NSString stringWithFormat:@"%f", time]}];

基于原生框架

如果您的项目未接入 mPaaS 框架,那么您需要在 App 启动完成时手动调用上报启动埋点。

#import <MPMasAdapter/MPAnalysisHelper.h>

//record the time interval used for the app startup
NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
[[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];

闪退监控

添加闪退埋点,以统计闪退相关数据。

基于 mPaaS 框架

在接入了框架(工程中有 APMobileFramework 库)的情况下,闪退上报模块会自动捕获闪退日志并上传到服务端,您只需在集成 SDK 后确认闪退监控的开关为打开即可。为保证闪退日志能及时上报,推荐您在 main 函数中调用此接口。

基于原生框架

在未接入 mPaaS 框架(工程中无 APMobileFramework 库)的情况下,需要您在启动时打开闪退监控开关,并且在启动后上报闪退日志。

容灾开关

默认情况下,当连续发生四次闪退时会触发容灾处理,将会清理 Documents 目录下的文件,以避免因脏数据导致的闪退问题。在 10.1.60 及以上版本,您可以手动调用以下接口开启或关闭容灾处理。

#import <MPMasAdapter/MPAnalysisHelper.h>
/**
 * 开启/关闭闪退容灾处理,默认开启
 */
+ (void)enableDisasterRecovery:(BOOL)enable;
重要
  • 只有真机运行程序的闪退日志才会被捕获并上传到日志服务器。如您需要调试闪退监控,请断开 Xcode,且请勿使用模拟器。

  • 为保证闪退日志中的 version 与 product version 一致,务必在项目的 info.plist 中将 bundle version 与 product version 设置为相同的版本号。

卡顿/卡死监控

添加性能埋点,以统计卡顿、卡死相关数据。

基于 mPaaS 框架

  1. 卡顿/卡死监控默认对 10% 的设备开启,可通过下面这个接口设置卡顿开启率。

     [MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
    说明

    卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。

  2. 在启动时调用 [MPAnalysisHelper startPerformanceMonitor],推荐在 -(void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用。

基于原生框架

SDK 封装了性能监控接口,推荐您在 AppDelegate 的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用 [PerformanceHelper performanceMonitor]

说明

卡顿/卡死监控只有在真机上并且非 Xcode 调试状态下是打开的。

    #import "PerformanceHelper.h"
    #import <MPAnalysis/MPAnalysisHelper.h>

    static NSTimeInterval __start_timestamp = 0;

    @implementation PerformanceHelper

    + (void)load
    {
        __start_timestamp = CFAbsoluteTimeGetCurrent();
    }

    + (void)performanceMonitor
    {
        //start performance monitor

       [MPAnalysisHelper setLagMonitorPercent: 100]; // 100% 监控,需要在 startPerformanceMonitor 调用之前设置
        [MPAnalysisHelper startPerformanceMonitor];

        //record the time interval used for the app startup
        NSTimeInterval time = CFAbsoluteTimeGetCurrent() - __start_timestamp;
        [[MPAnalysisHelper sharedInstance] writeLogForStartupWithTime:time];
    }

    @end

开启小程序监控

接入小程序后,小程序会自动上报性能监控数据,无需您手动埋点。