我有以下OpenTelemeter设置:

builder.Services
    .AddOpenTelemetry()
    .ConfigureResource(ops =>
    {
        ops.AddService(builder.Environment.ApplicationName).AddTelemetrySdk();
    })
    .WithTracing(ops =>
    {
        ops.AddSource("*");
        ops.AddAspNetCoreInstrumentation();
        ops.AddHttpClientInstrumentation();
        ops.AddConsoleExporter();
    })
    .WithMetrics(ops =>
    {
        ops.AddMeter("*");
        ops.AddConsoleExporter();
    });

我可以在控制台中看到踪迹,因此此设置运行良好.

然而,我也想在DataDog中收集这些痕迹.在花了几个小时之后,我没有找到任何方法来让它工作.这是我的DD Tracer设置:

var datadogTracerConfig = TracerSettings.FromDefaultSources();
datadogTracerConfig.Exporter.AgentUri = new UriBuilder(HttpScheme.Http.ToString(), configuration.Host, configuration.TcpPort).Uri;
datadogTracerConfig.Exporter.DogStatsdPort = configuration.UdpPort;
datadogTracerConfig.Environment = environment.EnvironmentName;
datadogTracerConfig.ServiceName = environment.ApplicationName;
datadogTracerConfig.ServiceVersion = version;

Datadog.Trace.Tracer.Configure(datadogTracerConfig);

这种设置也是有效的.我设法把踪迹发送给了DD.然而,我无法将两者结合起来.我try 了以下方法:

var tracer = OpenTracingTracerFactory.WrapTracer(Datadog.Trace.Tracer.Instance);
GlobalTracer.Register(tracer);

但是,这并不奏效.有什么主意吗?

推荐答案

OpenTelemeter!=OpenTracing,因此以下操作将不起作用.

var tracer = OpenTracingTracerFactory.WrapTracer(Datadog.Trace.Tracer.Instance);
GlobalTracer.Register(tracer);

我不熟悉DataDog的产品,但您可以配置OpenTelemeter.NET以通过OTLP(开放遥测协议)导出其遥测数据.DataDog says they support OTLP.

您的代码应该如下所示:

builder.Services
    .AddOpenTelemetry()
    .ConfigureResource(ops =>
    {
        ops.AddService(builder.Environment.ApplicationName).AddTelemetrySdk();
    })
    .WithTracing(ops =>
    {
        ops.AddSource("*");
        ops.AddAspNetCoreInstrumentation();
        ops.AddHttpClientInstrumentation();
        ops.AddOtlpExporter(options =>
        {
            options.Endpoint = new Uri("https://address-of-ddagent-or-otelcollector");
        });
    })
    .WithMetrics(ops =>
    {
        ops.AddMeter("*");
        ops.AddOtlpExporter(options =>
        {
            options.Endpoint = new Uri("https://address-of-ddagent-or-otelcollector");
        });
    });

.net相关问答推荐

Azure管道-使用.NET 8 RC2 SDK生成C#项目失败

WinForm Task.Wait :为什么它会阻塞 UI?

AppShell - 返回导航失败,匹配的路由不明确......但我只注册了一次路由

.net Maui 在单击按钮时访问 CollectionView 中的数据项

.NET 4.5 项目未在 Visual Studio 2022 中编译

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

将 Moq 模拟对象传递给构造函数

根源是什么?

如何从字符串中删除所有字母字符?

如何将 UI Dispatcher 传递给 ViewModel

什么版本的 .NET 附带什么版本的 Windows?

在 C# 中将匿名类型转换为键/值数组?

如何在 C# 中以编程方式安装 Windows 服务?

DLL 中有什么以及它是如何工作的?

安装带有恢复操作的 Windows 服务以重新启动

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

使用没有catch块的try-finally块

通过继承扩展枚举

泛型类的静态成员是否与特定实例相关联?