From 5c4ca7c6c528d418c3c6475091ed46b12fffce50 Mon Sep 17 00:00:00 2001 From: Douglas Q Hawkins Date: Tue, 3 Nov 2026 20:09:35 -0500 Subject: [PATCH 1/2] Set Spring web span tags by id Spring Web MVC (3.1 and 6.0) and Spring WebFlux set view.name, view.type, handler.type, request.predicate, and the WebFlux client's cancellation event and message with KnownTags ids instead of string literals. All were already registered. Co-Authored-By: Claude Opus 5.5 --- .../client/SpringWebfluxHttpClientDecorator.java | 7 +++++-- .../springwebflux/server/HandlerAdapterAdvice.java | 3 ++- .../springwebflux/server/RouteOnSuccessOrError.java | 3 ++- .../springweb/SpringWebHttpServerDecorator.java | 6 ++++-- .../springweb6/SpringWebHttpServerDecorator.java | 6 ++++-- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java index dd91de0d112..6fd35e92e9e 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java @@ -1,5 +1,8 @@ package datadog.trace.instrumentation.springwebflux.client; +import static datadog.trace.api.KnownTags.EVENT_ID; +import static datadog.trace.api.KnownTags.MESSAGE_ID; + import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpClientDecorator; @@ -21,8 +24,8 @@ public class SpringWebfluxHttpClientDecorator public static final CharSequence HTTP_REQUEST = UTF8BytesString.create(DECORATE.operationName()); public void onCancel(final AgentSpan span) { - span.setTag("event", CANCELLED); - span.setTag("message", CANCELLED_MESSAGE); + span.setTag(EVENT_ID, CANCELLED); + span.setTag(MESSAGE_ID, CANCELLED_MESSAGE); } @Override diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java index c6a7cc1e3ea..28fc41b3a0b 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; +import static datadog.trace.api.KnownTags.HANDLER_TYPE_ID; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -44,7 +45,7 @@ public static ContextScope methodEnter( } span.setSpanName(operationName); - span.setTag("handler.type", handlerType); + span.setTag(HANDLER_TYPE_ID, handlerType); scope = activateSpan(span); } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java index 09b0627eb1a..a44bd6f2724 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; +import static datadog.trace.api.KnownTags.REQUEST_PREDICATE_ID; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import datadog.trace.api.cache.DDCache; @@ -69,7 +70,7 @@ public void accept(HandlerFunction handlerFunction) { if (predicateString != null) { final AgentSpan span = (AgentSpan) serverRequest.attributes().get(AdviceUtils.SPAN_ATTRIBUTE); if (span != null) { - span.setTag("request.predicate", predicateString); + span.setTag(REQUEST_PREDICATE_ID, predicateString); } final AgentSpan parentSpan = (AgentSpan) serverRequest.attributes().get(AdviceUtils.PARENT_SPAN_ATTRIBUTE); diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java index 01d06605dd5..5113a2dabf0 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.springweb; +import static datadog.trace.api.KnownTags.VIEW_NAME_ID; +import static datadog.trace.api.KnownTags.VIEW_TYPE_ID; import static datadog.trace.api.Pair.of; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -155,11 +157,11 @@ private String getMethodName(final Object handler) { public void onRender(final AgentSpan span, final ModelAndView mv) { final String viewName = mv.getViewName(); if (viewName != null) { - span.setTag("view.name", viewName); + span.setTag(VIEW_NAME_ID, viewName); span.setResourceName(viewName); } if (mv.getView() != null) { - span.setTag("view.type", className(mv.getView().getClass())); + span.setTag(VIEW_TYPE_ID, className(mv.getView().getClass())); } } } diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java index 611625b0c3f..2d98bb3fb56 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.springweb6; +import static datadog.trace.api.KnownTags.VIEW_NAME_ID; +import static datadog.trace.api.KnownTags.VIEW_TYPE_ID; import static datadog.trace.api.Pair.of; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -162,11 +164,11 @@ private String getMethodName(final Object handler) { public void onRender(final AgentSpan span, final ModelAndView mv) { final String viewName = mv.getViewName(); if (viewName != null) { - span.setTag("view.name", viewName); + span.setTag(VIEW_NAME_ID, viewName); span.setResourceName(viewName); } if (mv.getView() != null) { - span.setTag("view.type", className(mv.getView().getClass())); + span.setTag(VIEW_TYPE_ID, className(mv.getView().getClass())); } } } From b8a3cb3a7b11ee45a2fe2028dffc3f6f3a4db8af Mon Sep 17 00:00:00 2001 From: Douglas Q Hawkins Date: Thu, 5 Nov 2026 15:34:43 -0500 Subject: [PATCH 2/2] Use the bare KnownTags id names #13061 now names an id after its tag with no _ID suffix. Rename only; the ids are the same values. Co-Authored-By: Claude Opus 5.5 --- .../client/SpringWebfluxHttpClientDecorator.java | 8 ++++---- .../springwebflux/server/HandlerAdapterAdvice.java | 4 ++-- .../springwebflux/server/RouteOnSuccessOrError.java | 4 ++-- .../springweb/SpringWebHttpServerDecorator.java | 8 ++++---- .../springweb6/SpringWebHttpServerDecorator.java | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java index 6fd35e92e9e..9dcad3c695e 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientDecorator.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.springwebflux.client; -import static datadog.trace.api.KnownTags.EVENT_ID; -import static datadog.trace.api.KnownTags.MESSAGE_ID; +import static datadog.trace.api.KnownTags.EVENT; +import static datadog.trace.api.KnownTags.MESSAGE; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -24,8 +24,8 @@ public class SpringWebfluxHttpClientDecorator public static final CharSequence HTTP_REQUEST = UTF8BytesString.create(DECORATE.operationName()); public void onCancel(final AgentSpan span) { - span.setTag(EVENT_ID, CANCELLED); - span.setTag(MESSAGE_ID, CANCELLED_MESSAGE); + span.setTag(EVENT, CANCELLED); + span.setTag(MESSAGE, CANCELLED_MESSAGE); } @Override diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java index 28fc41b3a0b..112212c28ef 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterAdvice.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; -import static datadog.trace.api.KnownTags.HANDLER_TYPE_ID; +import static datadog.trace.api.KnownTags.HANDLER_TYPE; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromScope; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -45,7 +45,7 @@ public static ContextScope methodEnter( } span.setSpanName(operationName); - span.setTag(HANDLER_TYPE_ID, handlerType); + span.setTag(HANDLER_TYPE, handlerType); scope = activateSpan(span); } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java index a44bd6f2724..8e46c616e80 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouteOnSuccessOrError.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; -import static datadog.trace.api.KnownTags.REQUEST_PREDICATE_ID; +import static datadog.trace.api.KnownTags.REQUEST_PREDICATE; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import datadog.trace.api.cache.DDCache; @@ -70,7 +70,7 @@ public void accept(HandlerFunction handlerFunction) { if (predicateString != null) { final AgentSpan span = (AgentSpan) serverRequest.attributes().get(AdviceUtils.SPAN_ATTRIBUTE); if (span != null) { - span.setTag(REQUEST_PREDICATE_ID, predicateString); + span.setTag(REQUEST_PREDICATE, predicateString); } final AgentSpan parentSpan = (AgentSpan) serverRequest.attributes().get(AdviceUtils.PARENT_SPAN_ATTRIBUTE); diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java index 5113a2dabf0..ed16e9ed69b 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.springweb; -import static datadog.trace.api.KnownTags.VIEW_NAME_ID; -import static datadog.trace.api.KnownTags.VIEW_TYPE_ID; +import static datadog.trace.api.KnownTags.VIEW_NAME; +import static datadog.trace.api.KnownTags.VIEW_TYPE; import static datadog.trace.api.Pair.of; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -157,11 +157,11 @@ private String getMethodName(final Object handler) { public void onRender(final AgentSpan span, final ModelAndView mv) { final String viewName = mv.getViewName(); if (viewName != null) { - span.setTag(VIEW_NAME_ID, viewName); + span.setTag(VIEW_NAME, viewName); span.setResourceName(viewName); } if (mv.getView() != null) { - span.setTag(VIEW_TYPE_ID, className(mv.getView().getClass())); + span.setTag(VIEW_TYPE, className(mv.getView().getClass())); } } } diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java index 2d98bb3fb56..88fdc3e8a3e 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.springweb6; -import static datadog.trace.api.KnownTags.VIEW_NAME_ID; -import static datadog.trace.api.KnownTags.VIEW_TYPE_ID; +import static datadog.trace.api.KnownTags.VIEW_NAME; +import static datadog.trace.api.KnownTags.VIEW_TYPE; import static datadog.trace.api.Pair.of; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -164,11 +164,11 @@ private String getMethodName(final Object handler) { public void onRender(final AgentSpan span, final ModelAndView mv) { final String viewName = mv.getViewName(); if (viewName != null) { - span.setTag(VIEW_NAME_ID, viewName); + span.setTag(VIEW_NAME, viewName); span.setResourceName(viewName); } if (mv.getView() != null) { - span.setTag(VIEW_TYPE_ID, className(mv.getView().getClass())); + span.setTag(VIEW_TYPE, className(mv.getView().getClass())); } } }