首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧启动,侦察,OTEL,和蜂窝

弹簧启动,侦察,OTEL,和蜂窝
EN

Stack Overflow用户
提问于 2022-07-18 14:54:07
回答 1查看 244关注 0票数 0

我有一个场景,在这个场景中,Spring与OTEL集成,并传送到Honeycomb.io。我试图在每个跟踪中添加一个环境标记。我创建了一个类:

代码语言:javascript
复制
@Component
public class EnvironmentSpanProcessor implements SpanProcessor {

  @Value("${ENVIRONMENT")
  private String environment;

  Queue<SpanData> spans = new LinkedBlockingQueue<>(50);

  @Override
  public void onStart(Context context, ReadWriteSpan readWriteSpan) {
    readWriteSpan.setAttribute("env", environment);
  }

  @Override
  public boolean isStartRequired() {
    return false;
  }

  @Override
  public void onEnd(ReadableSpan readableSpan) {
    this.spans.add(readableSpan.toSpanData());
  }

  @Override
  public boolean isEndRequired() {
    return true;
  }
}

我在这个类中设置了断点,即使在执行器中可以看到bean,它们也不会在启动时命中。我在以下几个方面设置了断点:

代码语言:javascript
复制
SdkTracerProvider otelTracerProvider(SpanLimits spanLimits, ObjectProvider<List<SpanProcessor>> spanProcessors,
            SpanExporterCustomizer spanExporterCustomizer, ObjectProvider<List<SpanExporter>> spanExporters,
            Sampler sampler, Resource resource, SpanProcessorProvider spanProcessorProvider) {
        SdkTracerProviderBuilder sdkTracerProviderBuilder = SdkTracerProvider.builder().setResource(resource)
                .setSampler(sampler).setSpanLimits(spanLimits);
        List<SpanProcessor> processors = spanProcessors.getIfAvailable(ArrayList::new);
        processors.addAll(spanExporters.getIfAvailable(ArrayList::new).stream()
                .map(e -> spanProcessorProvider.toSpanProcessor(spanExporterCustomizer.customize(e)))
                .collect(Collectors.toList()));
        processors.forEach(sdkTracerProviderBuilder::addSpanProcessor);
        return sdkTracerProviderBuilder.build();
    }

在OtelAutoConfiguration,我也没有看到他们在启动时就被解雇了。

我的pom.xml相关部分是:

代码语言:javascript
复制
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-sleuth-brave</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-sleuth-otel-autoconfigure</artifactId>
    </dependency>
    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-exporter-otlp</artifactId>
    </dependency>
    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-extension-trace-propagators</artifactId>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-netty-shaded</artifactId>
      <version>1.47.0</version>
    </dependency>

和我来自application.yaml的配置

代码语言:javascript
复制
sleuth:
    enabled: true
    web:
      additional-skip-pattern: /readiness|/liveness
      client.skip-pattern: /readiness
    sampler:
      probability: 1.0
      rate: 100
    propagation:
      type: OT_TRACER
    otel:
      config:
        trace-id-ratio-based: 1.0
      log.exporter.enabled: true
      exporter:
        otlp:
          endpoint: https://api.honeycomb.io
          headers:
            x-honeycomb-team: ${TELEMETRY_API_KEY}
            x-honeycomb-dataset: app-telemetry
        sleuth-span-filter:
          enabled: true
      resource:
        enabled: true

我得到的跟踪,所以它似乎系统本身是工作的,但我不能得到我的env标签。

先发制人地感谢@marcingrzejszczak到目前为止对我的主旨的帮助:https://gist.github.com/fpmoles/b880ccfdef2d2138169ed398e87ec396

EN

回答 1

Stack Overflow用户

发布于 2022-07-19 09:53:23

我不知道为什么span处理器没有被Spring捕获并添加到向跟踪器提供者注册的处理器列表中。

与环境一样,设置进程一致性值的另一种方法是将其设置为资源属性。这是更可取的,因为它是设置一次,并交付每批发送到配置后端的跨度(如蜂窝)。使用span处理器将相同的属性添加到每个span。

这可以通过几种不同的方式来完成:

代码语言:javascript
复制
resource.setAttribute("environment", "${environment}");

FYI蜂窝有OTel Java &代理发行版帮助简化发送数据,减少所需的配置,并设置合理的默认设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73024352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档