【发布时间】: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