乐趣区

关于golang:带你十天轻松搞定-Go-微服务系列九链路追踪

序言

咱们通过一个系列文章跟大家具体展现一个 go-zero 微服务示例,整个系列分十篇文章,目录构造如下:

  1. 环境搭建
  2. 服务拆分
  3. 用户服务
  4. 产品服务
  5. 订单服务
  6. 领取服务
  7. RPC 服务 Auth 验证
  8. 服务监控
  9. 链路追踪(本文)
  10. 分布式事务

冀望通过本系列带你在本机利用 Docker 环境利用 go-zero 疾速开发一个商城零碎,让你疾速上手微服务。

残缺示例代码:https://github.com/nivin-studio/go-zero-mall

首先,咱们来看一下整体的服务拆分图:

9.1 Jaeger 介绍

JaegerUber 开发并开源的一款分布式追踪零碎,兼容 OpenTracing API,实用于以下场景:

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

Jaeger 的全链路追踪性能次要由三个角色实现:

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

9.2 go-zero 应用 Jaeger 链路追踪

go-zero 框架曾经帮咱们实现了链路追踪(详见:go-zero 链路追踪),并且集成反对了 JaegerZipkin 这两种链路追踪上报工具,咱们只有简略配置下,就能够可视化的查看到一个申请的残缺的调用链,以及每一个环节的调用状况及性能。

9.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

9.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

9.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

9.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

9.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

9.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

9.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

9.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

提醒:配置批改后,须要重启服务才会失效。

9.3 应用 Jaeger UI 查看链路

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

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

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

  • 右上角的下拉菜单能够抉择不同的数据展现款式。

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

我的项目地址

https://github.com/zeromicro/go-zero

欢送应用 go-zerostar 反对咱们!

微信交换群

关注『微服务实际 』公众号并点击 交换群 获取社区群二维码。

退出移动版