【问题标题】:Tracing Kafka bus in distributed app using Jaeger使用 Jaeger 在分布式应用程序中跟踪 Kafka 总线
【发布时间】:2019-07-02 07:38:44
【问题描述】:

我已经分发了由多个 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 中时,我应该如何修改它以在图上绘制跨度?

【问题讨论】:

    标签: go apache-kafka opentracing jaeger


    【解决方案1】:

    所以,回答我自己的问题。 Jaeger 不支持跨系统跨度。每个子系统负责其在整个系统中的跨度。 供参考,请查看此答案https://github.com/opentracing/specification/issues/143

    【讨论】:

    • 你用这个答案救了我的命。谢谢。
    猜你喜欢
    • 2021-05-20
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多