Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opentelemetry-spring-webflux-5.3 lack context inside controller #10304

Closed
KayWu opened this issue Jan 22, 2024 · 0 comments · Fixed by #10311
Closed

opentelemetry-spring-webflux-5.3 lack context inside controller #10304

KayWu opened this issue Jan 22, 2024 · 0 comments · Fixed by #10311
Labels
bug Something isn't working needs triage New issue that requires triage

Comments

@KayWu
Copy link

KayWu commented Jan 22, 2024

Describe the bug

@RestController
public class TestController {

    @GetMapping("/test")
    public String traceId() {
        // returns invalid trace id: 00000000000000000000000000000000
        return Span.current().getSpanContext().getTraceId();
    }

    @GetMapping("/mono")
    public Mono<String> traceIdUsingMono() {
        return Mono.defer(()-> Mono.just(Span.current().getSpanContext().getTraceId()));
    }
}
@Configuration
public class OpentelemetryConfig {

    @Bean
    public OpenTelemetry openTelemetry() {
        Resource resource = Resource.getDefault().toBuilder().put(ResourceAttributes.SERVICE_NAME, "dice-server").put(ResourceAttributes.SERVICE_VERSION, "0.1.0").build();

        SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
                .addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create()))
                .setResource(resource)
                .build();

        return OpenTelemetrySdk.builder()
                .setTracerProvider(sdkTracerProvider)
                .setPropagators(ContextPropagators.create(TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance())))
                .buildAndRegisterGlobal();
    }

    @Bean
    public WebFilter webFilter(OpenTelemetry openTelemetry) {
        return SpringWebfluxTelemetry.builder(openTelemetry).build().createWebFilterAndRegisterReactorHook();
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>opentelemtry-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>opentelemtry-sample</name>
    <description>Demo project for opentelemtry</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-api</artifactId>
        </dependency>

        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-semconv</artifactId>
            <version>1.30.1-alpha</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-spring-webflux-5.3</artifactId>
            <version>1.32.0-alpha</version>
        </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-bom</artifactId>
                <version>1.32.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Code inside "/test" api doesn't have a valid context.

Steps to reproduce

Run Spring Boot Application.

curl localhost:8080/test
curl localhost:8080/mono

Expected behavior

/test and /mono should both return valid trace id.

This is the case for opentelemetry-spring-webflux-5.3 1.26.0-alpha.

Actual behavior

After upgrading to opentelemetry-spring-webflux-5.3 1.32.0-alpha alone with Spring Boot 3.2.1, /test returns 00000000000000000000000000000000, which is invalid trace id. '/mono' returns '2f34a6f4cdee5a8d10fdd5603fff342d', which is valid trace id.

Javaagent or library instrumentation version

opentelemetry-spring-webflux-5.3 v1.32.0-alpha

Environment

JDK: Temurin-17.0.5+8
OS: macOS 13.6.3

Additional context

No response

@KayWu KayWu added bug Something isn't working needs triage New issue that requires triage labels Jan 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working needs triage New issue that requires triage
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant