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

Spring Boot集成Otel与AppInsight:采样请求生成PropagatedSpan的疑问

问题描述

我们的Spring Boot应用集成了OpenTelemetry SDK 1.23.1和AppInsight Agent v3.4.16,遇到以下现象:

  • 当自动检测到带有采样标记(如00-155346606a87c80bab0c375534b1155e-1ad5743907b9fd93-01)的traceparent HTTP请求时,应用会创建PropagatedSpan(本质是NoOp Span),导致无法为该Span设置自定义属性、更新状态,这直接影响了HTTP请求遥测的准确性(比如监控误判、错误码设置)。
  • 当traceflag=00或无traceparent时,应用会创建支持自定义属性的SdkSpan。

现咨询两个问题:

  1. 为何带有采样标记的请求会生成PropagatedSpan?
  2. 是否有办法覆盖此行为?

解答

1. 采样请求生成PropagatedSpan的原因

这是OpenTelemetry SDK默认采样逻辑与AppInsight Agent协同作用的结果:

  • 按照W3C Trace Context规范,traceparent末尾的01代表该Trace已被上游标记为采样状态。
  • AppInsight Agent检测到上游的采样标记后,会默认复用这个采样决策,此时OpenTelemetry SDK会创建PropagatedSpan来传递Trace上下文,但不会生成本地可修改的Span实例——因为PropagatedSpan本质是无操作(NoOp)实现,仅负责上下文传递,不支持属性修改或状态更新。
  • 这种设计初衷是避免重复采样、减少遥测数据冗余,但在需要本地增强Span属性的场景下会形成限制。

2. 覆盖此行为的方案

可以通过两种方式修改默认逻辑,强制生成可修改的SdkSpan:

方案一:自定义采样器

实现自定义Sampler,忽略上游采样标记,强制对所有请求生成本地可修改的Span:

public class ForceLocalSampler implements Sampler {
    @Override
    public SamplingResult shouldSample(Context parentContext, String traceId, String name, SpanKind spanKind, Attributes attributes, List<Link> links) {
        // 强制采样,生成可修改的SdkSpan
        return SamplingResult.recordAndSample();
    }

    @Override
    public String getDescription() {
        return "ForceLocalSampler{force record and sample all spans}";
    }
}

在OpenTelemetry配置中替换默认采样器:

OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
        .setTracerProvider(TracerProviderSdk.builder()
                .setSampler(new ForceLocalSampler())
                .build())
        .buildAndRegisterGlobal();

方案二:调整AppInsight Agent配置

修改applicationinsights.json配置文件,禁用上游采样决策复用,强制本地生成Span:

{
  "instrumentation": {
    "opentelemetry": {
      "sampling": {
        "overrideParentDecision": true
      }
    }
  }
}

该配置会让Agent忽略上游的traceflag标记,强制本地执行采样逻辑,从而生成可修改的SdkSpan。

注意事项

  • 自定义采样器会增加遥测数据量,需根据监控系统承载能力调整。
  • 修改Agent配置后,需重启应用生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:13:11