前置条件
账号注册
前往官方网站 观测云 - 云时代的系统可观测平台 注册账号,使用已注册的账号/密码登录。
安装 Datakit
获取命令
点击 [集成] 模块,右上角 [快速获取 DataKit 安装命令],根据您的操作系统和系统类型选择合适的安装命令。
执行安装
复制 Datakit 安装命令在需要被监控的服务器上直接运行。
- 安装目录 /usr/local/datakit/
- 日志目录 /var/log/datakit/
- 主配置文件 /usr/local/datakit/conf.d/datakit.conf
- 插件配置目录 /usr/local/datakit/conf.d/
Datakit 安装完成后,已经默认开启 Linux 主机常用插件,可以在DF——基础设施——内置视图查看。
点击 [基础设施] 模块,查看所有已安装 Datakit 的主机列表以及基础信息,如主机名,CPU,内存等。
点击 [主机名] 可以查看该主机的详细系统信息,集成运行情况 (该主机所有已安装的插件),内置视图(主机)。
点击 [集成运行情况] 任意插件名称 [查看监控视图] 可以看到该插件的内置视图。
创建一个iOS应用
登录 观测云 控制台,进入「应用监测」页面,点击右上角「新建应用」,在新窗口输入「应用名称」,点击「创建」,即可开始配置。
应用采集数据属性说明
数据类型
观测云的用户访问监测包括六种数据类型。
默认属性
默认属性为全局属性,用户访问监测的场景构建和事件告警都可以通过下面的默认属性进行查询。
SDK属性
应用属性
用户 & 会话属性
设备 & 分辨率属性
地理 & 网络属性
View 属性
Action 属性
用户属性
除了默认属性以外,还可以通过用户属性构建场景和配置事件告警。用户属性是非全局属性,通过用户属性,可以跟踪用户访问应用的整个过程,定位和发现用户受影响的访问情况,监控用户访问性能。
其他数据类型属性
Session
统计指标
属性
View
指标
统计指标
Resource
指标
属性
Error
属性
type=network时,新增以下Network Error属性。
Long Task
指标
Action
指标
统计指标
应用集成
集成方式
方式一:CocoaPods 集成(推荐)
版本说明
- 配置
Podfile
文件。
1. target 'yourProjectName' do 2. 3. # Pods for your project 4. pod 'FTMobileSDK', '~> 1.1.0-alpha.10' 5. 6. end
在 Podfile
目录下执行 pod install
安装 SDK
方式二:手动集成(直接下载 SDK)
- 从 GitHub 获取 SDK 的源代码。
- 将 FTMobileSDK 整个文件夹导入项目。
勾选 Copy items id needed
3. 添加依赖库:项目设置 Build Phase
-> Link Binary With Libraries
添加:UIKit
、 Foundation
、libz.tb
。
初始化并调用SDK
添加头文件
请将 #import "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; }
metricsUrl 数据上报地址:
出于安全考虑,DataKit 的 HTTP 服务默认绑定在 localhost:9529 上,如果希望从外部访问,需编辑 /usr/local/datakit/conf.d/datakit.conf 中的 http_listen 字段,将其改成 0.0.0.0:9529或其它网卡、端口。
举例:比如我公网ip是1.1.1.1 我先到配置中改0.0.0.0,app中metricsUrl地址为 http://1.1.1.1:9529
FTMobileConfig
可配置参数
配置 app_id 开启 RUM
- 设置 appid
- appid : dataflux rum 应用唯一 ID 标识。
- appid 获取:获取 appid 方法。
注意: 设置 appid
后,RUM 才能开启。
2. RUM 设置采集率
1. /** 2. * 采样配置,属性值:0或者100,100则表示百分百采集,不做数据样本压缩。默认:100 3. */ 4. @property (nonatomic, assign) int samplerate;
注意: 开启 RUM
后,日志中将不采集 Crash 信息,Crash 信息会采集到 RUM
中。
3. RUM 设置是否追踪用户操作
/** * 设置是否追踪用户操作,目前支持应用启动和点击操作 */ @property (nonatomic, assign) BOOL enableTraceUserAction;
设置日志相关
- source 日志来源
/** * 日志的来源 默认为:ft_mobile_sdk_ios */ @property (nonatomic, copy) NSString *source;
- serviceName 日志所属业务或服务的名称
1. /** 2. * 设置日志所属业务或服务的名称 3. */ 4. @property (nonatomic, copy) NSString *serviceName;
- traceConsoleLog 采集控制台日志
一般情况下, 因为 NSLog 的输出会消耗系统资源,而且输出的数据也可能会暴露出App里的保密数据, 所以在发布正式版时会把这些输出全部屏蔽掉。此时开启采集控制台日志,也并不能抓取到工程里打印的日志。建议使用 日志写入接口 来上传想查看的日志。
/** *设置是否需要采集控制台日志 默认为NO */ @property (nonatomic, assign) BOOL traceConsoleLog
设置网络链路追踪
- 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 环境下,设置 FTMobileConfig
的 enableSDKDebugLog
属性。
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;
采集数据配置
配置 FTMobileConfig
的 FTMonitorInfoType
属性。可采集的类型如下
/** * * @constant * FTMonitorInfoTypeBattery - 电池电量 * FTMonitorInfoTypeMemory - 内存总量、内存使用率 * FTMonitorInfoTypeCpu - CPU使用率 */ typedef NS_OPTIONS(NSUInteger, FTMonitorInfoType) { FTMonitorInfoTypeAll = 0xFFFFFFFF, FTMonitorInfoTypeBattery = 1 << 1, FTMonitorInfoTypeMemory = 1 << 2, FTMonitorInfoTypeCpu = 1 << 3, };
设置 UI 卡顿、ANR 事件采集
- enableTrackAppUIBlock 采集UI卡顿事件
/** * 默认为NO * 设置是否需要采集卡顿 */ @property (nonatomic, assign) BOOL enableTrackAppFreeze;
- enableTrackAppANR 采集ANR卡顿无响应事件
/** * 默认为NO * 设置是否需要采集卡顿无响应事件 */ @property (nonatomic, assign) BOOL enableTrackAppANR;
采集的数据会上传到 RUM 与日志中。
主动上报日志方法
上传机制 : 将数据存储到数据库中,等待时机进行上传。数据库存储量限制在 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;
方法使用示例
1. //登录后 绑定用户信息 2. [[FTMobileAgent sharedInstance] bindUserWithUserID:userId];
1. //登出后 注销当前用户 2. [[FTMobileAgent sharedInstance] logout];
常见问题
关于崩溃日志分析
在开发时的 Debug 和 Release 模式下, Crash 时捕获的线程回溯是被符号化的。
而发布包没带符号表,异常线程的关键回溯,会显示镜像的名字,不会转化为有效的代码符号,获取到的 crash log 中的相关信息都是 16 进制的内存地址,并不能定位崩溃的代码,所以需要将 16 进制的内存地址解析为对应的类及方法。
利用命令行工具解析 Crash
需要的文件:
- 需要从 观测云 下载 SDK 采集上传的崩溃日志。下载后将后缀改为 .crash。
- 需要 App 打包时产生的 dSYM 文件,必须使用当前应用打包的电脑所生成的 dSYM 文件,其他电脑生成的文件可能会导致分析不准确的问题,因此每次发包后建议根据应用的 版本号 或 dSYM 文件的 UUID 来对应保存 dSYM 文件。以备解析时,根据后台日志 tag 中的 application_UUID 对应的 UUID 来找到对应 dSYM 文件。
- 需要使用 symbolicatecrash,Xcode 自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。
查找 symbolicatecrash 方法
终端输入
find /Applications/Xcode.app -name symbolicatecrash -type f
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
进行解析:
- 将 symbolicatecrash 与 .crash 和 .app.dSYM 放在同一文件夹中
- 开启命令行工具,进入文件夹
- 使用命令解析 Crash 文件,*号指的是具体的文件名
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
- 解析完成后会生成一个新的 .Crash 文件,这个文件中就是崩溃详细信息。
CocoaPods安装
1:pod install 出错,如下图
解决方案:请使用 pod update
命令
2:pod update 出错,如下图
解决方案: github 链接问题,加个 vpn,或者使用 pod update
命令 再次尝试