Trace 配置¶
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| sampleRate | double | 否 | 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1 |
| traceType | enum TraceType | 否 | 链路类型,默认 TraceType.ddTrace,支持 ddTrace、zipkinMulti、zipkinSingle、traceparent、skywalking、jaeger |
| enableLinkRUMData | bool | 否 | 是否与 RUM 数据关联,默认 false |
| enableAutoTrace | bool | 否 | 是否在 http 请求中自动添加 Trace Header,默认 false。通过修改 HttpOverrides.global 实现,如果项目有定制需求需要继承 FTHttpOverrides |
| enableNativeAutoTrace | bool | 否 | 是否开启原生网络自动追踪,iOS NSURLSession、Android OKHttp,默认 false |
Tracer 网络链路追踪¶
自动采集¶
通过 FTTracer().setConfig 开启 enableAutoTrace 来实现。
自定义 Tracer¶
使用方法¶
/// 获取 trace http 请求头数据
/// [key] 唯一 id
/// [url] 请求地址
Future<Map<String, String>> getTraceHeader(String url, {String? key})
代码示例¶
void httpClientGetHttp() async {
var url = 'http://reqeust.url.cn';
var httpClient = HttpClient();
String key = DateTime.now().millisecondsSinceEpoch.toString() + url;
var errorMessage = "";
HttpClientRequest request = await httpClient.getUrl(Uri.parse(url));
HttpClientResponse? response;
try {
final traceHeaders =
await FTTracer().getTraceHeader(key, request.uri.toString());
traceHeaders.forEach((key, value) {
request.headers.add(key, value);
});
response = await request.close();
} catch (exception) {
errorMessage = exception.toString();
} finally {
Map<String, dynamic> requestHeader = {};
Map<String, dynamic> responseHeader = {};
request.headers.forEach((name, values) {
requestHeader[name] = values;
});
if (response != null) {
response.headers.forEach((name, values) {
responseHeader[name] = values;
});
}
}
}
使用
http库与dio库,可参考 example。