内容简介:采样可用于减少收集和报告的进程外数据,如果未对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)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【R语言实用技巧】随机排序、随机抽样与分层抽样
- Hive 的数据抽样
- R语言进行随机抽样sampling
- [Vue 2.x Todo 教程练习参考答案] 标为完成练习参考答案
- [Vue 2.x Todo 教程练习参考答案] 添加todo练习参考答案
- MyOIDC v1.1.0 发布,基于 OIDC 协议的参考实现,根据各类库提供实现参考
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective Objective-C 2.0
Matt Galloway / 爱飞翔 / 机械工业出版社 / 2014-1 / 69.00元
《effective objective-c 2.0:编写高质量ios与os x代码的52个有效方法》是世界级c++开发大师scott meyers亲自担当顾问编辑的“effective software development series”系列丛书中的新作,amazon全五星评价。从语法、接口与api设计、内存管理、框架等7大方面总结和探讨了objective-c编程中52个鲜为人知和容易被忽......一起来看看 《Effective Objective-C 2.0》 这本书的介绍吧!