Trace 配置¶
Trace 初始化配置¶
| 属性 | 类型 | 必须 | 含义 |
|---|---|---|---|
sampleRate |
int |
否 | 采样率。取值范围 [0,100],0 表示不采集,100 表示全采集,默认值 100 |
networkTraceType |
NS_ENUM |
否 | 设置链路追踪类型,默认为 DDTrace。目前支持 Zipkin、Jaeger、DDTrace、Skywalking(8.0+)、TraceParent(W3C) |
enableLinkRumData |
BOOL |
否 | 是否与 RUM 数据关联,默认 NO |
enableAutoTrace |
BOOL |
否 | 设置是否开启自动 HTTP Trace,默认 NO,目前只支持 NSURLSession |
Trace 网络链路追踪¶
可以通过 FTTraceConfig 配置开启自动模式,或手动添加。Trace 相关数据通过 FTTraceManager 单例传入,相关 API 如下。
使用方法¶
代码示例¶
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()