登录
首页 >  Golang >  Go问答

监控分布式应用程序中的 Kafka 总线 使用 Jaeger

来源:stackoverflow

时间:2024-03-12 22:18:26 484浏览 收藏

本篇文章给大家分享《监控分布式应用程序中的 Kafka 总线 使用 Jaeger》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我有一个由多个 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 中时,我应该如何修改它以在图表上绘制跨度?


解决方案


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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《监控分布式应用程序中的 Kafka 总线 使用 Jaeger》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>