Istio 分布式跟踪与 Jaeger 不工作
Istio distributed tracing with Jaeger not working
我正在尝试设置本地 k8s 集群,并在 minikube
上安装了 istio
,我在使用 Jaeger 启用分布式跟踪时遇到问题。
我有 3 个微服务 A -> B -> C
。我正在传播所有需要的 headers:
{"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的请求。
我已经记录了请求中发送的 headers。
Headers 来自服务 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:
Headers 来自服务 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-id
、x-b3-traceid
、x-b3-sampled
和 x-b3-spanid
数学。有一些 headers 没有设置。
此外,我正在通过 LoadBalancer 类型的 k8s 服务 IP 访问服务 A,而不是通过入口。不知道这是否是问题所在。
UPD:我已经设置了 istio 网关,所以现在我正在通过 istio 网关访问服务 A
。但是结果是一样的,我可以看到 gateway->A
的跟踪,但没有任何进一步的跟踪
如果查询 non-existent header,某些 Web 框架 return 空字符串。我在 Spring Boot 和 KoaJS 中看到过这个。
如果 Istio 未发送任何跟踪 headers,此 header 逻辑会导致我们为那些中断的 non-existent headers 发送空字符串跟踪。
我的建议是在获取 headers 的值后过滤掉空字符串作为其值的值并传播剩余的值。
我正在尝试设置本地 k8s 集群,并在 minikube
上安装了 istio
,我在使用 Jaeger 启用分布式跟踪时遇到问题。
我有 3 个微服务 A -> B -> C
。我正在传播所有需要的 headers:
{"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的请求。
我已经记录了请求中发送的 headers。 Headers 来自服务 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:
Headers 来自服务 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-id
、x-b3-traceid
、x-b3-sampled
和 x-b3-spanid
数学。有一些 headers 没有设置。
此外,我正在通过 LoadBalancer 类型的 k8s 服务 IP 访问服务 A,而不是通过入口。不知道这是否是问题所在。
UPD:我已经设置了 istio 网关,所以现在我正在通过 istio 网关访问服务 A
。但是结果是一样的,我可以看到 gateway->A
的跟踪,但没有任何进一步的跟踪
如果查询 non-existent header,某些 Web 框架 return 空字符串。我在 Spring Boot 和 KoaJS 中看到过这个。
如果 Istio 未发送任何跟踪 headers,此 header 逻辑会导致我们为那些中断的 non-existent headers 发送空字符串跟踪。
我的建议是在获取 headers 的值后过滤掉空字符串作为其值的值并传播剩余的值。