Распределенная трассировка Istio с Jaeger не работает
Я пытаюсь настроить локальный кластер 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-id
, x-b3-traceid
, x-b3-sampled
, а также x-b3-spanid
соответствующие два. Есть некоторые заголовки, которые не установлены. Кроме того, я получаю доступ к службе A через IP-адрес службы k8s типа LoadBalancer, а не через вход. Не знаю, может ли это быть проблемой.
UPD: у меня настроен istio gateway, так что теперь я получаю доступ к сервису A
через шлюз istio. Однако результат тот же, я вижу след для gateway->A
но никакой дальнейшей трассировки
1 ответ
Некоторые веб-фреймворки возвращают пустую строку, если запрашивается несуществующий заголовок. Я видел это в Spring Boot и KoaJS.
Если какой-либо из заголовков трассировки не отправляется Istio, эта логика заголовка заставляет нас отправлять пустую строку для тех несуществующих заголовков, которая прерывает трассировку.
Я предлагаю после получения значений для заголовков отфильтровать значения с пустой строкой в качестве своих значений и распространить оставшиеся.