go-zero实战:让微服务Go起来——10 链路追踪 Jaeger

6,890 阅读2分钟

10.1 Jaeger 介绍

JaegerUber 开发并开源的一款分布式追踪系统,兼容 OpenTracing API,适用于一下场景:

  • 分布式跟踪信息传递
  • 分布式事务监控
  • 问题分析
  • 服务依赖性分析
  • 性能优化

Jaeger 的全链路追踪功能主要由三个角色完成:

  • client:负责全链路上各个调用点的计时、采样,并将 tracing 数据发往本地 agent
  • agent:负责收集 client 发来的 tracing 数据,并以 thrift 协议转发给 collector
  • collector:负责搜集所有 agent 上报的 tracing 数据,统一存储。

10.2 go-zero 使用 Jaeger 链路追踪

go-zero 框架已经帮我们实现了链路追踪(详见:go-zero链路追踪),并且集成支持了 JaegerZipkin 这两种链路追踪上报工具,我们只要简单配置下,就可以可视化的查看到一个请求的完整的调用链,以及每一个环节的调用情况及性能。

10.2.1 添加 user api 服务 Telemetry 配置

$ vim mall/service/user/api/etc/user.yaml
Name: User
Host: 0.0.0.0
Port: 8000

......

Telemetry:
  Name: user.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.2 添加 user rpc 服务 Telemetry 配置

$ vim mall/service/user/rpc/etc/user.yaml
Name: user.rpc
ListenOn: 0.0.0.0:9000

......

Telemetry:
  Name: user.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.3 添加 product api 服务 Telemetry 配置

$ vim mall/service/product/api/etc/product.yaml
Name: Product
Host: 0.0.0.0
Port: 8001

......

Telemetry:
  Name: product.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.4 添加 product rpc 服务 Telemetry 配置

$ vim mall/service/product/rpc/etc/product.yaml
Name: product.rpc
ListenOn: 0.0.0.0:9001

......

Telemetry:
  Name: product.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.5 添加 order api 服务 Telemetry 配置

$ vim mall/service/order/api/etc/order.yaml
Name: Order
Host: 0.0.0.0
Port: 8002

......

Telemetry:
  Name: order.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.6 添加 order rpc 服务 Telemetry 配置

$ vim mall/service/order/rpc/etc/order.yaml
Name: order.rpc
ListenOn: 0.0.0.0:9002

......

Telemetry:
  Name: order.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.7 添加 pay api 服务 Telemetry 配置

$ vim mall/service/pay/api/etc/pay.yaml
Name: Pay
Host: 0.0.0.0
Port: 8003

......

Telemetry:
  Name: pay.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

10.2.8 添加 pay rpc 服务 Telemetry 配置

$ vim mall/service/pay/rpc/etc/pay.yaml
Name: pay.rpc
ListenOn: 0.0.0.0:9003

......

Telemetry:
  Name: pay.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

!提示:配置修改后,需要重启服务才会生效。

10.3 使用 Jaeger UI 查看链路

  • 访问 /api/user/userinfo api接口

image.png

  • 第二章 环境搭建中我们集成了 Jaeger 服务,并为其 Jaeger UI 端口号16686 做了宿主机端口 5000 的映射关系,所以在浏览器中输入 http://127.0.0.1:5000/ 访问 Jaeger UI 界面。选择 Search 菜单,在 Service 下拉框中选择 user.api,最后点击 Find Traces 按钮,可以查询到刚刚访问的 /api/user/userinfo 接口的链路追踪数据。

image.png

  • 点击进去,就可以看到这个 /api/user/userinfo 接口的链路时序图,以及服务依赖关系,和耗时情况。

image.png

  • 右上角的下拉菜单可以选择不同的数据展示样式。

image.png

  • 其他接口链路追踪效果图

image.png

image.png

项目地址:github

上一篇《go-zero实战:让微服务Go起来——9 服务监控 Prometheus》

下一篇《go-zero实战:让微服务Go起来——11 分布式事务 DTM》