在Azure Application Insights中无法找到OpenTelemetry标签与活动事件
你的问题核心是自定义Activity的追踪数据未被正确采集并发送到Azure Monitor,同时资源属性的配置方式需要调整,以下是具体修正步骤:
修正OpenTelemetry追踪配置,包含自定义Activity源
你的代码中创建了自定义Activity源WeatherActivities.MainSource,但OpenTelemetry TracerProvider默认不会自动采集这个源的追踪数据。需要显式添加这个源到追踪配置中:修改
Program.cs的OpenTelemetry配置部分:builder.Services.AddOpenTelemetry() .ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(resourceAttributes)) // 直接在这里配置资源属性 .WithTracing(tracingBuilder => { tracingBuilder .AddSource(WeatherActivities.MainSource.Name) // 添加自定义Activity源 .UseAzureMonitor(options => { options.ConnectionString = "<my-connection-string>"; }); });说明:原来的
ConfigureOpenTelemetryTracerProvider方式可以保留,但更推荐在WithTracing中统一配置,确保自定义源被正确纳入采集范围。确认Activity的启用状态
确保你的Activity源是启用状态(默认是启用的,但可以显式确认):// WeatherActivities类的定义示例 public static class WeatherActivities { public static readonly ActivitySource MainSource = new ActivitySource("WeatherActivities"); }如果Activity源被禁用(比如通过环境变量
OTEL_DOTNET_AUTO_TRACES_DISABLED设置为true),会导致数据无法采集,检查相关环境变量。调整Azure Monitor查询语句
自定义Activity的数据会被发送到traces表,而非dependencies或customEvents表,所以需要调整查询:查询自定义Tag (
my-tag)traces | where customDimensions["my-tag"] != "" | project timestamp, name, customDimensions["my-tag"], customDimensions查询Activity Event (
my-activity-event)
Activity Event会被嵌套在traces表的customEvents字段中,需要展开查询:traces | where name == "Weather.Random" // 匹配你的Activity名称 | mv-expand customEvents | where customEvents.name == "my-activity-event" | project timestamp, customEvents.name, customEvents.timestamp查询资源属性
资源属性会出现在traces表的cloud_RoleName(对应service.name)、cloud_RoleInstance(对应service.instance.id),以及customDimensions中的service.namespace:traces | project timestamp, cloud_RoleName, cloud_RoleInstance, customDimensions["service.namespace"]
验证配置生效
重启服务后,调用控制器接口,等待几分钟(Azure Monitor有数据延迟),再用上述查询语句验证数据是否存在。
内容的提问来源于stack exchange,提问作者Ivan Neganov

