golang使用jaeger进行链路追踪

 更新时间:2024年06月12日 10:03:17   作者:dearlin2024  
链路追踪是指在分布式系统中,将一次请求的处理过程进行记录并聚合展示的一种方法,目的是将一次分布式请求的调用情况集中在一处展示,本文将介绍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. 单个方法的追踪

在这里插入图片描述

多个方法的组合

在这里插入图片描述

总结

到此这篇关于golang使用jaeger进行链路追踪的文章就介绍到这了,更多相关golang jaeger链路追踪内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang之sync.Pool使用详解

    Golang之sync.Pool使用详解

    这篇文章主要介绍了Golang之sync.Pool使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • golang如何去除 context 的 deadline

    golang如何去除 context 的 deadline

    在使用 context 的时候遇到了开协程处理任务的情况,但是直接在协程里使用主线程的 context 会导致当主线程返回时协程任务也会因为 context cancel 而失败,本文提供了两种办法可以取消掉 context 里的 timeout 和 deadline,再设置一个新的 timeout 上去
    2023-03-03
  • 从生成CRD到编写自定义控制器教程示例

    从生成CRD到编写自定义控制器教程示例

    这篇文章主要为大家介绍了从生成CRD到编写自定义控制器的教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 基于Go语言实现猜谜游戏

    基于Go语言实现猜谜游戏

    这篇文章主要为大家详细介绍了如何基于Go语言实现猜谜游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习
    2023-09-09
  • Golang 拷贝Array或Slice的操作

    Golang 拷贝Array或Slice的操作

    这篇文章主要介绍了Golang 拷贝Array或Slice的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang实现redis的延时消息队列功能示例

    golang实现redis的延时消息队列功能示例

    这篇文章主要介绍了golang实现redis的延时消息队列功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • GoLang完整实现快速列表

    GoLang完整实现快速列表

    这篇文章主要介绍了GoLang完整实现快速列表,列表是一种非连续的存储容器,由多个节点组成,节点通过一些 变量 记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等
    2022-12-12
  • Go使用sync.Map来解决map的并发操作问题

    Go使用sync.Map来解决map的并发操作问题

    在 Golang 中 map 不是并发安全的,sync.Map 的引入确实解决了 map 的并发安全问题,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
    2021-10-10
  • go语言interface接口继承多态示例及定义解析

    go语言interface接口继承多态示例及定义解析

    这篇文章主要为大家介绍了go语言interface接口继承多态示例及定义解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Golang中大端序和小端序的处理

    Golang中大端序和小端序的处理

    大端序和小端序是描述多字节数据在内存中存储顺序的术语,本文主要介绍了Golang中大端序和小端序的处理,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02

最新评论