Side-car模式下如何向OpenTelemetry注入自定义标签?DAPR场景求助
解决DAPR Side-car模式下自定义OpenTelemetry标签不显示在Zipkin的问题
你的问题核心在于新建的Activity没有关联到DAPR传入的Trace上下文,同时可能缺少OpenTelemetry对自定义ActivitySource的配置,导致标签没被收集并上报到Zipkin。以下是具体解决步骤:
1. 复用现有Trace上下文,而非新建独立Activity
DAPR Side-car已经为请求注入了Trace上下文,你不需要重新创建ActivitySource和Activity,直接获取当前请求的Activity即可添加标签:
//POST: /subtract [HttpPost] public decimal Subtract(Operands operands) { // 获取DAPR注入的当前请求Activity上下文 var currentActivity = Activity.Current; currentActivity?.SetTag("MyGreatTag", "here!"); Console.WriteLine($"Subtracting {operands.OperandTwo} from {operands.OperandOne}"); return Decimal.Parse(operands.OperandOne) - Decimal.Parse(operands.OperandTwo); }
这样标签会直接附加到DAPR已创建的请求Span上,自然会被上报到Zipkin。
2. 若需新建子Span,必须关联父上下文
如果你确实需要创建新的子Span(而非直接在根Span加标签),要确保新Activity继承DAPR的父上下文:
//POST: /subtract [HttpPost] public decimal Subtract(Operands operands) { // 定义固定的ActivitySource名称(后续需在OTel配置中指定) using var source = new ActivitySource("Calculator.Subtract"); // 启动Activity时自动继承当前父上下文(Activity.Current) using var activity = source.StartActivity("Subtract_Operation", ActivityKind.Internal); activity?.SetTag("MyGreatTag", "here!"); Console.WriteLine($"Subtracting {operands.OperandTwo} from {operands.OperandOne}"); return Decimal.Parse(operands.OperandOne) - Decimal.Parse(operands.OperandTwo); }
3. 配置OpenTelemetry以收集自定义ActivitySource
确保你的应用配置了OpenTelemetry,并且包含你的自定义ActivitySource名称。在Program.cs中添加如下配置:
using OpenTelemetry.Trace; var builder = WebApplication.CreateBuilder(args); // 配置OpenTelemetry追踪 builder.Services.AddOpenTelemetry() .WithTracing(tracerProviderBuilder => tracerProviderBuilder // 收集ASP.NET Core请求追踪 .AddAspNetCoreInstrumentation() // 加入自定义ActivitySource .AddSource("Calculator.Subtract") // 导出到Zipkin(与DAPR配置对齐) .AddZipkinExporter(options => { options.Endpoint = new Uri("http://zipkin.default.svc.cluster.local:9411/api/v2/spans"); })); // 其他应用配置... var app = builder.Build(); // ...
4. 验证DAPR的OpenTelemetry配置
确保DAPR Side-car已启用OpenTelemetry导出,且与应用导出目标一致。在Kubernetes的DAPR配置文件(如dapr-config.yaml)中确认:
apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: dapr-config spec: tracing: samplingRate: "1" zipkin: endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"
完成以上步骤后,重新部署应用并发起请求,即可在Zipkin的对应Span中看到MyGreatTag标签。
内容的提问来源于stack exchange,提问作者toto'
相关产品推荐
相关产品推荐

