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] リクエスト 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 を参照してください。