Распределенная трассировка Istio с Jaeger не работает - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь настроить локальный кластер 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, поэтому теперь я получаю доступ к услуге A через шлюз istio. Однако результат тот же, я вижу трассировку для gateway->A, но никакой дальнейшей трассировки

1 Ответ

0 голосов
/ 31 августа 2018

Некоторые веб-фреймворки возвращают пустую строку, если запрашивается несуществующий заголовок. Я видел это в Spring Boot и KoaJS.

Если Istio не отправляет какой-либо из заголовков трассировки, эта логика заголовка заставляет нас отправлять пустую строку для тех несуществующих заголовков, которая прерывает трассировку.

Мое предложение заключается в том, чтобы после получения значений для заголовков отфильтровывать значения с пустой строкой в ​​качестве значений и распространять оставшиеся.

...