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)。


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

查看所有标签

猜你喜欢:

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

JavaScript & jQuery交互式Web前端开发

JavaScript & jQuery交互式Web前端开发

[美]达克特(Duckett,J.) / 杜伟、柴晓伟、涂曙光 / 清华大学出版社 / 2015-6-9 / 79.80元

欢迎选择一种更高效的学习JavaScript和jQuery的方式。 你是一名JavaScript新手?或是您曾经向自己的Web页面上添加过一些脚本,但想以一种更好的方式来实现它们?本书非常适合您。本书不仅向您展示如何阅读和编写JavaScript代码,同时还会以一种简单且视觉化的方式,教您有关计算机编程的基础知识。阅读本书之前,您只需要对HTML和CSS有一些了解即可。 通过将编程理论......一起来看看 《JavaScript & jQuery交互式Web前端开发》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

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

Markdown 在线编辑器