资讯专栏INFORMATION COLUMN

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

yuxue / 3350人阅读

摘要:抽样采样可用于减少收集和报告的进程外数据,如果未对进行抽样,则不会增加任何开销。默认情况下,全局抽样器将单个速率应用于所有跟踪的操作,控制此设置,默认为跟踪每个请求。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74371.html

相关文章

  • Spring Cloud 参考文档Spring Cloud Sleuth特性)

    摘要:介绍从版本开始,使用作为追踪库,为方便起见,在此处嵌入了的部分文档。具有一个上下文,其中包含标识符,该标识符将放置在表示分布式操作的树中的正确位置。追踪通常由拦截器自动完成,在幕后,他们添加与他们在操作中的角色相关的标签和事件。 Spring Cloud Sleuth特性 将trace和span ID添加到Slf4J MDC,因此你可以在日志聚合器中从给定的trace或span提取...

    chinafgj 评论0 收藏0
  • Spring Cloud 参考文档Spring Cloud Sleuth介绍)

    摘要:那个配置文件将来自应用程序的信息以格式记录到文件中。以下清单显示了使用的集成测试设置代码添加到项目本节介绍如何使用或将添加到项目中。以下示例显示了如何为执行此操作建议你通过添加依赖关系管理,这样你就无需自行管理版本。 Spring Cloud Sleuth介绍 Spring Cloud Sleuth为Spring Cloud实现了分布式追踪解决方案。 术语 Spring Cloud S...

    impig33 评论0 收藏0
  • springboot+zipkin+docker实例

    摘要:脚本位置依赖内采样率,默认即如需测试时每次都看到则修改为,但对性能有影响,注意上线时修改为合理值运行查询参考规范推荐推荐谷歌的大规模分布式跟踪系统分布式服务的 zipkin-server pom io.zipkin zipkin-ui 1.39.3 or...

    Wuv1Up 评论0 收藏0
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+g

    摘要:一系列组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表表格和地图中可视化数据。 快速构建spring-cloud + sleuth + rabbit + zipkin + es + kibana + grafana日志跟踪平台 简介 Spring-Cloud-Sleuth Spring-Cloud-...

    DesGemini 评论0 收藏0

发表评论

0条评论

yuxue

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<