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을 참고하세요.