已配置OpenTelemetry与DataDog,如何整合实现追踪数据采集?
问题描述
我已完成以下OpenTelemetry配置(可正常运行,能在控制台查看追踪数据):
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追踪器配置(可正常向DataDog发送追踪数据):
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);
尝试用以下方法整合二者但无效:
var tracer = OpenTracingTracerFactory.WrapTracer(Datadog.Trace.Tracer.Instance); GlobalTracer.Register(tracer);
求可行的整合解决方案。
解决方案
不要使用OpenTracing兼容层,直接通过OpenTelemetry官方提供的Datadog Exporter实现整合,这是最可靠的方式,步骤如下:
1. 安装必要的NuGet包
安装OpenTelemetry的Datadog导出器包:
Install-Package OpenTelemetry.Exporter.Datadog
2. 修改OpenTelemetry配置
在原有的OpenTelemetry配置中添加Datadog Exporter,同时保留控制台输出,这样既能在本地调试时查看数据,又能将数据发送到DataDog:
builder.Services .AddOpenTelemetry() .ConfigureResource(ops => { ops.AddService(builder.Environment.ApplicationName) .AddTelemetrySdk() // 添加DataDog所需的资源标签 .AddTag("env", builder.Environment.EnvironmentName) .AddTag("service.version", version); }) .WithTracing(ops => { ops.AddSource("*"); ops.AddAspNetCoreInstrumentation(); ops.AddHttpClientInstrumentation(); ops.AddConsoleExporter(); // 添加DataDog追踪导出器 ops.AddDatadogExporter(options => { options.AgentEndpoint = new Uri($"http://{configuration.Host}:{configuration.TcpPort}"); options.ServiceName = builder.Environment.ApplicationName; options.Environment = builder.Environment.EnvironmentName; options.ServiceVersion = version; }); }) .WithMetrics(ops => { ops.AddMeter("*"); ops.AddConsoleExporter(); // 添加DataDog指标导出器 ops.AddDatadogExporter(options => { options.AgentEndpoint = new Uri($"http://{configuration.Host}:{configuration.TcpPort}"); options.DogStatsdPort = configuration.UdpPort; options.ServiceName = builder.Environment.ApplicationName; options.Environment = builder.Environment.EnvironmentName; }); });
3. 移除单独的DataDog Tracer配置
删除之前单独配置Datadog.Trace.Tracer的代码,因为现在所有追踪和指标数据都会通过OpenTelemetry管道发送到DataDog。
为什么之前的方法无效?
你用的OpenTracingTracerFactory是OpenTracing与OpenTelemetry的兼容层,但项目中使用的AspNetCore、HttpClient等Instrumentation是直接对接OpenTelemetry API的,不会读取OpenTracing的GlobalTracer,所以包装后的DataDog Tracer无法接收到OpenTelemetry采集的数据,自然无法实现整合。
内容的提问来源于stack exchange,提问作者Vivere
相关产品推荐
相关产品推荐

