跳转至

Trace 配置

Trace 初始化配置

FTTraceConfig *traceConfig = [[FTTraceConfig alloc] init];
traceConfig.enableLinkRumData = YES;
traceConfig.enableAutoTrace = YES;
traceConfig.networkTraceType = FTNetworkTraceTypeDDtrace;
[[FTSDKAgent sharedInstance] startTraceWithConfigOptions:traceConfig];
let traceConfig = FTTraceConfig()
traceConfig.enableLinkRumData = true
traceConfig.enableAutoTrace = true
FTSDKAgent.sharedInstance().startTrace(withConfigOptions: traceConfig)
属性 类型 必须 含义
sampleRate int 采样率。取值范围 [0,100]0 表示不采集,100 表示全采集,默认值 100
networkTraceType NS_ENUM 设置链路追踪类型,默认为 DDTrace。目前支持 ZipkinJaegerDDTraceSkywalking(8.0+)、TraceParent(W3C)
enableLinkRumData BOOL 是否与 RUM 数据关联,默认 NO
enableAutoTrace BOOL 设置是否开启自动 HTTP Trace,默认 NO,目前只支持 NSURLSession

Trace 网络链路追踪

可以通过 FTTraceConfig 配置开启自动模式,或手动添加。Trace 相关数据通过 FTTraceManager 单例传入,相关 API 如下。

使用方法

// FTTraceManager.h

/// 获取 trace 的请求头参数
/// - Parameters:
///   - key: 能够确定某一请求的唯一标识
///   - url: 请求 URL
/// - Returns: trace 的请求头参数字典
- (NSDictionary *)getTraceHeaderWithKey:(NSString *)key url:(NSURL *)url;
/// 获取 trace 的请求头参数
/// - Parameters:
///   - key: 能够确定某一请求的唯一标识
///   - url: 请求 URL
/// - Returns: trace 的请求头参数字典
open func getTraceHeader(withKey key: String, url: URL) -> [AnyHashable : Any]

代码示例

NSString *key = [[NSUUID UUID] UUIDString];
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSDictionary *traceHeader = [[FTTraceManager sharedInstance] getTraceHeaderWithKey:key url:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if (traceHeader && traceHeader.allKeys.count > 0) {
    [traceHeader enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
        [request setValue:value forHTTPHeaderField:field];
    }];
}
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
   // 您的代码
}];

[task resume];
let url: URL = NSURL(string: "https://www.baidu.com")! as URL
let traceHeader = FTTraceManager.sharedInstance().getTraceHeader(withKey: NSUUID().uuidString, url: url)
let request = NSMutableURLRequest(url: url)
for (a, b) in traceHeader {
    request.setValue(b as? String, forHTTPHeaderField: a as! String)
}
let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
    // 您的代码
}
task.resume()

文档评价

文档内容是否对您有帮助? ×