最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

spring boot - SpanProcessor not invoked on all spans - Stack Overflow

programmeradmin0浏览0评论

I would like to register a SpanProcessor that adds the current baggage as span attributes.

I have declared a configuration bean as follows:

@Bean
public AutoConfigurationCustomizerProvider provider() {
    return provider -> {
        provider.addTracerProviderCustomizer((sdkTracerProviderBuilder, configProperties) ->
                sdkTracerProviderBuilder.addSpanProcessor(
                        BaggageSpanProcessor.allowAllBaggageKeys()
                )
        );
    };
}

BaggageProcessor is from io.opentelemetry.contrib:opentelemetry-baggage-processor:1.44.0-alpha2

Here's how I add create Baggage and Span:

private final Tracer tracer = GlobalOpenTelemetry.getTracer("example-tracer");


private void doSomething(Contact contact) {

    Baggage newBaggage =
            Baggage.current().toBuilder()
                    .put("xxxxxx", "12345678")
                    .build();

    try (Scope scope0 = newBaggage.storeInContext(Context.current()).makeCurrent()) {
        Span span = tracer.spanBuilder("manual-span").startSpan();

        try (var scope1 = span.makeCurrent()) {
            span.addEvent("manual-event");
        } finally {
            span.end();
        }

    }

In debug mode I can confirm that the addTracerProviderCustomizer() method is called. However, the BaggageSpanProcessor.onStart() method is not invoked on all spans, actually using a dummy HTTP handler it is only invoked on one span named "HikariDataSource.getConnection", which is not even part of the 19 spans that I see in Jaeger for this HTTP request... I'm puzzled.

Any idea what I'm doing wrong?

Open Telemetry dependencies based on io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.12.0


EDIT: it works if instead of using GlobalOpenTelemetry.getTracer("example-tracer") I autowire OpenTelemetry and get the Tracer as follows:

Tracer tracer = openTelemetry.getTracer("example-tracer");

Why are they not equivalent?

发布评论

评论列表(0)

  1. 暂无评论