parentLinks) {
+ if (name.startsWith("q/") && spanKind == SpanKind.SERVER) {
+ return NEGATIVE_SAMPLING_RESULT;
+ }
+ return root.shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks);
+ }
+
+ @Override
+ public String getDescription() {
+ return "NonApplicationEndpointBased{/q}";
+ }
+}
diff --git a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRecorder.java b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRecorder.java
index 0b72fdb4e7802..66de886fa0edd 100644
--- a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRecorder.java
+++ b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRecorder.java
@@ -140,7 +140,7 @@ public void setupSampler(TracerRuntimeConfig config) {
lateBoundSampler.setSamplerDelegate(samplerBean.get());
} else {
// Define Sampler using config
- lateBoundSampler.setSamplerDelegate(TracerUtil.mapSampler(config.sampler));
+ lateBoundSampler.setSamplerDelegate(TracerUtil.mapSampler(config.sampler, config.suppressNonApplicationUris));
}
}
}
diff --git a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRuntimeConfig.java b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRuntimeConfig.java
index 38be78991da0f..590979af87c7a 100644
--- a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRuntimeConfig.java
+++ b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerRuntimeConfig.java
@@ -22,6 +22,18 @@ public class TracerRuntimeConfig {
/** Config for sampler */
public SamplerConfig sampler;
+ /**
+ * Suppress non-application uris from trace collection.
+ * This will suppress tracing of `/q` endpoints.
+ *
+ * Providing a custom {@code io.opentelemetry.sdk.trace.samplers.Sampler} CDI Bean
+ * will ignore this setting.
+ *
+ * Suppressing non-application uris is enabled by default.
+ */
+ @ConfigItem(defaultValue = "true")
+ public boolean suppressNonApplicationUris;
+
@ConfigGroup
public static class SamplerConfig {
/**
diff --git a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerUtil.java b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerUtil.java
index a637db71a3fd4..b321d82d0f29e 100644
--- a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerUtil.java
+++ b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/TracerUtil.java
@@ -41,9 +41,13 @@ private static Sampler getBaseSampler(String samplerName, Optional ratio
}
}
- public static Sampler mapSampler(TracerRuntimeConfig.SamplerConfig samplerConfig) {
+ public static Sampler mapSampler(TracerRuntimeConfig.SamplerConfig samplerConfig, boolean suppressNonApplicationUris) {
Sampler sampler = getBaseSampler(samplerConfig.samplerName, samplerConfig.ratio);
+ if (suppressNonApplicationUris) {
+ sampler = new NonApplicationEndpointSampler(sampler);
+ }
+
if (samplerConfig.parentBased) {
return Sampler.parentBased(sampler);
}