Ano*_*ala 7 jaeger micronaut micronaut-rest
我已经使用 Spring Boot 很长时间了。我现在正在研究 Micronaut。
我习惯使用 Sleuth 在日志上自动打印跟踪和跨度 ID。Micronaut 中的 sleuth 相当于什么?
如果没有等效项,如何使用 Jaeger 在 Micronaut 中打印跟踪和跨度 ID?
Hau*_*ing -1
可以通过以下链接看到应该如何完成的第一条线索:
最重要的部分如下,其余部分我忽略了:
@Filter("/**")
@Singleton
@Slf4j
public class HttpFilter implements HttpServerFilter {
@Override
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
String uuid = request.getHeaders().contains("X-TRACE-ID") ? request.getHeaders().get("X-TRACE-ID") : UUID.randomUUID().toString();
request.setAttribute("traceId", uuid);
log.debug("filter is working");
return Flux.from(chain.proceed(request)).map(mutableHttpResponse -> {
MDC.put("trace", uuid);
mutableHttpResponse.getHeaders().add("X-TRACE-ID",uuid);
log.debug(mutableHttpResponse.getBody(String.class).orElse("empty"));
return mutableHttpResponse;
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,标头可能不包含 X-TREACE-ID ,在这种情况下,只需调试请求,然后查看其中有哪些标头,例如,我使用 uber-trace 代替 H-TRACE-IF -id 手动提取跟踪 ID:
val traceId = uberTraceId!!.substringBefore(":")
Run Code Online (Sandbox Code Playgroud)
并放置在MDC中
MDC.put("trace", traceId)
Run Code Online (Sandbox Code Playgroud)
下一步是启用 micronaut 跟踪 bean
tracing:
jaeger:
enabled: true
sender:
agentHost: "your jeager host"
agentPort: "your jaeger port"
Run Code Online (Sandbox Code Playgroud)
应该是这样。如果跟踪位于标头中,则意味着跟踪是由另一个服务启动的。然而,如果这个服务确实是开始跟踪的服务,那么traceId会在稍后初始化,因为它在标头中看不到,当然它不会用于日志记录,但它会被发送到jaeger实例。
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |