Spring Cloud Sleuth 过滤无意义的调用跟踪

Sleuth是SpringCloud中常用的服务跟踪分析方式,但在以下场景中会记录大量无意义的跟踪信息。

微服务应用在集成spring admin client 后,默认设置会每10秒去想admin server 注册一次,这个时候sleuth上就会采集到很多admin注册的web调用,这些调用对于微服务跟踪是无意义的。

通过Sleuth文档

http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.1.RELEASE/multi/multi__customizations.html#_http

发现可以通过自定ClientSampler来过滤某些请求追踪。

通过分析TraceHttpAutoConfiguration源码发现其中有如下代码

	@Bean
	@ConditionalOnMissingBean(name = ClientSampler.NAME)
	HttpSampler sleuthClientSampler() {
		return HttpSampler.TRACE_ID;
	}

即如果不定义ClientSampler则使用默认的 HttpSampler.TRACE_ID记录全部web调用跟踪。

Sleuth中的@ClientSampler标注可以解决这个问题,把以下代码加入项目就可以通过配置来定义需要过滤的客户端调用

@RefreshScope
@Component
@ClientSampler
@ConditionalOnProperty("sleuth.client.skipPattern")
public class DemoSampler extends HttpSampler
{

	@Value("${sleuth.client.skipPattern}")
	private String skipPattern;

	@Override
	public  Boolean trySample(HttpAdapter adapter, Req request)
	{
		String path = adapter.path(request);
		if (skipPattern.contains(path))
			return false;
		return null;
	}

}

把admin client的注册调用“/instances”加入过滤配置,就可以在sleuth中过滤这些无意义的调用追踪了。

你可能感兴趣的:(微服务,sleuth,微服务)