使用具有正确层次结构的 Jaeger 进行分布式跟踪

Gio*_*nos 5 go opentracing jaeger distributed-tracing open-telemetry

我是 Jaeger 的新手,我想使用它来记录我的微服务的跟踪。

\n

我从 \xce\xbcservices 创建跟踪,提供traceId它们作为消息发布并在另一个服务中使用它们,以便将跟踪导出到 Jaeger。\n虽然我还没有找到一种方法来提供跨度 ID 并从生产方。

\n
    \n
  1. 我是否应该在消费者中保存某种状态,例如(每个跟踪的父范围),以便我可以拥有正确的层次结构?你会怎么做呢?

    \n
  2. \n
  3. 我当前的设置的顺序是由首先完成的设置设置的,而不是由首先开始的设置设置的,这是所期望的。API 应该是第一个。你知道我该如何解决这个问题吗?

    \n
  4. \n
\n

耶格

\n

任何想法或反馈都将受到高度赞赏。

\n

xak*_*p35 0

要为给定跟踪 ID 创建新的跨度,您需要使用适合您语言的 Jaeger 客户端库并遵循 OpenTracing API 规范。根据StackOverflow 上的回答,您可以从 service1 的 Span 获取 Span ID 并将其传播到其他服务。例如,在 Spring Boot 中:

// service1
JaegerSpan span = tracer.buildSpan ("service1")
String spanId = span.context ().toTraceId ()

// service2
JaegerSpanContext context = new JaegerSpanContext (traceId, spanId, 0L, (byte) 0);
JaegerSpan span = tracer.buildSpan ("service2").asChildOf (context).start ();
Run Code Online (Sandbox Code Playgroud)

您还可以使用 OpenTelemetry API 创建跨度并使用特定转换将它们导出到 Jaeger。您需要使用 Big Endian 字节顺序将 ID 的字节转换为无符号整数。

如果您是新手 - 我可以建议您从网络上的一些教程开始