Spring sleuth运行时采样和跟踪决策

时间:2018-02-19 20:33:47

标签: spring-cloud-sleuth

我正在尝试将我的应用程序与Spring sleuth集成。 我能够成功整合,我可以看到跨越出口到Zipkin 我正在通过http导出zipkin。

Spring boot version - 1.5.10.RELEASE
侦探 - 1.3.2.RELEASE
Cloud-Edgware.SR2

但是现在我需要以更加可控的方式执行此操作,因为应用程序已经在生产中运行,并且人们害怕通过在方法上添加@NewSpan来获得侦探所带来的开销。

  1. 我需要决定运行时是否应该添加Trace(不谈论导出)。像执行器一样,跟踪根本没有添加。我认为这对应用程序没有任何开销。 X-B3-Sampled = 0 不会导出但添加跟踪信息。类似于skipPattern属性但在运行时。

  2. 如果服务超过特定阈值或出现异常,请始终导出跟踪。

  3. 如果我没有将Spans导出到zipkin,那么通过跟踪信息会有任何开销吗?

  4. 此解决方案怎么样?我想这可以在运行时对特定请求进行采样。

        @Bean
        public Sampler customSampler(){
        return new Sampler() {
            @Override
            public boolean isSampled(Span span) {
                logger.info("Inside sampling "+span.getTraceId());
                HttpServletRequest httpServletRequest=HttpUtils.getRequest();
                if(httpServletRequest!=null && httpServletRequest.getServletPath().startsWith("/test")){
                    return true;
                }else
                    return false;
    
            }
        };
    }
    

1 个答案:

答案 0 :(得分:0)

  通过在方法上添加@NewSpan,人们害怕侦探的开销。

他们是否有关于开销的任何信息?他们是否打开它,应用程序开始显着滞后?他们害怕什么?这是一个高频交易应用程序,你在每微秒计数吗?

  

我需要决定运行时是否应该添加Trace(不谈论导出)。像执行器一样,跟踪根本没有添加。我认为这对应用程序没有任何开销。放X-B3-Sampled = 0不会导出但添加跟踪信息。类似于skipPattern属性但在运行时。

我认为这不可行。通过添加拦截器,方面等来设置检测。它们在应用程序初始化时启动。

  

如果服务超过特定阈值或异常情况,则始终导出跟踪。

使用新的Brave示踪仪器(Sleuth 2.0.0),您将能够以更轻松的方式完成这项工作。在此版本之前,您必须实现自己的SpanReporter版本来验证标记(如果它包含error标记),如果是这种情况,请将其发送到zipkin,否则不会。< / p>

  

如果我没有将Spans导出到zipkin,那么通过跟踪信息会有任何开销吗?

是的,您需要传递跟踪数据。但是,开销很小。

相关问题