无法获取 jaeger ui 上的详细跟踪消息(使用 quarkus)

unable to obtain detail trace message on jaeger ui (using quarkus)

我正在通过 opentracing 集成玩 quarkus 和 jaeger。在 运行 jaeger 服务器和 https://github.com/quarkusio/quarkus-quickstarts/tree/master/opentracing-quickstart 存储库之后,我在 http://localhost:16686/search 找到了踪迹。但我只找到了资源 class、参数和进程名称,但跟踪详细信息展开时未显示“日志”。

步骤很简单:

1.Run jaeger 服务器 docker run --rm=true --name erp_jaeger_server -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14268:14268 -p 9411:9411 jaegertracing/all-in-one:latest

  1. 克隆示例 repo 并 运行 它 https://github.com/quarkusio/quarkus-quickstarts/tree/master/opentracing-quickstart (无进一步配置)

  2. 运行->mvn quarkus:dev

  3. 访问http://localhost:8080/hello/

5.Explore 在 jaeger ui 'http://localhost:16686/'

6.Found 跟踪标签和流程详细信息,但未显示详细内容 Log.info('hello')

我尝试使用@Slfj,但我得到了相同的结果

提前致谢。

默认情况下,OpenTracing 不会自动记录到 span 日志中,只有 Jaeger 认为需要记录并且需要进行跟踪的重要消息才会在那里:)。这个想法是将跟踪和日志管理之间的职责分开,Check this GitHub discussion

另一种方法是使用集中式日志管理并将 traceId 和 spanId 打印到您的日志中以进行故障排除以及关联日志和跟踪。

正如iabughosh所说,jaeger的主要关注点是可追溯性、监控和性能,而不是日志记录。

无论如何,我发现使用@traced Bean 注入你可以在当前跨度中插入一个标签,它将被打印在 Jaeger UI 上。这个例子将excpetion的前4行添加到标签部分。 (我在我的全局 ExceptionHandler 上使用它来添加有关错误的更多信息):

public abstract class MyExceptionHandler {

@Inject
io.opentracing.Tracer tracer;
/**
 * Will trace the message at jaeger metrics service, only for monitoring and profiling use, not for Logger.
 * @param e
 */
protected void monitorTrace(Exception e) {
    if(tracer!= null && e!=null) {
        StringBuffer sb = new StringBuffer();
        sb.append(e.getCause()+ "\n");
        int deep = 3;
        
        for(int i=0; i< deep;i++) {
            sb.append(e.getStackTrace()[i]+ "\n");
        }
        tracer.activeSpan().setTag("stack ",sb.toString());
    }
}

}

您将在 JaegerUI 中看到小堆栈跟踪。

希望有所帮助