目录
- 前言
- 一、什么是链路追踪?
- 二、安装jaeger
- 三、golang使用jaeger进行链路追踪
- 总结
前言
提示:请配置好环境
一、什么是链路追踪?
链路追踪是指在分布式系统中,将一次请求的处理过程进行记录并聚合展示的一种方法。目的是将一次分布式请求的调用情况集中在一处展示,如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等。这样就可以轻松了解一个请求在系统中的完整生命周期,包括经过的服务、调用的操作以及每个操作的延迟等。通过链路追踪,可以更好地理解系统的性能瓶颈、找出问题的根源以及优化系统的性能。
二、安装jaeger
docker pull jaegertracing/all-in-one:latest docker run -d --name myjaeger -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
运行:127.0.0.1:16686
三、golang使用jaeger进行链路追踪
github地址
package main import ( "time" opentracing "github.com/opentracing/opentracing-go" "github.com/uber/jaeger-client-go" jaegercfg "github.com/uber/jaeger-client-go/config" jaegerlog "github.com/uber/jaeger-client-go/log" ) func main() { cfg := jaegercfg.Configuration{ Sampler: &jaegercfg.SamplerConfig{ Type: jaeger.SamplerTypeConst, Param: 1, }, Reporter: &jaegercfg.ReporterConfig{ LogSpans: true, LocalAgentHostPort: "127.0.0.1:6831", }, ServiceName: "deardai-shop", } tracer, closer, err := cfg.NewTracer(jaegercfg.Logger(jaegerlog.StdLogger)) if err != nil { panic(err) } defer closer.Close() //单个追踪 single_span := tracer.StartSpan("single-span") time.Sleep(time.Second * 3) single_span.Finish() //父子追踪 parentSpan := tracer.StartSpan("main") span := tracer.StartSpan("func1", opentracing.ChildOf(parentSpan.Context())) time.Sleep(time.Second) span.Finish() span2 := tracer.StartSpan("func2", opentracing.ChildOf(span.Context())) time.Sleep(time.Second * 3) span2.Finish() parentSpan.Finish() }
结果:
可以看到下图展示出了两个链路
2. 单个方法的追踪
多个方法的组合
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)