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 示例应用程序。
流程
- 在部署了 Bookinfo 应用程序后,您需要生成对 Bookinfo 应用程序的调用,以便获得一些要分析的追踪数据。访问 http://<GATEWAY_URL>/productpage ,刷新该页面几次以生成一些跟踪数据。
安装过程会创建路由来访问 Jaeger 控制台。
-
在 OpenShift Container Platform 控制台中,进入 Networking
Routes 并搜索 Jaeger 路由,它是 Location 项下列出的 URL。 使用 CLI 查询路由详情:
$ export JAEGER_URL=$(oc get route -n bookinfo jaeger-query -o jsonpath='{.spec.host}')
-
在 OpenShift Container Platform 控制台中,进入 Networking
-
启动浏览器并访问
https://<JAEGER_URL>
。 - 如有必要,使用与您用来访问 OpenShift Container Platform 控制台相同的用户名和密码登录。
在 Jaeger dashboard 左侧的 dashboard 中,从 Service 菜单中选择 "productpage" 并点击面板底部的 Find Traces 按钮。此时会显示一个跟踪列表,如下所示:
点击列表中的某个跟踪打开那个追踪的详细视图。如果点击顶部(最新)追踪,您会看到与最新刷新
'/productpage
所对应的详细信息。上图中的 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 的验证检查。