• 带你十天轻松搞定 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 支持我们!

    微信交流群

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

  • 相关阅读:
    服务器上的 Git
    进程有哪几种基本状态,在一个系统中为什么必须区分出这几种状态?
    什么是进程,进程与程序的主要区别是什么?
    什么是与时间有关的错误,是举例说明。
    试解释下列名词:程序的顺序执行,程序的并发执行。
    简述系统调用的执行过程?
    假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?
    什么是系统调用,对操作系统的服务请求与一般子程序调用有什么区别?
    Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?
    用户与操作系统的接口是什么?一个分时系统提供什么接口?一个批处理系统又提供什么接口?
  • 原文地址:https://www.cnblogs.com/kevinwan/p/15891632.html
Copyright © 2020-2023  润新知