We have Sleuth enabled on all endpoints Spring 2.7.x ( that comes out of the box). Just plain and simple traceId/spanId tracking. Now as in Spring Sleuth is no more available in Spring Boot 3.0.0. Is there a way to enable this new Observation Api on all endpoints.
Before had this:
/*
List all beers in database
*/
public Mono<ServerResponse> listBeer() {
return beerService.listBeers(null, null, PageRequest.ofSize(50), true)
.flatMap(beerDto -> ServerResponse.ok().bodyValue(beerDto))
.switchIfEmpty(ServerResponse.notFound().build());
}
Now with new Api in every endpoint need to do this:
/*
List all beers in database
*/
public Mono<ServerResponse> listBeer() {
Observation observation = Observation.start("listBeer-sample", observationRegistry);
return Mono.just(observation).flatMap(span -> {
observation.scoped(() -> log.info("I can fetch trace id <TRACE:{}> ",
this.tracer.currentSpan().context().traceId())
);
return beerService.listBeers(null, null, PageRequest.ofSize(50), true)
.flatMap(beerDto -> ServerResponse.ok().bodyValue(beerDto))
.switchIfEmpty(ServerResponse.notFound().build());
}).doFinally(signalType -> observation.stop())
.contextWrite(context -> context.put(ObservationThreadLocalAccessor.KEY, observation));
}
}
Is there a way to enable traceId/spanId out of the box on all endpoints without all of this clutter?
Based on your description, I think you want to integrate micrometar without changing the original code
Fortunately it can be implemented through @Observed
+ aop
You can refer to the official documentation Refer to Section 4.6 observation
add config code
@Bean
public ObservedAspect observedAspect(ObservationRegistry observationRegistry) {
return new ObservedAspect(observationRegistry, this::skipControllers);
}
private boolean skipControllers(ProceedingJoinPoint pjp) {
Class<?> targetClass = pjp.getTarget().getClass();
return targetClass.isAnnotationPresent(RestController.class) || targetClass.isAnnotationPresent(Controller.class);
}
Currently there's no other way but to be a little bit more verbose and use the tap or handle operator that will automatically put observations in scope. We will be working on better, automated solutions in the future
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.