You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:20:26