一 jaeger链路追踪介绍

什么是链路追踪:

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

链路追踪主要功能:

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

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

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

二 jaeger链路追踪作用

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

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

三 jaeger链路追踪主要特性

  • 高扩展性

  • 原生支持OpenTracing

  • 可观察性

四 jaeger链路追踪原理图

1.链路调用原理

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

2. 一次调用链分析

3.链路追踪存储与调用

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

  • Jaeger-client ( 客户端库)

  • Agent ( 客户端代理)

  • Collector ( 数据收集处理)

  • Data Store ( 数据存储)

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

六 jaeger链路追踪安装

1.docker拉取jaeger镜像

docker pull jaegertracing/all-in-one

2.docker运行jaeger

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

3.安装jaeger库

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

七 jaeger链路追踪代码编写

  • 在micro目录下新建jaeger.go文件,输入以下代码:
package micro

import (
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
"github.com/uber/jaeger-client-go/config"
"io"
"time"
) // NewTracer 创建链路追踪
func NewTracer(serviceName string,addr string)(opentracing.Tracer,io.Closer,error){
cfg := &config.Configuration{
ServiceName: serviceName,
Sampler: &config.SamplerConfig{
Type: jaeger.SamplerTypeConst,
Param: 1,
},
Reporter: &config.ReporterConfig{
BufferFlushInterval: 1 * time.Second,
LogSpans: true,
LocalAgentHostPort: addr,
},
}
return cfg.NewTracer()
}
  • 在main.go编写代码:
// 5.jaeger 链路追踪
t, io, err := micro.NewTracer(micro.ConsulInfo.Jaeger.ServiceName, micro.ConsulInfo.Jaeger.Addr)
if err != nil {
logger.Error(err)
return
}
defer io.Close()
opentracing.SetGlobalTracer(t)
  • 在注册服务的代码中添加:
//添加链路追踪
micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),

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

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

  • 至此jaeger使用完成

九 最后

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

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

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

最新文章

  1. Linux 系统中发博客必备的五大图片处理神器
  2. 160809208沈昊辰c语言程序设计实验选择结构设计
  3. nios II--实验6——串口硬件部分
  4. 【USACO 1.5】Prime Palindromes
  5. 一张图入门python
  6. MySQL创建数据库并赋予权限
  7. StackOverflow程序员推荐的几本书籍
  8. WordCount Analysis
  9. HttpRuntime.Cache的使用经验
  10. Hive内表和外表的区别
  11. tomcat 解析(一)-文件解析
  12. sql server 2012序列号
  13. Linux os
  14. tomcat之 JDK8.0安装、tomcat-8.5.15安装
  15. WebUtils复用代码【request2Bean、UUID】
  16. Yii2.0源码阅读-视图(View)渲染过程
  17. 跟我一起学opencv 第五课之图像的混合
  18. 如何在 Linux 上复制文件/文件夹到远程系统?
  19. 最长连续子序列(dp,分而治之递归)
  20. CentOS7 安装极点五笔输入法

热门文章

  1. NLP之TextRNN(预测下一个单词)
  2. LcdToos如何在线调屏PORCH参数
  3. 利用xtrabackup8完全,增量备份及还原MySQL8
  4. 优雅的写好Vue项目代码 — 路由拆分、Vuex模块拆分、element按需加载
  5. scrapy出现SSL问题 如何解决? <twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', '', 'unsafe legacy renegotiation disabled')]>
  6. Istio Ambient Mesh七层服务治理图文详解
  7. SpringBoot 自动装配原理
  8. created与mounted执行顺序(关于微任务与宏任务)
  9. SPPS完整版下载安装教程【博主亲测】
  10. 【Java集合框架002】原理层面:HashMap全解析