一 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监控的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

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

(16)go-micro微服务jaeger链路追踪的更多相关文章

  1. SpringBoot之微服务日志链路追踪

    SpringBoot之微服务日志链路追踪 简介 在微服务里,业务出现问题或者程序出的任何问题,都少不了查看日志,一般我们使用 ELK 相关的日志收集工具,服务多的情况下,业务问题也是有些难以排查,只能 ...

  2. 详解ElasticAPM实现微服务的链路追踪(NET)

    前言 Elastic APM实现链路追踪,首先要引用开源的APMAgent(APM代理),然后将监控的信息发送到APMServer,然后在转存入ElasticSearch,最后有Kibana展示:具体 ...

  3. 微服务 Zipkin 链路追踪原理(图文详解)

    一个看起来很简单的应用,可能需要数十或数百个服务来支撑,一个请求就要多次服务调用. 当请求变慢.或者不能使用时,我们是不知道是哪个后台服务引起的. 这时,我们使用 Zipkin 就能解决这个问题. 由 ...

  4. SpringCloud初体验:六、利用 Sleuth 和 Zipkin 给微服务加上链路监控追踪查看功能

    首先:装上 Zipkin 服务,收集调用链跟踪数据,体验时装在了本机docker上, 方便快捷 docker run -d -p : openzipkin/zipkin 安装后访问地址也是 9411端 ...

  5. go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪

    0.转载 go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪 0.1源码地址 https://github.com/liuyuede123/go-zero-co ...

  6. [系列] go-gin-api 路由中间件 - Jaeger 链路追踪(五)

    概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪. 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求 ...

  7. [系列] go-gin-api 路由中间件 - Jaeger 链路追踪(六)

    [DOC] 概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇),这篇文章咱们接着分享:路由中间件 - Jaeger 链路追踪(实战篇). 这篇文章,确实让大家 ...

  8. go-gin-api 路由中间件 - Jaeger 链路追踪

    概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇). 这篇文章咱们分享:路由中间件 - Jaeger 链路追踪(实战篇). 说实话,这篇文章确实让大家久等了, ...

  9. Go微服务全链路跟踪详解

    在微服务架构中,调用链是漫长而复杂的,要了解其中的每个环节及其性能,你需要全链路跟踪. 它的原理很简单,你可以在每个请求开始时生成一个唯一的ID,并将其传递到整个调用链. 该ID称为Correlati ...

  10. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

随机推荐

  1. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-SumGNN:通过有效的KG聚集进行多类型DDI预测

    3.(2021.3.26)Bioinformatics-SumGNN:通过有效的KG聚集进行多类型DDI预测 论文标题: SumGNN: multi-typed drug interaction pr ...

  2. C#中ref和out关键字的应用以及区别(参数修饰符)

    ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...

  3. c++ 模板 指针类型偏特化

    一步步来,先简单点. 目标:我们要实现一个模板类,例化后,可以通过get_val获取到值,通过get_ptr获取到指针.具体什么意思结合例子来看看吧. 例子: struct A{ int data; ...

  4. React 函数组件

    React 函数组件 1.定义方式 React 函数组件是指使用函数方法定义的组件. 定义方式:与函数的定义方式相同,需要将内容 return 出来,需要注意的是最外层只有一个标签或者使用<&g ...

  5. ElasticSearch这些坑记得避开

    目录 一.管理方式 二.结构维护 三.数据调度 1.同步方案 2.中断和恢复 四.刷新策略 五.深度分页 六.参考源码 Index用不好,麻烦事不会少: 一.管理方式 ElasticSearch作为最 ...

  6. PLC攻击(一):应用层攻击

    ​ 转载请注明出处:信安科研人please subscribe my official wechat :信安科研人获取更多安全资讯 参考文献: A Stealth Program Injection  ...

  7. 推荐三个实用的 Go 开发工具

    孙悟空在花果山称王的时候,特意去了一趟东海,在那里淘到了如意金箍棒.因为身为一个山大王,怎么能没有一件趁手的兵器呢? 作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的 ...

  8. 面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?

    背景介绍: 你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官! 面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线 ...

  9. DHorse系列文章之maven打包

    插件打包 这种方式是平时最常用的,首先要下载并安装maven环境,然后在被打包的项目中引入插件,有各种各样的打包插件,比如springboot自带插件: <plugin> <grou ...

  10. Python基础之数据库:2、MySQL的下载与安装、基本使用、系统服务制作

    目录 一.MySQL简介 二.安装与下载 1.下载流程 2.配置环境变量 三.主要目录介绍 四.基本使用 五.系统服务的制作 六.密码相关 1.修改管理员密码 2.忘记密码 一.MySQL简介 ​ M ...