Skip to content

Traces contain 'q/' part in http.route (and operation name) for system requests in 999-SNAPSHOT #45754

@fedinskiy

Description

@fedinskiy

Describe the bug

I have an application, which sends traces for requests to the Jaeger instance, including system calls (with 'q/' prefix in path). In version 3.17.7 tag http.route of these traces contains only path after the /q (eg /arc), but for current Quarkus snapshot it contains the whole path (eg q/arc). This means, that we need to change our search for traces depending on the version of Quarkus used.

Expected behavior

The traces should contain the path without the prefix[1] or the next version should have this behavior described as a breaking change.

[1]

client.address	
127.0.0.1
	
http.request.method	
GET
	
http.response.body.size	
664
	
http.response.status_code	
200
	
http.route	
/arc
	
internal.span.format	
otlp
	
server.address	
localhost
	
server.port	
8080
	
span.kind	
server
	
url.path	
/q/arc
	
url.scheme	
http
	
user_agent.original	
curl/8.9.1
	
Process
host.name	
localhost
	
otel.library.name	
io.quarkus.opentelemetry
	
service.version	
1.0.0-SNAPSHOT
	
telemetry.sdk.language	
java
	
telemetry.sdk.name	
opentelemetry
	
telemetry.sdk.version	
1.42.1
	
webengine.name	
Quarkus
	
webengine.version	
3.17.7

Actual behavior

Traces contain the prefix

client.address	
127.0.0.1
	
http.request.method	
GET
	
http.response.body.size	
707
	
http.response.status_code	
200
	
http.route	
/q/arc
	
internal.span.format	
otlp
	
server.address	
localhost
	
server.port	
8080
	
span.kind	
server
	
url.path	
/q/arc
	
url.scheme	
http
	
user_agent.original	
curl/8.9.1
	
Process
host.name	
localhost
	
otel.library.name	
io.quarkus.opentelemetry
	
service.version	
1.0.0-SNAPSHOT
	
telemetry.sdk.language	
java
	
telemetry.sdk.name	
opentelemetry
	
telemetry.sdk.version	
1.42.1
	
webengine.name	
Quarkus
	
webengine.version	
999-SNAPSHOT

How to Reproduce?

  1. Start a local jaeger instance: podman run -p 16686:16686 -p 4317:4317 quay.io/jaegertracing/all-in-one:1.53.0
  2. clone the reproducer: git clone -b no-q git@github.com:fedinskiy/reproducer.git && cd reproducer
  3. Start the application with Quarkus 3.17.7: mvn clean quarkus:dev -Dquarkus.otel.traces.suppress-non-application-uris=false -Dquarkus.otel.exporter.otlp.traces.endpoint=http://localhost:4317/api/traces -Dquarkus.application.name=old -Dquarkus.platform.version=3.17.7
  4. Do a request: curl http://localhost:8080/q/arc
  5. Restart the app with the latest Quarkus: mvn clean quarkus:dev -Dquarkus.otel.traces.suppress-non-application-uris=false -Dquarkus.otel.exporter.otlp.traces.endpoint=http://localhost:4317/api/traces -Dquarkus.application.name=new -Dquarkus.platform.version=999-SNAPSHOT
  6. Do a request: curl http://localhost:8080/q/arc
  7. Open the Jaeger instance and compare the results for services "old" and "new"

Output of uname -a or ver

6.12.9-200.fc41.x86_64

Output of java -version

23.0.1, vendor: Eclipse Adoptium

Quarkus version or git rev

5534ed1

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.9.6

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions