Нет, Istio не обеспечивает распространение заголовков трассировки. Однако его можно настроить на стороне приложения без использования сторонних API.
Согласно документации Istio :
Istio использует Распределенная трассировка Посланника функция для обеспечения интеграции трассировки из коробки. В частности, Istio предоставляет опции для установки различного бэкэнда трассировки и настройки прокси для автоматической отправки им трасс трассировки. См. Zipkin , Jaeger и LightStep о том, как Istio работает с этими системами трассировки.
Документация Istio также имеет пример распространения заголовка на стороне приложения для демонстрационного приложения bookinfo:
Распространение контекста трассировки
Хотя прокси-серверы Istio могут автоматически посылая пролеты, им нужны некоторые подсказки для t ie вместе всей трассы. Приложения должны распространять соответствующие заголовки HTTP, чтобы при передаче прокси информации о промежутках прокси-серверы могли правильно соотноситься с одной трассой.
Для этого приложение должно собирать и распространять следующие заголовки из входящий запрос на любые исходящие запросы:
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
Кроме того, распространяются интеграции трассировки на основе OpenCensus (например, Stackdriver) следующие заголовки:
x-cloud-trace-context
traceparent
grpc-trace-bin
Если вы посмотрите на образец * Служба 1087 * productpage
, например, вы видите, что приложение извлекает необходимые заголовки из HTTP-запроса, используя библиотеки OpenTracing :
def getForwardHeaders(request):
headers = {}
# x-b3-*** headers can be populated using the opentracing span
span = get_current_span()
carrier = {}
tracer.inject(
span_context=span.context,
format=Format.HTTP_HEADERS,
carrier=carrier)
headers.update(carrier)
# ...
incoming_headers = ['x-request-id']
# ...
for ihdr in incoming_headers:
val = request.headers.get(ihdr)
if val is not None:
headers[ihdr] = val
return headers
Отзывы приложение (Java) делает что-то похожее:
@GET
@Path("/reviews/{productId}")
public Response bookReviewsById(@PathParam("productId") int productId,
@HeaderParam("end-user") String user,
@HeaderParam("x-request-id") String xreq,
@HeaderParam("x-b3-traceid") String xtraceid,
@HeaderParam("x-b3-spanid") String xspanid,
@HeaderParam("x-b3-parentspanid") String xparentspanid,
@HeaderParam("x-b3-sampled") String xsampled,
@HeaderParam("x-b3-flags") String xflags,
@HeaderParam("x-ot-span-context") String xotspan) {
if (ratings_enabled) {
JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
Когда вы делаете вниз по течению звонки в ваших приложениях, обязательно включите эти заголовки.