内容简介:采样可用于减少收集和报告的进程外数据,如果未对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 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》 这本书的介绍吧!