概述

在完成这个任务后,您将了解如何将应用加入追踪,而不用关心其语言、框架或者您构建应用的平台。

这个任务使用 Bookinfo 作为示例应用程序。

了解发生了什么

虽然 Istio 代理能够自动发送 span,但仍然需要一些线索来将整个追踪衔接起来。应用程序需要分发合适的 HTTP header,以便当代理发送 span 信息时,span 可以被正确的关联到一个追踪中。

为此,应用程序需要收集传入请求中的 header,并将其传播到任何传出请求。header 如下所示:

  • x-request-id
  • x-b3-traceid
  • x-b3-spanid
  • x-b3-parentspanid
  • x-b3-sampled
  • x-b3-flags
  • x-ot-span-context如果您查看示例服务,可以看到 productpage service(Python)从 HTTP 请求中提取所需的 header:
  1. def getForwardHeaders(request):
  2. headers = {}
  3. if 'user' in session:
  4. headers['end-user'] = session['user']
  5. incoming_headers = [ 'x-request-id',
  6. 'x-b3-traceid',
  7. 'x-b3-spanid',
  8. 'x-b3-parentspanid',
  9. 'x-b3-sampled',
  10. 'x-b3-flags',
  11. 'x-ot-span-context'
  12. ]
  13. for ihdr in incoming_headers:
  14. val = request.headers.get(ihdr)
  15. if val is not None:
  16. headers[ihdr] = val
  17. #print "incoming: "+ihdr+":"+val
  18. return headers

reviews 应用程序(Java)做了类似的事情:

  1. @GET
  2. @Path("/reviews/{productId}")
  3. public Response bookReviewsById(@PathParam("productId") int productId,
  4. @HeaderParam("end-user") String user,
  5. @HeaderParam("x-request-id") String xreq,
  6. @HeaderParam("x-b3-traceid") String xtraceid,
  7. @HeaderParam("x-b3-spanid") String xspanid,
  8. @HeaderParam("x-b3-parentspanid") String xparentspanid,
  9. @HeaderParam("x-b3-sampled") String xsampled,
  10. @HeaderParam("x-b3-flags") String xflags,
  11. @HeaderParam("x-ot-span-context") String xotspan) {
  12. int starsReviewer1 = -1;
  13. int starsReviewer2 = -1;
  14. if (ratings_enabled) {
  15. JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);

在应用程序中进行下游调用时,请确保包含了这些 header。

追踪采样

Istio 默认捕获所有请求的追踪信息。例如,当使用上面的 Bookinfo 示例应用程序时,每次访问 /productpage 时,都会看到相应的追踪仪表板。此采样率适用于测试或低流量网格。对于高流量网格,您可以以两种方式之一来降低追踪采样百分比:

  • 在安装网格时,使用 pilot.traceSampling Helm 选项来设置追踪采样百分比。请查看 Helm 安装文档获取配置选项的详细信息。
  • 在一个运行中的网格中,编辑 istio-pilot deployment,通过下列步骤改变环境变量:

    • 运行以下命令打来文本编辑器并加载 deployment 配置文件:
  1. $ kubectl -n istio-system edit deploy istio-pilot
  • 找到 PILOT_TRACE_SAMPLING 环境变量,并修改 value: 为期望的百分比。

在这两种情况下,有效值都是 0.0 到 100.0,精度为 0.01。

相关内容

Jaeger

了解如何配置代理以向 Jaeger 发送追踪请求。

Zipkin

了解如何配置代理以向 Zipkin 发送追踪请求。

使用 LightStep [𝑥]PM 进行分布式追踪

如何配置代理以发送请求至 LightStep [𝑥]PM.

深入遥测

演示如何使用 Istio Mixer 和 Istio sidecar 获取指标和日志,并在不同的服务间进行追踪。

遥测插件的远程访问

本任务展示了为 Istio 遥测插件配置外部访问的过程。

Mixer 适配器模型

概要说明 Mixer 的插件架构。