我正在尝试将我的应用程序与Spring sleuth集成。 我能够成功整合,我可以看到跨越出口到Zipkin 我正在通过http导出zipkin。
Spring boot version - 1.5.10.RELEASE
侦探 - 1.3.2.RELEASE
Cloud-Edgware.SR2
但是现在我需要以更加可控的方式执行此操作,因为应用程序已经在生产中运行,并且人们害怕通过在方法上添加@NewSpan来获得侦探所带来的开销。
我需要决定运行时是否应该添加Trace(不谈论导出)。像执行器一样,跟踪根本没有添加。我认为这对应用程序没有任何开销。 X-B3-Sampled = 0 不会导出但添加跟踪信息。类似于skipPattern属性但在运行时。
如果服务超过特定阈值或出现异常,请始终导出跟踪。
如果我没有将Spans导出到zipkin,那么通过跟踪信息会有任何开销吗?
此解决方案怎么样?我想这可以在运行时对特定请求进行采样。
@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;
}
};
}
答案 0 :(得分:0)
通过在方法上添加@NewSpan,人们害怕侦探的开销。
他们是否有关于开销的任何信息?他们是否打开它,应用程序开始显着滞后?他们害怕什么?这是一个高频交易应用程序,你在每微秒计数吗?
我需要决定运行时是否应该添加Trace(不谈论导出)。像执行器一样,跟踪根本没有添加。我认为这对应用程序没有任何开销。放X-B3-Sampled = 0不会导出但添加跟踪信息。类似于skipPattern属性但在运行时。
我认为这不可行。通过添加拦截器,方面等来设置检测。它们在应用程序初始化时启动。
如果服务超过特定阈值或异常情况,则始终导出跟踪。
使用新的Brave示踪仪器(Sleuth 2.0.0),您将能够以更轻松的方式完成这项工作。在此版本之前,您必须实现自己的SpanReporter
版本来验证标记(如果它包含error
标记),如果是这种情况,请将其发送到zipkin,否则不会。< / p>
如果我没有将Spans导出到zipkin,那么通过跟踪信息会有任何开销吗?
是的,您需要传递跟踪数据。但是,开销很小。