使用 Jaeger 跟踪分布式应用程序中的 Kafka 总线

我有一个由多个 Go 服务组成的分发应用程序。其中一些使用 Kafka 作为数据总线。opentracing我能够使用Jaeger追踪服务之间的调用。我在图表上绘制 Kafka 跨度时遇到问题,它们显示为间隙。


这就是我能做的。初始跨度由 gRPC 中间件创建。生产方:


...    

kafkaMsg := kafka.Message{Key: []byte(key), Value: msgBytes}

headers:=make(map[string]string)

if span := opentracing.SpanFromContext(ctx); span != nil {

    opentracing.GlobalTracer().Inject(

        span.Context(),

        opentracing.TextMap,

        opentracing.TextMapCarrier(headers))

}

for headerKey, headerValue:=range headers{

    msg.Headers = append(msg.Headers, kafka.Header{

        Key: headerKey,

        Value: []byte(headerValue),

    })

}

// Write message to Kafka

...

消费端:


...

// read headers from Kafka message

headers := make(map[string]string)

for _, header := range kafkaMessage.Headers{

    headers[header.Key]=string(header.Value)

}

spanContext, _ := opentracing.GlobalTracer().Extract(opentracing.TextMap, opentracing.TextMapCarrier(headers))

span := opentracing.StartSpan(

    "Consumer",

    opentracing.FollowsFrom(spanContext))

defer span.Finish()

...

当消息位于 Kafka 中时,我应该如何修改它以在图表上绘制跨度?


烙印99
浏览 130回答 1
1回答

翻阅古今

Jaeger 不支持跨系统跨度。每个子系统对整个系统中自己的跨度负责。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go