不,Istio 不提供跟踪标头传播。但是,它可以在应用程序端进行配置,而无需使用 3rd 方 API。
根据Istio 文档:
Istio 利用 Envoy’s distributed tracing 功能提供开箱即用的跟踪集成。具体来说,Istio 提供了安装各种跟踪后端和配置代理以自动向它们发送跟踪跨度的选项。请参阅 Zipkin、Jaeger 和 LightStep 任务文档,了解 Istio 如何与这些跟踪系统配合使用。
Istio 文档还有一个 example 用于 bookinfo 演示应用程序的应用程序端标头传播:
跟踪上下文传播
虽然 Istio 代理能够自动发送 span,但它们需要一些提示来将整个跟踪联系在一起。应用程序需要传播适当的 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
如果您查看示例 Python productpage 服务,例如,您会看到应用程序使用 OpenTracing 库从 HTTP 请求中提取所需的标头:
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);
当您在应用程序中进行下游调用时,请确保包含这些标头。