我正在尝试用一个取样器(-Dotel.traces.sampler=parentbased_always_off)建立一个开放的遥测系统。它的作用是:
Span span = tracer.spanBuilder("span").startSpan()没有记录的样本。
现在,我尝试手动启动示例,以便只在一些通过编程决定的情况下记录跟踪。问题是,我无法在api中找到允许我这样做的方法。startSpan调用总是被忽略。
我怎样才能强制开始跟踪记录?
换句话说:我如何以编程的方式决定记录的跨度和不记录的跨度?例如,我希望只对某些特定用户进行记录跟踪,而不是全部。
发布于 2022-02-16 08:26:30
据我所知,您正在寻找一种方式来定制抽样行为,以决定是否记录span。Opentelemetry使您能够通过实现您自己的Sampler来扩展它。
假设您不想记录带有名称溢出和rest的任何span。您的实现应该是这样的。
package io.opentelemetry.sdk.extension.trace.mycustom.sampler;
...
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.trace.data.LinkData;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
import io.opentelemetry.sdk.trace.sampler.SamplingDecision;
...
public final class MyCustomSampler implements Sampler {
...
@Override
public SamplingResult shouldSample(
Context parentContext,
String traceId,
String name,
SpanKind spanKind,
Attributes attributes,
List<LinkData> parentLinks) {
// your logic goes here
return name == "overflow" ? SamplingResult.drop() : SamplingResult.recordAndSample();
}
@Override
public String getDescription() {
return "MyCustomSampler";
}
}https://stackoverflow.com/questions/71131504
复制相似问题