4.5. 分布式追踪

Jaeger 是一个开源分布式追踪系统。您可以使用 Jaeger 监控基于微服务的分布式系统并进行故障排除。使用 Jaeger ,您可以执行一个追踪(trace),该 trace 会追踪一个请求在组成应用程序的各种微服务间执行的路径。默认安装 Jaeger 作为 Service Mesh 的一部分。

本教程使用 Service Mesh 和 bookinfo 指南来演示如何使用 Jeager 来执行分布式追踪。

注意

您可以使用 Bookinfo 示例应用程序来测试 OpenShift Container Platform 中的 Red Hat OpenShift Service Mesh 1.1.2 安装。

红帽不提供对 Bookinfo 应用程序的支持。

4.5.1. 生成追踪(trace) 并分析 trace 数据

本教程使用 Service Mesh 和 Bookinfo 指南来演示如何使用 Red Hat OpenShift Service Mesh 的 Jaeger 组件来执行追踪。

先决条件

  • 安装了 OpenShift Container Platform 4.1 或更高版本。
  • 安装了 Red Hat OpenShift Service Mesh 1.1.2。
  • 安装过程中启用了 Jaeger 。
  • 已安装 Bookinfo 示例应用程序。

流程

  1. 在部署了 Bookinfo 应用程序后,您需要生成对 Bookinfo 应用程序的调用,以便获得一些要分析的追踪数据。访问 http://<GATEWAY_URL>/productpage ,刷新该页面几次以生成一些跟踪数据。
  2. 安装过程会创建路由来访问 Jaeger 控制台。

    1. 在 OpenShift Container Platform 控制台中,进入 NetworkingRoutes 并搜索 Jaeger 路由,它是 Location 项下列出的 URL。
    2. 使用 CLI 查询路由详情:

      $ export JAEGER_URL=$(oc get route -n bookinfo jaeger-query -o jsonpath='{.spec.host}')
  3. 启动浏览器并访问 https://<JAEGER_URL>
  4. 如有必要,使用与您用来访问 OpenShift Container Platform 控制台相同的用户名和密码登录。
  5. 在 Jaeger dashboard 左侧的 dashboard 中,从 Service 菜单中选择 "productpage" 并点击面板底部的 Find Traces 按钮。此时会显示一个跟踪列表,如下所示:

    ossm Jaeger 主屏幕
  6. 点击列表中的某个跟踪打开那个追踪的详细视图。如果点击顶部(最新)追踪,您会看到与最新刷新 '/productpage所对应的详细信息。

    ossm Jaeger spans

    上图中的 trace 由几个嵌套的 spans 组成,每个 spans 对应一个 Bookinfo Service 调用,它们都是针对 '/productpage 请求执行的。总的处理时间是 2.62s,details Service 为 3.56ms,reviews Service 使用了 2.6s,ratings Service 使用了 5.32ms。每个远程服务调用都由客户端和服务器端的 span 代表。例如,details 客户端 span 被标记为 productpage details.myproject.svc.cluster.local:9080。在它下面嵌套的标记为 details.myproject.svc.cluster.local:9080 的 span 与服务器端的请求相对应。该 trace 还显示对 istio-policy 的调用,它反映了 Istio 的验证检查。