Spring Boot集成OTEL+Honeycomb:Trace环境标签添加失败排查
Spring Boot集成OpenTelemetry上报Honeycomb时添加环境标签失败问题
场景说明
在Spring Boot集成OpenTelemetry(OTEL)并将链路数据上报至Honeycomb.io的场景中,尝试给每个Trace添加环境标签,自定义了EnvironmentSpanProcessor类并标注为@Component,但标签未成功添加。
自定义SpanProcessor代码
@Component public class EnvironmentSpanProcessor implements SpanProcessor { @Value("${ENVIRONMENT}") private String environment; Queue<SpanData> spans = new LinkedBlockingQueue<>(50); @Override public void onStart(Context context, ReadWriteSpan readWriteSpan) { readWriteSpan.setAttribute("env", environment); } @Override public boolean isStartRequired() { return false; } @Override public void onEnd(ReadableSpan readableSpan) { this.spans.add(readableSpan.toSpanData()); } @Override public boolean isEndRequired() { return true; } }
通过@Value注入环境变量,在onStart方法中设置env属性,但启动后该方法断点从未触发,尽管该Bean可在Actuator中查到。
同时,OtelAutoConfiguration中的如下方法断点也未触发:
SdkTracerProvider otelTracerProvider(SpanLimits spanLimits, ObjectProvider<List<SpanProcessor>> spanProcessors, SpanExporterCustomizer spanExporterCustomizer, ObjectProvider<List<SpanExporter>> spanExporters, Sampler sampler, Resource resource, SpanProcessorProvider spanProcessorProvider) { SdkTracerProviderBuilder sdkTracerProviderBuilder = SdkTracerProvider.builder().setResource(resource) .setSampler(sampler).setSpanLimits(spanLimits); List<SpanProcessor> processors = spanProcessors.getIfAvailable(ArrayList::new); processors.addAll(spanExporters.getIfAvailable(ArrayList::new).stream() .map(e -> spanProcessorProvider.toSpanProcessor(spanExporterCustomizer.customize(e))) .collect(Collectors.toList())); processors.forEach(sdkTracerProviderBuilder::addSpanProcessor); return sdkTracerProviderBuilder.build(); }
当前状态
项目能正常生成并上报Trace,但环境标签始终未添加成功。
pom.xml相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-brave</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-otel-autoconfigure</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-otlp</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-extension-trace-propagators</artifactId> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty-shaded</artifactId> <version>1.47.0</version> </dependency>
application.yaml配置
sleuth: enabled: true web: additional-skip-pattern: /readiness|/liveness client.skip-pattern: /readiness sampler: probability: 1.0 rate: 100 propagation: type: OT_TRACER otel: config: trace-id-ratio-based: 1.0 log.exporter.enabled: true exporter: otlp: endpoint: https://api.honeycomb.io headers: x-honeycomb-team: ${TELEMETRY_API_KEY} x-honeycomb-dataset: app-telemetry sleuth-span-filter: enabled: true resource: enabled: true
内容的提问来源于stack exchange,提问作者fpmoles
相关产品推荐
相关产品推荐

