Trace 配置¶
Trace 初始化配置¶
| 属性 | 类型 | 必须 | 含义 |
|---|---|---|---|
| samplerate | int | 否 | 采样率。取值范围 [0,100],0 表示不采集,100 表示全采集,默认值为 100 |
| networkTraceType | FTNetworkTraceType | 否 | 设置链路追踪的类型。默认为 DDTrace,目前支持 Zipkin、Jaeger、DDTrace、Skywalking(8.0+)、TraceParent(W3C)。如果接入 OpenTelemetry 选择对应链路类型时,请注意查阅支持类型及 agent 相关配置 |
| enableLinkRumData | BOOL | 否 | 是否与 RUM 数据关联。默认 NO |
| enableAutoTrace | BOOL | 否 | 设置是否开启自动 HTTP trace。默认 NO,目前只支持 NSURLSession |
| traceInterceptor | FTTraceInterceptor | 否 | 支持通过 URLRequest 判断是否进行自定义链路追踪,确认拦截后返回 TraceContext,不拦截返回 nil。SDK 1.5.10 以上版本支持该参数。优先级低于 URLSession 自定义采集 |
Trace 网络链路追踪¶
可以通过 FTTraceConfig 配置开启自动模式,也支持用户自定义添加 Trace 相关数据。自定义添加相关 API 如下:
NSString *key = [[NSUUID UUID]UUIDString];
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
//需要的手动操作: 请求前获取 traceHeader 添加到请求头
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.init(string: "https://www.baidu.com")! as URL
if let traceHeader = FTExternalDataManager.shared().getTraceHeader(withKey: NSUUID().uuidString, url: url) {
let request = NSMutableURLRequest(url: url)
//需要的手动操作: 请求前获取 traceHeader 添加到请求头
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()
}
URLSession 高级采集¶
如需对某个 URLSession 实例进行更细粒度的 Resource 采集、Trace 注入与错误过滤,请查看 URLSession 自定义 Network 采集。