Ise分布式追踪与Jaeger无法正常工作

问题描述 投票:2回答:1

我正在尝试建立一个本地k8s集群,并在minikube上安装了istio,我遇到了与Jaeger一起启用分布式跟踪的问题。我有3个微服务A -> B -> C。我正在传播所需的所有标头:

{"x-request-id", "x-b3-traceid", "x-b3-spanid", "x-b3-parentspanid", "x-b3-sampled", "x-b3-flags", "x-ot-span-context"}

但是在Jaeger界面上,我只能看到对服务A的请求而我看不到要求服务B的请求。

我已记录请求中发送的标头。来自服务A的标题:

Header - x-request-id: c2804368-2ff0-9d90-a2aa-972537968924
Header - x-b3-traceid: 3a2400b40bbe5ed8
Header - x-b3-spanid: 3a2400b40bbe5ed8
Header - x-b3-parentspanid: 
Header - x-b3-sampled: 1
Header - x-b3-flags: 
Header - x-ot-span-context: 

服务B的标题:

Header - x-request-id: c2804368-2ff0-9d90-a2aa-972537968924
Header - x-b3-traceid: 3a2400b40bbe5ed8
Header - x-b3-spanid: 3a2400b40bbe5ed8
Header - x-b3-parentspanid:
Header - x-b3-sampled: 1
Header - x-b3-flags:
Header - x-ot-span-context:

所以x-request-idx-b3-traceidx-b3-sampledx-b3-spanid算术。有些标头未设置。此外,我正在通过类型为LoadBalancer的k8s服务IP访问服务A,而不是通过入口。不知道这可能是问题所在。

UPD:我已经设置了istio网关,所以现在我通过istio网关访问服务A。然而结果是一样的,我可以看到gateway->A的痕迹,但没有任何进一步的追踪

kubernetes istio envoyproxy jaeger distributed-tracing
1个回答
2
投票

如果查询不存在的标头,某些Web框架将返回空字符串。我在Spring Boot和KoaJS中看到过这个。

如果Istio没有发送任何跟踪头,则此头逻辑会导致我们为那些不存在的标头发送空字符串,从而中断跟踪。

我的建议是在获取头文件的值后,将带有空字符串的值作为其值,并传播剩余的值。

© www.soinside.com 2019 - 2024. All rights reserved.