1. context gw 设置额外 trace attribute

2. enhancedRequestContext 增加命名空间
pull/1664/head
shedfreewu 2 months ago
parent f83909edc4
commit 80cc693889

@ -62,4 +62,15 @@ public final class ContextConstant {
}
}
public static final class Trace {
/**
* EXTRA_TRACE_ATTRIBUTES.
*/
public static final String EXTRA_TRACE_ATTRIBUTES = "EXTRA_TRACE_ATTRIBUTES";
private Trace() {
}
}
}

@ -56,7 +56,7 @@ public class OrderConstant {
/**
* Order of encode router label interceptor.
*/
public static final int ROUTER_LABEL_INTERCEPTOR_ORDER = Ordered.LOWEST_PRECEDENCE;
public static final int ROUTER_LABEL_INTERCEPTOR_ORDER = 0;
}
/**

@ -0,0 +1,49 @@
/*
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
*
* Copyright (C) 2021 Tencent. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.tencent.cloud.common.util;
import java.util.Optional;
import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.polaris.metadata.core.MetadataObjectValue;
import com.tencent.polaris.metadata.core.MetadataType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Utils for MetadataContext.
*
* @author Shedfree Wu
*/
public final class MetadataContextUtils {
private static final Logger LOG = LoggerFactory.getLogger(MetadataContextUtils.class);
private MetadataContextUtils() {
}
public static void putMetadataObjectValue(String key, Object value) {
MetadataContextHolder.get().getMetadataContainer(MetadataType.APPLICATION, true).
putMetadataObjectValue(key, value);
}
public static boolean existMetadataValue(MetadataObjectValue<?> metadataObjectValue) {
return Optional.ofNullable(metadataObjectValue).map(MetadataObjectValue::getObjectValue).
map(Optional::isPresent).orElse(false);
}
}

@ -28,9 +28,11 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.tencent.cloud.common.constant.ContextConstant;
import com.tencent.cloud.common.constant.MetadataConstant;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.common.util.MetadataContextUtils;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.tsf.gateway.core.TsfGatewayRequest;
@ -240,6 +242,7 @@ public class ContextGatewayFilter implements GatewayFilter, Ordered {
throw NotFoundException.create(true, msg);
}
updateRouteMetadata(exchange, contextRoute);
setTraceAttributes(contextRoute, GatewayConstant.NON_UNIT_TYPE, GatewayConstant.NON_UNIT_TRANSFER_TYPE);
exchange.getAttributes().put(GatewayConstant.CONTEXT_ROUTE, contextRoute);
URI requestUri = URI.create(contextRoute.getHost() + apis[1]);
@ -261,6 +264,7 @@ public class ContextGatewayFilter implements GatewayFilter, Ordered {
throw NotFoundException.create(true, msg);
}
updateRouteMetadata(exchange, contextRoute);
setTraceAttributes(contextRoute, GatewayConstant.NON_UNIT_TYPE, GatewayConstant.NON_UNIT_TRANSFER_TYPE);
exchange.getAttributes().put(GatewayConstant.CONTEXT_ROUTE, contextRoute);
MetadataContext metadataContext = exchange.getAttribute(
@ -488,4 +492,22 @@ public class ContextGatewayFilter implements GatewayFilter, Ordered {
throw new IllegalStateException("Invalid URI query: \"" + query + "\"");
}
}
private void setTraceAttributes(GroupContext.ContextRoute contextRoute, String unitType, String unitTransferType) {
Map<String, String> traceAttributes = new HashMap<>();
traceAttributes.put("tsf-ms-type", "MSGW");
traceAttributes.put("tsf-unit-type", unitType);
traceAttributes.put("tsf-unit-transfer-type", unitTransferType);
traceAttributes.put("destination.namespace-id", contextRoute.getNamespaceId());
traceAttributes.put("tsf-msgw-group", config.getGroup());
traceAttributes.put("tsf-msgw-groupApi", contextRoute.getApiId());
traceAttributes.put("tsf-msgw-apiPath", contextRoute.getPath());
traceAttributes.put("tsf-msgw-apiMethod", contextRoute.getMethod());
traceAttributes.put("tsf-msgw-namespaceName", contextRoute.getNamespace());
traceAttributes.put("tsf-msgw-serviceName", contextRoute.getService());
traceAttributes.put("localComponent", "msgw");
MetadataContextUtils.putMetadataObjectValue(ContextConstant.Trace.EXTRA_TRACE_ATTRIBUTES, traceAttributes);
}
}

@ -74,6 +74,22 @@ public final class GatewayConstant {
* Gateway .
*/
public static final String GATEWAY_REPO_PREFIX = GATEWAY_REPO_ROOT + "/tsf/gateway/";
/**
* NON_UNIT_TYPE.
*/
public static final String NON_UNIT_TYPE = "non-unit";
/**
* NON_UNIT_TRANSFER_TYPE.
*/
public static final String NON_UNIT_TRANSFER_TYPE = "non-unit";
/**
* UNIT_TYPE.
*/
public static final String UNIT_TYPE = "unit";
/**
* UNIT_TRANSFER_TYPE.
*/
public static final String UNIT_TRANSFER_TYPE = "ms_unit_proxy";
private GatewayConstant() {

@ -20,10 +20,15 @@ package com.tencent.cloud.plugin.trace.attribute.tsf;
import java.util.HashMap;
import java.util.Map;
import com.tencent.cloud.common.constant.ContextConstant;
import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.common.util.MetadataContextUtils;
import com.tencent.cloud.plugin.trace.attribute.SpanAttributesProvider;
import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.metadata.core.MetadataObjectValue;
import com.tencent.polaris.metadata.core.MetadataType;
import com.tencent.polaris.metadata.core.constant.TsfMetadataConstants;
import org.springframework.cloud.client.ServiceInstance;
@ -54,6 +59,14 @@ public class TsfSpanAttributesProvider implements SpanAttributesProvider {
if (StringUtils.isBlank(attributes.get("remote.namespace-id"))) {
attributes.put("remote.namespace-id", context.getRequest().getGovernanceNamespace());
}
MetadataObjectValue<Map<String, String>> extraTraceAttributeObject = MetadataContextHolder.get().
getMetadataContainer(MetadataType.APPLICATION, true).
getMetadataValue(ContextConstant.Trace.EXTRA_TRACE_ATTRIBUTES);
if (MetadataContextUtils.existMetadataValue(extraTraceAttributeObject)) {
Map<String, String> extraTraceAttributes = extraTraceAttributeObject.getObjectValue().get();
attributes.putAll(extraTraceAttributes);
}
return attributes;
}
}

@ -21,6 +21,8 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Optional;
import com.tencent.cloud.common.constant.MetadataConstant;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext;
import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner;
@ -56,11 +58,15 @@ public class EnhancedWebClientExchangeFilterFunction implements ExchangeFilterFu
public Mono<ClientResponse> filter(ClientRequest originRequest, ExchangeFunction next) {
EnhancedPluginContext enhancedPluginContext = new EnhancedPluginContext();
String governanceNamespace = MetadataContextHolder.get().getContext(MetadataContext.FRAGMENT_APPLICATION_NONE,
MetadataConstant.POLARIS_TARGET_NAMESPACE, MetadataContext.LOCAL_NAMESPACE);
EnhancedRequestContext enhancedRequestContext = EnhancedRequestContext.builder()
.httpHeaders(originRequest.headers())
.httpMethod(originRequest.method())
.url(originRequest.url())
.serviceUrl(getServiceUri(originRequest))
.governanceNamespace(governanceNamespace)
.build();
enhancedPluginContext.setRequest(enhancedRequestContext);
enhancedPluginContext.setOriginRequest(originRequest);

Loading…
Cancel
Save