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

时间:2019-11-20 05:01:21

标签: jaeger

在我们的应用程序中,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之前由前端创建的跨度,但是子后端跨度并未如您所愿地显示。

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

1 个答案:

答案 0 :(得分:0)

您似乎拥有不同版本的opentracing。 spring-starter-jaeger版本2.x升级了opentracing的版本,因此在升级依赖项版本时,您可能已经引入了这一重大更改。