iOS 可观测实践有哪些?好文拿走不谢

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
性能测试 PTS,5000VUM额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: ios可观测实践

前置条件

账号注册

前往官方网站 观测云 - 云时代的系统可观测平台 注册账号,使用已注册的账号/密码登录。

image.png

安装 Datakit

获取命令

点击 [集成] 模块,右上角 [快速获取 DataKit 安装命令],根据您的操作系统和系统类型选择合适的安装命令。

image.png

执行安装

复制 Datakit 安装命令在需要被监控的服务器上直接运行。

  • 安装目录 /usr/local/datakit/
  • 日志目录 /var/log/datakit/
  • 主配置文件 /usr/local/datakit/conf.d/datakit.conf
  • 插件配置目录 /usr/local/datakit/conf.d/


Datakit 安装完成后,已经默认开启 Linux 主机常用插件,可以在DF——基础设施——内置视图查看。

image.png

点击 [基础设施] 模块,查看所有已安装 Datakit 的主机列表以及基础信息,如主机名,CPU,内存等。

image.png

点击 [主机名] 可以查看该主机的详细系统信息,集成运行情况 (该主机所有已安装的插件),内置视图(主机)。

image.png

点击 [集成运行情况] 任意插件名称 [查看监控视图] 可以看到该插件的内置视图。

image.png

创建一个iOS应用

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

image.png

应用采集数据属性说明

数据类型

观测云的用户访问监测包括六种数据类型。

image.png

默认属性

默认属性为全局属性,用户访问监测的场景构建和事件告警都可以通过下面的默认属性进行查询。

SDK属性

image.png

应用属性

image.png

用户 & 会话属性image.png

设备 & 分辨率属性

image.png

地理 & 网络属性

image.png

View 属性

image.png

Action 属性

image.png

用户属性

除了默认属性以外,还可以通过用户属性构建场景和配置事件告警。用户属性是非全局属性,通过用户属性,可以跟踪用户访问应用的整个过程,定位和发现用户受影响的访问情况,监控用户访问性能。

其他数据类型属性

Session

统计指标

image.png

属性

image.png

View

指标

image.png

统计指标

image.png

Resource

指标

image.png属性

image.png

Error

属性

image.png

type=network时,新增以下Network Error属性。

image.png

Long Task

指标

image.png

Action

指标

image.png

统计指标

image.png

应用集成

集成方式

方式一:CocoaPods 集成(推荐)

版本说明 image.png

  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 整个文件夹导入项目。

image.png

勾选 Copy items id needed

image.png

3.  添加依赖库:项目设置 Build Phase -> Link Binary With Libraries 添加:UIKitFoundationlibz.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

可配置参数

image.png

配置 app_id 开启 RUM

  1. 设置 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 环境下,设置 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使用率
 */
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 出错,如下图

image.png

解决方案:请使用 pod update 命令

2:pod update 出错,如下图

image.png

解决方案: github 链接问题,加个 vpn,或者使用 pod update 命令 再次尝试

image.png

目录
相关文章
|
6月前
|
缓存 编解码 测试技术
基于iOS平台的高效图片处理技术实践
【4月更文挑战第7天】 在移动应用开发领域,图片处理是一个常见且要求高性能的功能模块。特别是在iOS平台上,由于其封闭的生态系统和用户对流畅体验的高期待,开发者需采用高效的图片处理技术以满足应用的性能需求。本文将探讨一种针对iOS平台优化的图片处理流程,涉及图像加载、缓存策略、异步处理以及图形渲染等关键技术点,旨在为iOS应用提供一个低内存消耗、高效率的图片处理解决方案。
|
2月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
137 3
|
3月前
|
开发工具 数据安全/隐私保护 iOS开发
探索iOS应用开发的核心理念与实践
【8月更文挑战第23天】在数字时代的浪潮中,iOS应用开发不仅仅是技术的堆砌,更是一场关于创新、用户体验和持续改进的旅程。本文将深入探讨iOS应用开发的核心理念,从设计哲学到开发工具的选择,再到市场趋势的适应,旨在为开发者提供一条清晰的路径,帮助他们在不断变化的技术世界中保持竞争力和创新力。
|
4月前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
5月前
|
iOS开发
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
52 1
|
5月前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
6月前
|
iOS开发 开发者 UED
iOS 中的并发编程:GCD 与 Operation 的对比与实践
【4月更文挑战第23天】 在iOS开发中,为了提高应用的性能和响应能力,理解并合理运用并发编程是至关重要的。本文将深入探讨两种主要的并发模式:Grand Central Dispatch (GCD) 和 NSOperation。我们将比较它们的优势和局限性,并通过代码示例演示如何在实际场景中应用这两种技术来优化应用性能。文章旨在为开发者提供一个清晰的指南,以便在选择适合自己项目的并发工具时做出明智的决策。
|
6月前
|
安全 开发工具 Swift
ios-class-guard - iOS代码混淆与加固实践
ios-class-guard - iOS代码混淆与加固实践
104 0
|
11月前
|
安全 开发工具 Swift
 ios-class-guard - iOS代码混淆与加固实践
然后在作者的回答中也有提到,PreEmptive Protection for iOS - Rename (or PPiOS-Rename),使用相同的原理,但是它将使用 iPhoneSimulator 支持 iPhoneOS SDK,但是经测试,该工具只能用于纯 OC 项目,并不支持 OC 与 Swift 混编的项目
|
6月前
|
Java 开发工具 Android开发
SLS:使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践
本文介绍了使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践。
443 7
SLS:使用 OTel 官方 SDK 采集 Android、iOS Trace 数据实践