一 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()
}
// 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。

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