Существует несколько компонентов, которые работают вместе и могут полностью удовлетворить ваши требования.
Common Открытая библиотека , состоит из абстрактного слоя для span, tracer, инжекторов иэкстракторы и т. д.
Официальный jaeger-client-csharp .Полный список клиентов можно найти здесь , которые реализуют слой раскрывающейся абстракции , упомянутый ранее.
Последний элемент - OpenTracingAPI для .NET , который является связующим звеном между открытой библиотекой и DiagnosticSource в dotnet.
На самом деле, конечная библиотека имеет sample , который использует реализацию ITracer jaeger csharp и конфигурирует ее как GlobalTracer по умолчанию.
В остальном в вашем Startup.cs вы получите что-то похожее из этого примера (services is IServiceCollection):
services.AddSingleton<ITracer>(serviceProvider =>
{
string serviceName = Assembly.GetEntryAssembly().GetName().Name;
ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
ISampler sampler = new ConstSampler(sample: true);
ITracer tracer = new Tracer.Builder(serviceName)
.WithLoggerFactory(loggerFactory)
.WithSampler(sampler)
.Build();
GlobalTracer.Register(tracer);
return tracer;
});
// Prevent endless loops when OpenTracing is tracking HTTP requests to Jaeger.
services.Configure<HttpHandlerDiagnosticOptions>(options =>
{
options.IgnorePatterns.Add(request => _jaegerUri.IsBaseOf(request.RequestUri));
});