java B2B2C Springboot多租户电子商城系统-分布式服务跟踪(抽样收集)

经过Trace ID和Span ID已经实现了对分布式系统中的请求跟踪,而这些记录的跟踪信息最终会被分析系统收集起来,并用来实现对分布式系统的监控和分析功能,好比:预警延迟过长的请求链路、查询请求链路的调用明细等。此时,咱们在对接分析系统时就会碰到一个问题:分析系统在收集跟踪信息的时候,须要收集多少许的跟踪信息才合适呢?html

须要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码:壹零叁八柒柒肆六二六java

理论上来讲,咱们收集的跟踪信息越多就能够更好的反映出系统的实际运行状况,并给出更精准的预警和分析,可是在高并发的分布式系统运行时,大量的请求调用会产生海量的跟踪日志信息,若是咱们收集过多的跟踪信息将会对咱们整个分布式系统的性能形成必定的影响,同时保存大量的日志信息也须要很多的存储开销。因此,在Sleuth中采用了抽象收集的方式来为跟踪信息打上收集标记,也就是咱们以前在日志信息中看到的第四个boolean类型的值,它表明了该信息是否要被后续的跟踪信息收集器获取和存储。spring

在Sleuth中的抽样收集策略是经过Sampler接口实现的,它的定义以下:bash

public interface Sampler {
    /**
     * @return true if the span is not null and should be exported to the tracing system
    */
    boolean isSampled(Span span);
}
复制代码

经过实现isSampled方法,Spring Cloud Sleuth会在产生跟踪信息的时候调用它来为跟踪信息生成是否要被收集的标志。须要注意的是,即便isSampled返回了false,它仅表明该跟踪信息不被输出到后续对接的远程分析系统(好比:Zipkin),对于请求的跟踪活动依然会进行,因此咱们在日志中仍是能看到收集标识为false的记录。mybatis

默认状况下,Sleuth会使用PercentageBasedSampler实现的抽样策略,以请求百分比的方式配置和收集跟踪信息,咱们能够经过在application.properties中配置下面的参数对其百分比值进行设置,它的默认值为0.1,表明收集10%的请求跟踪信息。并发

spring.sleuth.sampler.percentage=0.1mvc

在开发调试期间,一般会收集所有跟踪信息输出到远程仓库,咱们能够将其值设置为1,或者也能够经过建立AlwaysSampler的Bean(它实现的isSampled方法始终返回true)来覆盖默认的PercentageBasedSampler策略,好比:app

@Bean
public AlwaysSampler defaultSampler() {
    return new AlwaysSampler();
}
复制代码

在实际使用时,经过与Span对象中存储信息的配合,咱们能够根据实际状况作出更贴近需求的抽样策略,好比实现一个仅对包含指定Tag的抽样策略:分布式

public class TagSampler implements Sampler {

    private String tag;

    public TagSampler(String tag) {
        this.tag = tag;
    }

    @Override
    public boolean isSampled(Span span) {
        return span.tags().get(tag) != null;
    }
}
复制代码

因为跟踪日志信息的数据价值每每仅在最近的一段时间内很是有用,好比:一周。那么咱们在设计抽样策略时,主要考虑在不对系统形成明显性能影响的状况下,以在日志保留时间窗内充分利用存储空间的原则来实现抽样策略。ide

java B2B2C springmvc mybatis多租户电子商城系统

相关文章
相关标签/搜索