天天看點

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

前置條件

賬号注冊

前往官方網站 

觀測雲 - 雲時代的系統可觀測平台

 新增賬號,使用已注冊的賬号/密碼登入。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

安裝 Datakit

擷取指令

點選 [內建] 子產品,右上角 [快速擷取 DataKit 安裝指令],根據您的作業系統和系統類型選擇合适的安裝指令。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

執行安裝

複制 Datakit 安裝指令在需要被監控的伺服器上直接運作。

  • 安裝目錄 /usr/local/datakit/
  • 日志目錄 /var/log/datakit/
  • 主配置檔案 /usr/local/datakit/conf.d/datakit.conf
  • 插件配置目錄 /usr/local/datakit/conf.d/

Datakit 安裝完成後,已經預設開啟 Linux 主機常用插件,可以在DF——基礎設施——内置視圖檢視。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

點選 [基礎設施] 子產品,檢視所有已安裝 Datakit 的主機清單以及基礎資訊,如主機名,CPU,記憶體等。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

點選 [主機名] 可以檢視該主機的詳細系統資訊,內建運作情況 (該主機所有已安裝的插件),内置視圖(主機)。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

點選 [內建運作情況] 任意插件名稱 [檢視監控視圖] 可以看到該插件的内置視圖。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

建立一個iOS應用

登入 觀測雲 控制台,進入「應用監測」頁面,點選右上角「建立應用」,在新視窗輸入「應用名稱」,點選「建立」,即可開始配置。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

應用采集資料屬性說明

資料類型

觀測雲的使用者通路監測包括六種資料類型。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

預設屬性

預設屬性為全局屬性,使用者通路監測的場景建構和事件告警都可以通過下面的預設屬性進行查詢。

SDK屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

應用屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

使用者 & 會話屬性
iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

裝置 & 分辨率屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

地理 & 網絡屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

View 屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

Action 屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

使用者屬性

除了預設屬性以外,還可以通過使用者屬性建構場景和配置事件告警。使用者屬性是非全局屬性,通過使用者屬性,可以跟蹤使用者通路應用的整個過程,定位和發現使用者受影響的通路情況,監控使用者通路性能。

其他資料類型屬性

Session

統計名額

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

屬性

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

View

名額

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建
iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

Resource

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建
iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

Error

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

type=network時,新增以下Network Error屬性。

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

Long Task

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

Action

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建
iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

應用內建

內建方式

方式一:CocoaPods 內建(推薦)

版本說明 

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建
  1. 配置

    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)

  1. GitHub 擷取 SDK 的源代碼。
  2. 将 FTMobileSDK 整個檔案夾導入項目。
iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

勾選

Copy items id needed

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

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 

可配置參數

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

配置 app_id 開啟 RUM

  1. 設定 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

需要的檔案:​

  1. 需要從 觀測雲 下載下傳 SDK 采集上傳的崩潰日志。下載下傳後将字尾改為 .crash。
  2. 需要 App 打包時産生的 dSYM 檔案,必須使用目前應用打包的電腦所生成的 dSYM 檔案,其他電腦生成的檔案可能會導緻分析不準确的問題,是以每次發包後建議根據應用的 版本号 或 dSYM 檔案的 UUID 來對應儲存 dSYM 檔案。以備解析時,根據背景日志 tag 中的 application_UUID 對應的 UUID 來找到對應 dSYM 檔案。
  3. 需要使用 symbolicatecrash,Xcode 自帶的崩潰分析工具,使用這個工具可以更精确的定位崩潰所在的位置,将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      
  1. 解析完成後會生成一個新的 .Crash 檔案,這個檔案中就是崩潰詳細資訊。

CocoaPods安裝

1:pod install 出錯,如下圖

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

解決方案:請使用

 pod update

指令

2:pod update 出錯,如下圖

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建

解決方案: github 連結問題,加個 vpn,或者使用

 pod update

指令 再次嘗試

iOS 可觀測實踐有哪些?好文拿走不謝前置條件應用采集資料屬性說明應用內建