我们正在注册HystrixConcurrencyStrategy将所有Callable实例包装到他们的Sleuth代表 -TraceCallable中的定制。该策略是启动或继续跨越,这取决于调用Hystrix命令之前跟踪是否已经进行的事实。要禁用自定义Hystrix并发策略,将spring.sleuth.hystrix.strategy.enabled设置为false。
手动命令设置
假设您有以下HystrixCommand:
HystrixCommand<String> hystrixCommand = new HystrixCommand<String>(setter) {
@Override
protected String run() throws Exception {
return someLogic();
}
};
为了传递跟踪信息,您必须在HystrixCommand的HystrixCommand的Sleuth版本中包装相同的逻辑:
TraceCommand<String> traceCommand = new TraceCommand<String>(tracer, traceKeys, setter) {
@Override
public String doRun() throws Exception {
return someLogic();
}
};
RxJava
我们正在注册RxJavaSchedulersHook将所有Action0实例包装到他们的Sleuth代表 -TraceAction中的定制。钩子起动或继续一个跨度取决于跟踪在Action被安排之前是否已经进行的事实。要禁用自定义RxJavaSchedulersHook,将spring.sleuth.rxjava.schedulers.hook.enabled设置为false。
您可以定义线程名称的正则表达式列表,您不希望创建一个Span。只需在spring.sleuth.rxjava.schedulers.ignoredthreads属性中提供逗号分隔的正则表达式列表。
HTTP集成
可以通过提供值等于false的spring.sleuth.web.enabled属性来禁用此部分的功能。
HTTP过滤器
通过TraceFilter所有采样的进入请求导致创建Span。Span的名称是http:+发送请求的路径。例如,如果请求已发送到/foo/bar,则该名称将为http:/foo/bar。您可以通过spring.sleuth.web.skipPattern属性配置要跳过的URI。如果您在类路径上有ManagementServerProperties,则其值contextPath将附加到提供的跳过模式。
的HandlerInterceptor
由于我们希望跨度名称是精确的,我们使用的TraceHandlerInterceptor包装现有的HandlerInterceptor,或直接添加到现有的HandlerInterceptors列表中。TraceHandlerInterceptor向给定的HttpServletRequest添加了一个特殊请求属性。如果TraceFilter没有看到此属性集,它将创建一个“后备”跨度,这是在服务器端创建的一个额外的跨度,以便在UI中正确显示跟踪。看到最有可能意味着有一个缺失的仪器。在这种情况下,请在Spring Cloud Sleuth中提出问题。
异步Servlet支持
如果您的控制器返回Callable或WebAsyncTaskSpring Cloud,Sleuth将继续现有的跨度,而不是创建一个新的跨度。