经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
(16)go-micro微服务jaeger链路追踪
来源:cnblogs  作者:qi66  时间:2023/1/20 9:02:32  对本文有异议

一 jaeger链路追踪介绍

什么是链路追踪:

  • 分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等

链路追踪主要功能:

  • 故障快速定位:可以通过调用链结合业务日志快速定位错误信息

  • 链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来

  • 链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景

二 jaeger链路追踪作用

  • 它是用来监视和诊断基于微服务的分布式系统

  • 用于服务依赖性分析,辅助性能优化

三 jaeger链路追踪主要特性

  • 高扩展性

  • 原生支持OpenTracing

  • 可观察性

四 jaeger链路追踪原理图

1.链路调用原理

  • 服务间经过的局部链路构成了一条完整的链路,其中每一条局部链路都用一个全局唯一的traceid来标识。
    image.png

image.png

2. 一次调用链分析

image.png

3.链路追踪存储与调用

image.png

五 jaeger链路追踪五个重要组件

  • Jaeger-client ( 客户端库)

  • Agent ( 客户端代理)

  • Collector ( 数据收集处理)

  • Data Store ( 数据存储)

  • UI (数据查询与前端界面展示)

六 jaeger链路追踪安装

1.docker拉取jaeger镜像

  1. docker pull jaegertracing/all-in-one

2.docker运行jaeger

  1. docker run -d --name jaeger -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one
  • 使用 docker ps 查看是否jaeger运行

3.安装jaeger库

  1. go get github.com/opentracing/opentracing-go
  2. go get github.com/uber/jaeger-client-go
  3. go get github.com/micro/go-plugins/wrapper/trace/opentracing/v2

七 jaeger链路追踪代码编写

  • 在micro目录下新建jaeger.go文件,输入以下代码:
  1. package micro
  2. import (
  3. "github.com/opentracing/opentracing-go"
  4. "github.com/uber/jaeger-client-go"
  5. "github.com/uber/jaeger-client-go/config"
  6. "io"
  7. "time"
  8. )
  9. // NewTracer 创建链路追踪
  10. func NewTracer(serviceName string,addr string)(opentracing.Tracer,io.Closer,error){
  11. cfg := &config.Configuration{
  12. ServiceName: serviceName,
  13. Sampler: &config.SamplerConfig{
  14. Type: jaeger.SamplerTypeConst,
  15. Param: 1,
  16. },
  17. Reporter: &config.ReporterConfig{
  18. BufferFlushInterval: 1 * time.Second,
  19. LogSpans: true,
  20. LocalAgentHostPort: addr,
  21. },
  22. }
  23. return cfg.NewTracer()
  24. }
  • 在main.go编写代码:
  1. // 5.jaeger 链路追踪
  2. t, io, err := micro.NewTracer(micro.ConsulInfo.Jaeger.ServiceName, micro.ConsulInfo.Jaeger.Addr)
  3. if err != nil {
  4. logger.Error(err)
  5. return
  6. }
  7. defer io.Close()
  8. opentracing.SetGlobalTracer(t)
  • 在注册服务的代码中添加:
  1. //添加链路追踪
  2. micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),

image.png

八 jaeger链路追踪图形可视化界面

image.png

  • 在Service中输入jaeger-query,点击Find Traces。

image.png

  • 至此jaeger使用完成

九 最后

  • 至此,go-micro微服务jaeger链路追踪开发工作就正式完成。

  • 接下来就开始Prometheus监控的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击 夏沫の梦学习交流

原文链接:https://www.cnblogs.com/qi66/p/17062405.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号