From d1e6b7103a1a4b24d450825f54b68c992acbb857 Mon Sep 17 00:00:00 2001 From: shedfreewu <49236872+shedfreewu@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:40:17 +0800 Subject: [PATCH] fix: get source service name from upstream application meta in getServerPreSpanAttributes & set custom tag in current server span in tsf. (#1767) Signed-off-by: Haotian Zhang <928016560@qq.com> --- changes/changes-2.1.0.0.md | 1 + .../PolarisSpanAttributesProvider.java | 9 ++++++--- .../tsf/TsfSpanAttributesProvider.java | 17 ++++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/changes/changes-2.1.0.0.md b/changes/changes-2.1.0.0.md index 56cd55b74..53ec91522 100644 --- a/changes/changes-2.1.0.0.md +++ b/changes/changes-2.1.0.0.md @@ -32,3 +32,4 @@ - [fix: fix get gateway config in tsf ipv6.](https://github.com/Tencent/spring-cloud-tencent/pull/1747) - [fix: fix nacos service discovery. ](https://github.com/Tencent/spring-cloud-tencent/pull/1751) - [fix:fix NPE when rate-limiting with null value.](https://github.com/Tencent/spring-cloud-tencent/pull/1764) +- [fix: get source service name from upstream application meta in getServerPreSpanAttributes & set custom tag in current server span in tsf.](https://github.com/Tencent/spring-cloud-tencent/pull/1767) diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/PolarisSpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/PolarisSpanAttributesProvider.java index 4be2eec96..e0888bc6b 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/PolarisSpanAttributesProvider.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/PolarisSpanAttributesProvider.java @@ -56,13 +56,16 @@ public class PolarisSpanAttributesProvider implements SpanAttributesProvider { attributes.put("custom." + entry.getKey(), entry.getValue()); } } + Map upstreamDisposableApplicationAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_UPSTREAM_APPLICATION); + if (CollectionUtils.isNotEmpty(upstreamDisposableApplicationAttributes) + && upstreamDisposableApplicationAttributes.containsKey(MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME)) { + attributes.put("net.peer.service", + upstreamDisposableApplicationAttributes.get(MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME)); + } Map upstreamDisposableCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_UPSTREAM_DISPOSABLE); if (CollectionUtils.isNotEmpty(upstreamDisposableCustomAttributes)) { for (Map.Entry entry : upstreamDisposableCustomAttributes.entrySet()) { attributes.put("custom." + entry.getKey(), entry.getValue()); - if (MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME.equals(entry.getKey())) { - attributes.put("net.peer.service", entry.getValue()); - } } } attributes.put("http.port", CalleeMetadataContainerGroup.getStaticApplicationMetadataContainer() diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java index d712e735b..84c6f0967 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-trace-plugin/src/main/java/com/tencent/cloud/plugin/trace/attribute/tsf/TsfSpanAttributesProvider.java @@ -100,13 +100,28 @@ public class TsfSpanAttributesProvider implements SpanAttributesProvider { @Override public Map getServerFinallySpanAttributes(EnhancedPluginContext context) { Map attributes = new HashMap<>(); - MetadataObjectValue> extraTraceAttributeObject = MetadataContextHolder.get(). + MetadataContext metadataContext = MetadataContextHolder.get(); + + MetadataObjectValue> extraTraceAttributeObject = metadataContext. getMetadataContainer(MetadataType.CUSTOM, false). getMetadataValue(ContextConstant.Trace.EXTRA_TRACE_ATTRIBUTES); if (MetadataContextUtils.existMetadataValue(extraTraceAttributeObject)) { Map extraTraceAttributes = extraTraceAttributeObject.getObjectValue().get(); attributes.putAll(extraTraceAttributes); } + + Map transitiveCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + if (CollectionUtils.isNotEmpty(transitiveCustomAttributes)) { + for (Map.Entry entry : transitiveCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } + } + Map disposableCustomAttributes = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); + if (CollectionUtils.isNotEmpty(disposableCustomAttributes)) { + for (Map.Entry entry : disposableCustomAttributes.entrySet()) { + attributes.put("custom." + entry.getKey(), entry.getValue()); + } + } return attributes; } }