我有一个反应性的SpringBoot网络应用程序。这个应用程序使用从Elasticsearch请求数据。应用程序被配置为使用Jaeger跟踪器来监视API请求。
Jaeger工作正常,除了Elasticsearch请求--它们不会出现在跟踪的嵌套范围中。任何其他网络请求都会出现。
我有以下gradle.build配置:
gradle.build:
springBootVersion = '2.4.2'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-reactor-netty'
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'io.opentracing.contrib:opentracing-spring-jaeger-web-starter:2.0.3'
implementation 'io.opentracing.contrib:opentracing-elasticsearch7-client:0.1.2'
application.yml
spring:
data:
elasticsearch:
client:
reactive:
endpoints:
- localhost:9200jaeger run命令:
docker run -d --name jaeger -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14268:14268 -p 14250:14250 -p 9411:9411 jaegertracing/all-in-one:latest有没有人想过为什么Jaeger不跨越elasticsearch请求?
发布于 2021-07-15 12:56:14
这里有一个可行的解决方案。我们需要
Tracer和Tracer@Configuration @RequiredArgsConstructor公共类ElasticSearchClientConfiguration实现ErrorLogging {私有最终跟踪器属性;私有最终跟踪器跟踪器;私有最终列表spanDecorators;@Bean public ClientConfiguration clientConfiguration() ({ElasticSearchClientConfiguration builder = ClientConfiguration.builder().connectedTo(properties.getEndpoints().toArray(new String));configureWebClient(构建器);返回builder.build();}私有空configureWebClient(ClientConfiguration.TerminalClientConfigurationBuilder构造器){ builder.withWebClientConfigurer( webClient -> webClient .mutate() .filters(addTraceExchangeFilterFunctionIfNotPresent()) .build());}私有Consumer addTraceExchangeFilterFunctionIfNotPresent() {返回函数-> { if (functions.stream() .noneMatch(Function->functions.stream)){functions.add(跟踪器,TracingExchangeFilterFunction));}
https://stackoverflow.com/questions/67721987
复制相似问题