1

我们的应用程序由 UI 的 Angular 6 和后端的 .netcore 2.0 组成,希望实现对其的跟踪,到目前为止,opentracing 似乎是最突出的,但我似乎找不到任何好的 .netcore 2.0 应用程序的帮助文档。

4

1 回答 1

1

有几个组件协同工作,可以完全满足您的要求。

  1. 常用的opentracing库,由span、tracer、injectors和extractors等抽象层组成。

  2. 官方jaeger-client-csharp。完整的客户端列表可以在这里找到,它们实现了前面提到的opentracing 抽象层。

  3. 最后一部分是.NET 的 OpenTracing API,它是dotnet 中opentracing 库DiagnosticSource概念之间的粘合剂。

实际上,最终的库有一个使用 ITracer 的 jaeger csharp 实现并将其配置为默认 GlobalTracer 的示例。

在您的 Startup.cs 中的其余部分,您最终会得到类似于该示例的内容(服务是 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));
});
于 2019-08-05T19:22:29.490 回答