From 8b5f72e379d86ee8ae53d29ca382b91cee94645a Mon Sep 17 00:00:00 2001 From: Nepxion <1394997@qq.com> Date: Sun, 22 Dec 2019 11:22:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89Opentracing=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/StrategyOpentracingConstant.java | 1 + .../StrategyOpentracingOperation.java | 83 ++++++++++--------- ...itional-spring-configuration-metadata.json | 6 ++ ...OpenTracingProcessorSlotEntryCallback.java | 11 ++- .../constant/SentinelOpenTracingConstant.java | 3 + .../src/main/resources/bootstrap.properties | 2 + .../src/main/resources/bootstrap.properties | 2 + .../src/main/resources/bootstrap.properties | 2 + 8 files changed, 70 insertions(+), 40 deletions(-) diff --git a/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/constant/StrategyOpentracingConstant.java b/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/constant/StrategyOpentracingConstant.java index 99606017cb..44558646d3 100644 --- a/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/constant/StrategyOpentracingConstant.java +++ b/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/constant/StrategyOpentracingConstant.java @@ -14,4 +14,5 @@ public class StrategyOpentracingConstant { public static final String SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_ENABLED = "spring.application.strategy.trace.opentracing.enabled"; public static final String SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SEPARATE_SPAN_ENABLED = "spring.application.strategy.trace.opentracing.separate.span.enabled"; + public static final String SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_RULE_OUTPUT_ENABLED = "spring.application.strategy.trace.opentracing.rule.output.enabled"; } \ No newline at end of file diff --git a/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/operation/StrategyOpentracingOperation.java b/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/operation/StrategyOpentracingOperation.java index 36f174273b..3d00ae3b91 100644 --- a/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/operation/StrategyOpentracingOperation.java +++ b/discovery-plugin-strategy-opentracing/src/main/java/com/nepxion/discovery/plugin/opentracing/operation/StrategyOpentracingOperation.java @@ -47,6 +47,9 @@ public class StrategyOpentracingOperation { @Value("${" + StrategyOpentracingConstant.SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SEPARATE_SPAN_ENABLED + ":true}") protected Boolean traceOpentracingSeparateSpanEnabled; + @Value("${" + StrategyOpentracingConstant.SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_RULE_OUTPUT_ENABLED + ":false}") + protected Boolean traceOpentracingRuleOutputEnabled; + public void opentracingInitialize() { if (!traceOpentracingEnabled) { return; @@ -94,25 +97,27 @@ public void opentracingHeader(Map customizationMap) { span.setTag(DiscoveryConstant.N_D_SERVICE_REGION, strategyContextHolder.getHeader(DiscoveryConstant.N_D_SERVICE_REGION)); span.setTag(DiscoveryConstant.N_D_SERVICE_ENVIRONMENT, strategyContextHolder.getHeader(DiscoveryConstant.N_D_SERVICE_ENVIRONMENT)); - String routeVersion = strategyContextHolder.getHeader(DiscoveryConstant.N_D_VERSION); - if (StringUtils.isNotEmpty(routeVersion)) { - span.setTag(DiscoveryConstant.N_D_VERSION, routeVersion); - } - String routeRegion = strategyContextHolder.getHeader(DiscoveryConstant.N_D_REGION); - if (StringUtils.isNotEmpty(routeRegion)) { - span.setTag(DiscoveryConstant.N_D_REGION, routeRegion); - } - String routeAddress = strategyContextHolder.getHeader(DiscoveryConstant.N_D_ADDRESS); - if (StringUtils.isNotEmpty(routeAddress)) { - span.setTag(DiscoveryConstant.N_D_ADDRESS, routeAddress); - } - String routeVersionWeight = strategyContextHolder.getHeader(DiscoveryConstant.N_D_VERSION_WEIGHT); - if (StringUtils.isNotEmpty(routeVersionWeight)) { - span.setTag(DiscoveryConstant.N_D_VERSION_WEIGHT, routeVersionWeight); - } - String routeRegionWeight = strategyContextHolder.getHeader(DiscoveryConstant.N_D_REGION_WEIGHT); - if (StringUtils.isNotEmpty(routeRegionWeight)) { - span.setTag(DiscoveryConstant.N_D_REGION_WEIGHT, routeRegionWeight); + if (traceOpentracingRuleOutputEnabled) { + String routeVersion = strategyContextHolder.getHeader(DiscoveryConstant.N_D_VERSION); + if (StringUtils.isNotEmpty(routeVersion)) { + span.setTag(DiscoveryConstant.N_D_VERSION, routeVersion); + } + String routeRegion = strategyContextHolder.getHeader(DiscoveryConstant.N_D_REGION); + if (StringUtils.isNotEmpty(routeRegion)) { + span.setTag(DiscoveryConstant.N_D_REGION, routeRegion); + } + String routeAddress = strategyContextHolder.getHeader(DiscoveryConstant.N_D_ADDRESS); + if (StringUtils.isNotEmpty(routeAddress)) { + span.setTag(DiscoveryConstant.N_D_ADDRESS, routeAddress); + } + String routeVersionWeight = strategyContextHolder.getHeader(DiscoveryConstant.N_D_VERSION_WEIGHT); + if (StringUtils.isNotEmpty(routeVersionWeight)) { + span.setTag(DiscoveryConstant.N_D_VERSION_WEIGHT, routeVersionWeight); + } + String routeRegionWeight = strategyContextHolder.getHeader(DiscoveryConstant.N_D_REGION_WEIGHT); + if (StringUtils.isNotEmpty(routeRegionWeight)) { + span.setTag(DiscoveryConstant.N_D_REGION_WEIGHT, routeRegionWeight); + } } LOG.debug("Trace chain information outputs to Opentracing..."); @@ -152,25 +157,27 @@ public void opentracingLocal(String className, String methodName, Map { + private Boolean traceOpentracingSentinelRuleOutputEnabled = Boolean.valueOf(System.getProperty(SentinelOpenTracingConstant.SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SENTINEL_RULE_OUTPUT_ENABLED, "false")); + private Boolean traceOpentracingSentinelArgsOutputEnabled = Boolean.valueOf(System.getProperty(SentinelOpenTracingConstant.SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SENTINEL_ARGS_OUTPUT_ENABLED, "false")); + @Override public void onPass(Context context, ResourceWrapper resourceWrapper, DefaultNode param, int count, Object... args) throws Exception { @@ -38,11 +41,15 @@ public void onBlocked(BlockException e, Context context, ResourceWrapper resourc span.setTag(SentinelOpenTracingConstant.RESOURCE_TYPE, resourceWrapper.getResourceType()); span.setTag(SentinelOpenTracingConstant.ENTRY_TYPE, resourceWrapper.getEntryType().toString()); span.setTag(SentinelOpenTracingConstant.RULE_LIMIT_APP, e.getRuleLimitApp()); - span.setTag(SentinelOpenTracingConstant.RULE, e.getRule().toString()); + if (traceOpentracingSentinelRuleOutputEnabled) { + span.setTag(SentinelOpenTracingConstant.RULE, e.getRule().toString()); + } span.setTag(SentinelOpenTracingConstant.CAUSE, e.getClass().getName()); span.setTag(SentinelOpenTracingConstant.BLOCK_EXCEPTION, e.getMessage()); span.setTag(SentinelOpenTracingConstant.COUNT, count); - span.setTag(SentinelOpenTracingConstant.ARGS, JSON.toJSONString(args)); + if (traceOpentracingSentinelArgsOutputEnabled) { + span.setTag(SentinelOpenTracingConstant.ARGS, JSON.toJSONString(args)); + } span.finish(); } } \ No newline at end of file diff --git a/discovery-plugin-strategy-sentinel-starter-opentracing/src/main/java/com/nepxion/discovery/plugin/strategy/sentinel/opentracing/constant/SentinelOpenTracingConstant.java b/discovery-plugin-strategy-sentinel-starter-opentracing/src/main/java/com/nepxion/discovery/plugin/strategy/sentinel/opentracing/constant/SentinelOpenTracingConstant.java index d18c31201e..edd7c245f1 100644 --- a/discovery-plugin-strategy-sentinel-starter-opentracing/src/main/java/com/nepxion/discovery/plugin/strategy/sentinel/opentracing/constant/SentinelOpenTracingConstant.java +++ b/discovery-plugin-strategy-sentinel-starter-opentracing/src/main/java/com/nepxion/discovery/plugin/strategy/sentinel/opentracing/constant/SentinelOpenTracingConstant.java @@ -10,6 +10,9 @@ */ public class SentinelOpenTracingConstant { + public static final String SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SENTINEL_RULE_OUTPUT_ENABLED = "spring.application.strategy.trace.opentracing.sentinel.rule.output.enabled"; + public static final String SPRING_APPLICATION_STRATEGY_TRACE_OPENTRACING_SENTINEL_ARGS_OUTPUT_ENABLED = "spring.application.strategy.trace.opentracing.sentinel.args.output.enabled"; + public static final String SPAN_NAME = "SENTINEL"; public static final String ORIGIN = "origin"; public static final String ASYNC = "async"; diff --git a/discovery-springcloud-example-gateway/src/main/resources/bootstrap.properties b/discovery-springcloud-example-gateway/src/main/resources/bootstrap.properties index 4b2118bd5d..0f91db97fc 100644 --- a/discovery-springcloud-example-gateway/src/main/resources/bootstrap.properties +++ b/discovery-springcloud-example-gateway/src/main/resources/bootstrap.properties @@ -122,6 +122,8 @@ spring.application.strategy.trace.logger.enabled=true # spring.application.strategy.trace.opentracing.enabled=false # 启动和关闭调用链的灰度信息在Opentracing中以独立的Span节点输出,如果关闭,则灰度信息输出到原生的Span节点中。缺失则默认为true # spring.application.strategy.trace.opentracing.separate.span.enabled=true +# 启动和关闭调用链的灰度规则策略信息在Opentracing中的输出。缺失则默认为false +# spring.application.strategy.trace.opentracing.rule.output.enabled=false # 启动和关闭调用链的Debug日志打印,注意每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false spring.application.strategy.trace.debug.enabled=true # 开启Spring Cloud Gateway网关上实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失。缺失则默认为false diff --git a/discovery-springcloud-example-service/src/main/resources/bootstrap.properties b/discovery-springcloud-example-service/src/main/resources/bootstrap.properties index 9c5f7b717f..bfb56e6731 100644 --- a/discovery-springcloud-example-service/src/main/resources/bootstrap.properties +++ b/discovery-springcloud-example-service/src/main/resources/bootstrap.properties @@ -151,6 +151,8 @@ spring.application.strategy.trace.logger.enabled=true # spring.application.strategy.trace.opentracing.enabled=false # 启动和关闭调用链的灰度信息在Opentracing中以独立的Span节点输出,如果关闭,则灰度信息输出到原生的Span节点中。缺失则默认为true # spring.application.strategy.trace.opentracing.separate.span.enabled=true +# 启动和关闭调用链的灰度规则策略信息在Opentracing中的输出。缺失则默认为false +# spring.application.strategy.trace.opentracing.rule.output.enabled=false # 启动和关闭调用链的Debug日志打印,注意每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false spring.application.strategy.trace.debug.enabled=true # 开启服务端实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失。缺失则默认为false diff --git a/discovery-springcloud-example-zuul/src/main/resources/bootstrap.properties b/discovery-springcloud-example-zuul/src/main/resources/bootstrap.properties index 72bcc2e795..8227464b5e 100644 --- a/discovery-springcloud-example-zuul/src/main/resources/bootstrap.properties +++ b/discovery-springcloud-example-zuul/src/main/resources/bootstrap.properties @@ -122,6 +122,8 @@ spring.application.strategy.trace.logger.enabled=true # spring.application.strategy.trace.opentracing.enabled=false # 启动和关闭调用链的灰度信息在Opentracing中以独立的Span节点输出,如果关闭,则灰度信息输出到原生的Span节点中。缺失则默认为true # spring.application.strategy.trace.opentracing.separate.span.enabled=true +# 启动和关闭调用链的灰度规则策略信息在Opentracing中的输出。缺失则默认为false +# spring.application.strategy.trace.opentracing.rule.output.enabled=false # 启动和关闭调用链的Debug日志打印,注意每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false spring.application.strategy.trace.debug.enabled=true # 开启Zuul网关上实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失。缺失则默认为false