search
应用监测 iOS监测 iOS应用接入

iOS应用接入

简介

DataFlux 应用监测能够通过收集各个iOS应用的指标数据,以可视化的方式分析各个iOS应用端的性能。

前置条件

iOS应用接入

登录 DataFlux 控制台,进入「应用监测」页面,点击右上角「新建应用」,在新窗口输入「应用名称」,点击「创建」,即可开始配置。

安装

Cocoapods platforms Cocoapods Cocoapods

源码方式

  1. GitHub 获取 SDK 的源代码。
  2. 将 SDK 源代码导入 App 项目,并选中 Copy items if needed
    直接将 FTMobileSDK 整个文件夹导入项目。
  3. 添加依赖库:项目设置 Build Phase -> Link Binary With Libraries 添加:UIKitFoundationlibz.tbd,如果监控项开启且抓取网络数据,则需要添加 libresolv.9.tbd

CocoaPods 方式

  1. 配置 Podfile 文件。
 target 'yourProjectName' do

 # Pods for your project
  pod 'FTMobileSDK'    

 end
  1. Podfile 目录下执行 pod install 安装 SDK。

初始化 SDK

添加头文件

请将 #import <FTMobileAgent/FTMobileAgent.h> 添加到 AppDelegate.m 引用头文件的位置。

添加初始化代码

示例:

 #import <FTMobileAgent/FTMobileAgent.h>
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
     // SDK FTMobileConfig 设置
    FTMobileConfig *config = [[FTMobileConfig alloc]initWithMetricsUrl:@"Your App metricsUrl"];
    config.monitorInfoType = FTMonitorInfoTypeAll;
     //启动 SDK
    [FTMobileAgent startWithConfigOptions:config];
    return YES;
}

FTMobileConfig 配置

FTMobileConfig 初始化方法

/** 
 * @method 指定初始化方法,设置 metricsUrl 配置  不需要进行请求签名
 * @param metricsUrl FT-GateWay metrics 写入地址
 * @return 配置对象
 */
- (instancetype)initWithMetricsUrl:(nonnull NSString *)metricsUrl;  

配置 app_id 开启 RUM

  1. 设置 appid

注意: 设置 appid 后,RUM 才能开启。

  1. RUM 设置采集率
/**
 * 采样配置,属性值:0或者100,100则表示百分百采集,不做数据样本压缩。默认:100
 */
 @property (nonatomic, assign) int samplerate;

注意: 开启 RUM 后,日志中将不采集 Crash 信息,Crash 信息会采集到 RUM中。

设置日志相关

  • source 日志来源
/**
 * 日志的来源 默认为:ft_mobile_sdk_ios
 */
 @property (nonatomic, copy) NSString *source;
  • serviceName 日志所属业务或服务的名称
/**
 * 设置日志所属业务或服务的名称
 */
 @property (nonatomic, copy) NSString *serviceName;
  • traceConsoleLog 采集控制台日志

    一般情况下, 因为 NSLog 的输出会消耗系统资源,而且输出的数据也可能会暴露出App里的保密数据, 所以在发布正式版时会把这些输出全部屏蔽掉。此时开启采集控制台日志,也并不能抓取到工程里打印的日志。建议使用 日志写入接口 来上传想查看的日志。

/**
 *设置是否需要采集控制台日志 默认为NO
 */
 @property (nonatomic, assign) BOOL traceConsoleLog;
  • eventFlowLog 采集页面事件日志

    设置后,可以在 web 版本日志中,查看到对应上报的日志,事件支持启动应用,进入页面,离开页面,事件点击等。

/**
 * 默认为NO
 * 需 AutoTrack 开启 ,设置对应采集类型时生效
 */
 @property (nonatomic, assign) BOOL eventFlowLog; 

设置网络链路追踪

  • networkTrace 设置网络追踪,开启网络请求信息采集
/**
 * 设置网络请求信息采集 默认为NO
 */
 @property (nonatomic, assign) BOOL networkTrace;
  • networkTraceType 设置网络请求信息采集时 使用链路追踪类型
/**
 *  设置网络请求信息采集时 使用链路追踪类型 type 默认为 Zipkin 
 *  FTNetworkTrackTypeZipkin 、FTNetworkTrackTypeJaeger 
 */
 @property (nonatomic, assign) FTNetworkTrackType networkTraceType;

/**
 *  开启网络请求信息采集 并设置链路追踪类型 type 默认为 Zipkin
 *  @param  type   链路追踪类型 默认为 Zipkin
 */
-(void)networkTraceWithTraceType:(FTNetworkTrackType)type;

开启崩溃 Crash 采集

enableTrackAppCrash 采集崩溃日志 (崩溃分析

/**
 *设置是否需要采集崩溃日志 默认为NO
 */
 @property (nonatomic, assign) BOOL enableTrackAppCrash;

注意: 开启 RUM 后,日志中将不采集 Crash 信息,Crash 信息会采集到 RUM 中。

SDK 内部 DebugLog 打印

debug 环境下,设置 FTMobileConfigenableSDKDebugLog 属性。

config.enableSDKDebugLog = YES; //打印日志

设置 X-Datakit-UUID

X-Datakit-UUID 是 SDK 初始化生成的 UUID, 应用清理缓存后(包括应用删除),会重新生成。 FTMobileConfig 配置中,开发者可以强制更改。更改方法:

[config setXDataKitUUID:@"YOUR UUID"];

设置 env 环境

typedef NS_ENUM(NSInteger, FTEnv) {
    FTEnvProd         = 0, //线上环境
    FTEnvGray,             //灰度环境
    FTEnvPre,              //预发布环境
    FTEnvCommon,           //日常环境
    FTEnvLocal,            //本地环境
};

@property (nonatomic, assign) FTEnv env;

采集数据配置

配置 FTMobileConfigFTMonitorInfoType 属性。可采集的类型如下:

/**
 *
 * @constant
 *  FTMonitorInfoTypeBattery  - 电池电量
 *  FTMonitorInfoTypeMemory   - 内存总量、内存使用率
 *  FTMonitorInfoTypeCpu      - CPU使用率
 *  FTMonitorInfoTypeBluetooth- 蓝牙是否开启
 *  FTMonitorInfoTypeFPS      - 每秒传输帧数
 */
typedef NS_OPTIONS(NSUInteger, FTMonitorInfoType) {
    FTMonitorInfoTypeAll          = 0xFFFFFFFF,
    FTMonitorInfoTypeBattery      = 1 << 1,
    FTMonitorInfoTypeMemory       = 1 << 2,
    FTMonitorInfoTypeCpu          = 1 << 3,
    FTMonitorInfoTypeBluetooth    = 1 << 4,
    FTMonitorInfoTypeFPS          = 1 << 5,
};

设置 UI 卡顿、ANR 事件采集

  • enableTrackAppUIBlock 采集UI卡顿事件
/**
 * 默认为NO
 * 设置是否需要采集UI卡顿
 */
 @property (nonatomic, assign) BOOL enableTrackAppUIBlock;
  • enableTrackAppANR 采集ANR卡顿无响应事件
/**
 * 默认为NO
 * 设置是否需要采集卡顿无响应事件
 */
 @property (nonatomic, assign) BOOL enableTrackAppANR;

采集的数据会上传到 RUM 与日志中。

参数

FTMobileConfig 可配置参数

字段 类型 说明 是否必须
metricsUrl NSString FT-GateWay metrics 写入地址
appid NSString dataflux rum应用唯一ID标识,在DataFlux控制台上面创建监控时自动生成。 否(开启RUM 必选)
samplerate int RUM采样采集率 否(默认100)
enableSDKDebugLog BOOL 设置是否允许打印日志 否(默认NO)
monitorInfoType NS_OPTIONS 采集数据
env NS_ENUM 环境 否 (默认FTEnvProd)
enableTrackAppCrash BOOL 设置是否需要采集崩溃日志 否(默认NO)
enableTrackAppANR BOOL 采集ANR卡顿无响应事件 否(默认NO)
enableTrackAppUIBlock BOOL 采集UI卡顿事件 否(默认NO)
serviceName NSString 设置日志所属业务或服务的名称 否(默认dataflux sdk)
traceConsoleLog BOOL 设置是否需要采集控制台日志 否(默认NO)
eventFlowLog BOOL 设置是否采集页面事件日志 否(默认NO)
networkTrace BOOL 设置网络请求信息采集 否(默认NO)
networkTraceType NS_ENUM 设置网络请求信息采集时 使用链路追踪类型 否(默认Zipkin)

主动上报日志方法

上传机制 : 将数据存储到数据库中,等待时机进行上传。数据库存储量限制在 5000 条,如果网络异常等原因导致数据堆积,存储 5000 条后,会丢弃新传入的数据。

  • 上传日志方法
typedef NS_ENUM(NSInteger, FTStatus) {
    FTStatusInfo         = 0,
    FTStatusWarning,
    FTStatusError,
    FTStatusCritical,
    FTStatusOk,
};
/**
 * 日志上报
 * @param content  日志内容,可为json字符串
 * @param status   事件等级和状态,info:提示,warning:警告,error:错误,critical:严重,ok:恢复,默认:info

 */
-(void)logging:(NSString *)content status:(FTStatus)status;
  • 方法使用示例
[[FTMobileAgent sharedInstance] logging:@"TestLoggingBackground" status:FTStatusInfo];

用户的绑定与注销

用户绑定

/**
 * 绑定用户信息
 * @param Id       用户Id
 */
- (void)bindUserWithUserID:(NSString *)Id;

用户注销

/**
 * 注销当前用户
 */
- (void)logout;

方法使用示例

//登录后 绑定用户信息
[[FTMobileAgent sharedInstance] bindUserWithUserID:userId];
//登出后 注销当前用户
[[FTMobileAgent sharedInstance] logout];

常见问题

关于崩溃日志分析

在开发时的 DebugRelease 模式下, Crash 时捕获的线程回溯是被符号化的。 而发布包没带符号表,异常线程的关键回溯,会显示镜像的名字,不会转化为有效的代码符号,获取到的 crash log 中的相关信息都是 16 进制的内存地址,并不能定位崩溃的代码,所以需要将 16 进制的内存地址解析为对应的类及方法。

利用命令行工具解析 Crash

需要的文件:

  1. 需要从 DataFlux 下载 SDK 采集上传的崩溃日志。下载后将后缀改为 .crash
  2. 需要 App 打包时产生的 dSYM 文件,必须使用当前应用打包的电脑所生成的 dSYM 文件,其他电脑生成的文件可能会导致分析不准确的问题,因此每次发包后建议根据应用的 版本号dSYM 文件的 UUID 来对应保存 dSYM 文件。以备解析时,根据后台日志 tag 中的 application_UUID 对应的 UUID 来找到对应 dSYM 文件。
  3. 需要使用 symbolicatecrashXcode 自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。

查找 symbolicatecrash 方法
终端输入 find /Applications/Xcode.app -name symbolicatecrash -type f

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

进行解析:

  1. symbolicatecrash.crash.app.dSYM 放在同一文件夹中

  2. 开启命令行工具,进入文件夹

  3. 使用命令解析 Crash 文件,*号指的是具体的文件名

    ./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
    
  4. 解析完成后会生成一个新的 .Crash 文件,这个文件中就是崩溃详细信息。