当分布式跟踪跨越 Node.js 和 Java 服务时出现 Jaeger 代理错误

Get Jaeger agent error when distributed trace spans Node.js and Java services

在我们的应用程序中,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 之前由前端创建的 span,但子后端 span 并未如您预期的那样显示.

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

看来您有不同版本的 opentracing。 spring-starter-jaeger version 2.x升级了opentracing的版本,所以你可能在升级依赖版本的时候引入了这个breaking changes。