Spring Cloud 参考文档(Spring Cloud Sleuth抽样)

栏目: Java · 发布时间: 5年前

内容简介:采样可用于减少收集和报告的进程外数据,如果未对span进行抽样,则不会增加任何开销(noop)。抽样是一个前期决策,这意味着报告数据的决定是在trace中的第一个操作中做出的,并且该决策是向下游传播的。默认情况下,全局抽样器将单个速率应用于所有跟踪的操作,

Spring Cloud Sleuth抽样

采样可用于减少收集和报告的进程外数据,如果未对span进行抽样,则不会增加任何开销(noop)。

抽样是一个前期决策,这意味着报告数据的决定是在trace中的第一个操作中做出的,并且该决策是向下游传播的。

默认情况下,全局抽样器将单个速率应用于所有跟踪的操作, Tracer.Builder.sampler 控制此设置,默认为跟踪每个请求。

声明性抽样

某些应用程序需要根据 java 方法的类型或注解进行采样。

大多数用户使用框架拦截器来自动执行此类策略,以下示例显示了内部可能如何工作:

@Autowired Tracer tracer;

// derives a sample rate from an annotation on a java method
DeclarativeSampler<Traced> sampler = DeclarativeSampler.create(Traced::sampleRate);

@Around("@annotation(traced)")
public Object traceThing(ProceedingJoinPoint pjp, Traced traced) throws Throwable {
  // When there is no trace in progress, this decides using an annotation
  Sampler decideUsingAnnotation = declarativeSampler.toSampler(traced);
  Tracer tracer = tracer.withSampler(decideUsingAnnotation);

  // This code looks the same as if there was no declarative override
  ScopedSpan span = tracer.startScopedSpan(spanName(pjp));
  try {
    return pjp.proceed();
  } catch (RuntimeException | Error e) {
    span.error(e);
    throw e;
  } finally {
    span.finish();
  }
}

定制抽样

根据操作的不同,末可能希望应用不同的策略,例如,你可能不希望跟踪对静态资源(如图像)的请求,或者你可能希望跟踪对新api的所有请求。

大多数用户使用框架拦截器来自动执行此类策略,以下示例显示了内部可能如何工作:

@Autowired Tracer tracer;
@Autowired Sampler fallback;

Span nextSpan(final Request input) {
  Sampler requestBased = Sampler() {
    @Override public boolean isSampled(long traceId) {
      if (input.url().startsWith("/experimental")) {
        return true;
      } else if (input.url().startsWith("/static")) {
        return false;
      }
      return fallback.isSampled(traceId);
    }
  };
  return tracer.withSampler(requestBased).nextSpan();
}

Spring Cloud Sleuth中的采样

默认情况下,Spring Cloud Sleuth将所有span设置为不可导出,这意味着trace显示在日志中,但不显示在任何远程存储中,对于测试,默认值通常就足够了,如果你只使用日志(例如,使用ELK聚合器),它可能就是你所需要的全部内容。如果将span数据导出到Zipkin,还有一个 Sampler.ALWAYS_SAMPLE 设置可以导出所有内容,还有一个 ProbabilityBasedSampler 设置可以对固定比例的span进行采样。

如果你使用 spring-cloud-sleuth-zipkin ,则 ProbabilityBasedSampler 是默认值,您可以通过设置 spring.sleuth.sampler.probability 来配置导出,传递的值必须是从0.0到1.0的双精度值。

可以通过创建bean定义来安装采样器,如以下示例所示:

@Bean
public Sampler defaultSampler() {
    return Sampler.ALWAYS_SAMPLE;
}

你可以将HTTP header X-B3-Flags 设置为 1 ,或者在进行消息传递时,可以将 spanFlags header设置为 1 ,这样做会强制导出当前span,而不管采样决策如何。

为了使用速率限制采样器,请设置 spring.sleuth.sampler.rate 属性以选择每秒间隔接受的trace量,最小数字为 0 ,最大值为2,147,483,647(最大int)。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective JavaScript

Effective JavaScript

David Herman / Addison-Wesley Professional / 2012-12-6 / USD 39.99

"It's uncommon to have a programming language wonk who can speak in such comfortable and friendly language as David does. His walk through the syntax and semantics of JavaScript is both charming and h......一起来看看 《Effective JavaScript》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器