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

基于OpenTelemetry Java SDK从唯一ID构建Trace Context的问题

基于数据包唯一ID构建OpenTelemetry Trace上下文的问题

我有一个包含5个步骤的ETL pipeline,每个步骤可在不同线程、不同应用中执行。由于无法访问内部实现,仅能接触到处理步骤,导致传递OpenTelemetry Trace Context十分困难。我希望通过唯一标识单条数据全流程运行的ID来构建Trace Context。

示例场景

数据包步骤线程应用
id_12341thread_01app_01
id_12342thread_02app_01
id_12343thread_10app_02
id_12344thread_01app_01
id_12345thread_05app_02
id_55551thread_05app_02
id_55552thread_01app_02
id_55553thread_05app_01
id_55554thread_06app_02
id_55555thread_15app_02

尝试的代码

public class Step1 {
    public void execute(DataPackage obj){
         var otelContext = SpanContext.create(
              TraceId.fromBytes(obj.getUniqueId().getBytes()),
              SpanId.fromBytes(processorName.getBytes()),
              TraceFlags.getDefault(),
              TraceState.getDefault()
         );

         var wrap = Span.wrap(otelContext);

         var with = Context.root().with(wrap);
  
         var span = tracer.spanBuilder("Step1").setParent(with).startSpan();
         CompletableFuture.runAsync(() -> { /* 业务代码 */ }).whenComplete((c1, exception) -> {
         if (exception != null) {
           span.recordException(exception);
         } else {
           span.end();
         }
       });
    }
}

遇到的问题

我用上述代码构建上下文时,出现了Span的启停不在同一Trace Context的问题。之后我手动修复了字节数组长度问题,但链路数据完全不显示在Jaeger中。我猜测是因为代码默认上下文已存在,而我无法判断何时需要创建上下文(ETL步骤执行顺序不固定),请问是否支持“upsert”上下文的方式?

内容的提问来源于stack exchange,提问作者Loading

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:44:55