【问题标题】:Get Jaeger agent error when distributed trace spans Node.js and Java services分布式跟踪跨越 Node.js 和 Java 服务时出现 Jaeger 代理错误
【发布时间】:2019-11-20 05:01:21
【问题描述】:

在我们的应用程序中,Node.js 前端与 Java Spring 后端通信。一切都被容器化并在 Kubernetes 中运行。前段时间,我们增加了对 Jaeger 跨前端和后端服务的分布式跟踪的支持。 Jaeger 一直运行良好,直到最近。

我们的 Elasticsearch 集群已过时,因此我们进行了升级。这就要求对 Jaeger 进行升级——我们最终得到了以下几点:

Jaeger Helm Chart: 0.13.3  from https://github.com/helm/charts/tree/master/incubator/jaeger
Jaeger Client for Node: 3.17.1
Jaeger Client for Java:
   opentracing-spring-jaeger-cloud-starter 2.0.3
   opentracing-spring-jaeger-web-starter 2.0.3

这两个 opentracing 库都依赖于 Jaeger Java 客户端的 0.35.1 版本。

自升级以来,在一侧或另一侧创建的痕迹似乎很好。但是跨越边界的跟踪(即从 Node.js 前端开始并在 Java 后端完成)会在 jaeger-agent pod 中生成错误,如下所示:

{"level":"error","ts":1574224941.7531824,"caller":"processors/thrift_processor.go:119",
"msg":"Processor failed","error":"*jaeger.Batch error reading struct: *jaeger.Span error
 reading struct: *jaeger.Log error reading struct: *jaeger.Tag error reading struct: 
error reading field 3: Invalid data length","stacktrace":"github.com/jaegertracing/jaeger/cmd/agent/app/processors.
(*ThriftProcessor).processBuffer\n\t/home/travis/gopath/src/github.com/jaegertracing/jaeger/cmd/
agent/app/processors/thrift_processor.go:119\ngithub.com/jaegertracing/jaeger/cmd/agent/app/proc
essors.NewThriftProcessor.func2\n\t/home/travis/gopath/src/github.com/jaegertracing/jaeger/cmd/a
gent/app/processors/thrift_processor.go:83"}

对于这些跟踪,Jaeger UI 向我们显示了在调用后端 API 之前由前端创建的跨度,但子后端跨度并没有像您预期的那样显示。

什么可能导致这种处理器错误?

【问题讨论】:

    标签: jaeger


    【解决方案1】:

    看起来你有不同版本的 opentracing。 spring-starter-jaeger 2.x 版本升级了 opentracing 的版本,所以你在升级依赖版本时可能已经引入了这个破坏性的变化。

    【讨论】:

    • 我们最终向 java-spring-jaeger repo 提交了一个 PR,它影响了 Jaeger 版本。一旦被接受,我们将最新的 opentracing-spring-jaeger-web-starter 集成到我们的 Java 后端,我们就可以再次使用 UDP。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2020-06-11
    • 2020-04-05
    相关资源
    最近更新 更多