// 注册OpenTracing组件埋点。
services.AddOpenTracing();
// 过滤httpclient采集中的Jaeger数据上报请求。
var httpOption = new HttpHandlerDiagnosticOptions();
httpOption.IgnorePatterns.Add(req => req.RequestUri.AbsolutePath.Contains("/api/traces"));
services.AddSingleton(Options.Create(httpOption));
初始化和注册Jaeger。
// 添加Jaeger Tracer。
services.AddSingleton<ITracer>(serviceProvider =>
{
string serviceName = serviceProvider.GetRequiredService<IHostingEnvironment>().ApplicationName;
ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
Configuration.SenderConfiguration senderConfiguration = new Configuration.SenderConfiguration(loggerFactory)
// 在链路追踪控制台获取Jaeger Endpoint。
.WithEndpoint("http://tracing-analysis-dc-sz.aliyuncs.com/adapt_your_token/api/traces");
// This will log to a default localhost installation of Jaeger.
var tracer = new Tracer.Builder(serviceName)
.WithSampler(new ConstSampler(true))
.WithReporter(new RemoteReporter.Builder().WithSender(senderConfiguration.GetSender()).Build())
.Build();
// Allows code that can't use DI to also access the tracer.
GlobalTracer.Register(tracer);
return tracer;
});
Tracer.Inject(span.Context, BuiltinFormats.HttpHeaders, new HttpHeadersInjectAdapter(request.Headers));
在服务端调用Extract方法解析Context信息。
ISpanContext extractedSpanContext = _tracer.Extract(BuiltinFormats.HttpHeaders, new RequestHeadersExtractAdapter(request.Headers));
ISpan childSpan = _tracer.BuildSpan(operationName).AsChildOf(extractedSpanContext);
常见问题
问:Demo程序执行成功,为什么控制台上没有上报数据?
答:请检查senderConfiguration配置中的Endpoint是否填写正确。
Configuration.SenderConfiguration senderConfiguration = new Configuration.SenderConfiguration(loggerFactory)
// 在链路追踪控制台获取Jaeger Endpoint。
.WithEndpoint("http://tracing-analysis-dc-sz.aliyuncs.com/adapt_your_token/api/traces");
在文档使用中是否遇到以下问题
更多建议
匿名提交