ASP.NET Core项目中OpenTelemetry Trace无法发送至Azure问题排查
问题:OpenTelemetry Trace无法发送至Azure Application Insights
我用OpenTelemetry给ASP.NET Core项目做埋点,要收集日志和Trace,打算把两者都发送到Azure Application Insights存储查询。现在日志和Trace都能在控制台正常捕获显示,但只有日志能传到Application Insights,不管怎么调配置,Trace就是出现在Azure里。我想在Trace表里看到带correlationId的记录,求问原因?
我的OpenTelemetry配置代码如下:
private void ConfigureOpenTelemetry(IServiceCollection services) { var applicationInsightsConnectionString = "valid-connection-string"; var serviceName = "backend-service-name" services.AddOpenTelemetry() .ConfigureResource(resource => resource.AddService(serviceName)) .UseAzureMonitor(options => { options.ConnectionString = applicationInsightsConnectionString; }) .WithTracing(builder => { builder.AddSource("ActivitySourceName"); builder.AddAspNetCoreInstrumentation(); builder.AddConsoleExporter(); builder.AddAzureMonitorTraceExporter(o => o.ConnectionString = applicationInsightsConnectionString); }); services.AddLogging(logging => { logging.AddOpenTelemetry(options => { options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName)); options.AddConsoleExporter(); options.AddAzureMonitorLogExporter(o => o.ConnectionString = applicationInsightsConnectionString); }); }); }
我已经尝试多种OpenTelemetry配置方式,反复核对文档和示例,但问题仍未解决。
排查方向与解决方案
- 重复配置冲突:你同时使用了
UseAzureMonitor()和单独的AddAzureMonitorTraceExporter(),这会导致配置冲突。UseAzureMonitor()已经默认包含Trace、Metrics和Logs的导出器,重复添加会干扰发送逻辑,删掉AddAzureMonitorTraceExporter()这一行即可。 - ActivitySource名称不匹配:确保业务代码中创建
ActivitySource时的名称和AddSource("ActivitySourceName")完全一致,大小写、拼写都不能出错。如果没有手动创建ActivitySource,ASP.NET Core自带的请求Trace会使用Microsoft.AspNetCore作为Source名称,需要将这个名称也加入AddSource。 - 采样策略过滤:默认采样策略可能过滤了部分Trace,可显式设置100%采样率测试:
builder.SetSampler(new AlwaysOnSampler()); - 依赖包版本不兼容:检查
OpenTelemetry.Extensions.Hosting、Azure.Monitor.OpenTelemetry.Exporter等相关包的版本是否一致,版本不兼容可能导致导出失败。 - 网络与权限限制:确认连接字符串对应的Azure Application Insights资源有接收Trace的权限,同时排查是否有防火墙、代理拦截了出站请求。
内容的提问来源于stack exchange,提问作者Jasper Keijzer
相关产品推荐
相关产品推荐

