Go微服务: go-micro集成链路追踪jaeger

五万字图文详解go(golang)项目实践框架构建分布式链路追踪OpenTelemetry实现gin, gRPC, log, gorm, redis的集成(附源码) 五万字图文详解go(golang)项目实践框架构建分布式链路追踪OpenTelemetry实现gin, gRPC, log, gorm, redis的集成(附源码)。 阅读详情

关于链路追踪jeager的原理

核心代码演示


1 ) 概述

2 )核心代码:common/jaeger.go

package common

import (
	"io"
	"time"

	"github.com/opentracing/opentracing-go"
	"github.com/uber/jaeger-client-go"
	jaegerConfig "github.com/uber/jaeger-client-go/config"
)

// 初始化Jaeger Tracer实例
func NewTracer(serviceName string, addr string) (opentracing.Tracer, io.Closer, error) {
	cfg := jaegerConfig.Configuration{
		ServiceName: serviceName,
		Sampler: &jaegerConfig.SamplerConfig{
			Type:  jaeger.SamplerTypeConst,
			Param: 1, // 采样率设置为1,即100%采样
		},
		Reporter: &jaegerConfig.ReporterConfig{
			BufferFlushInterval: 1 * time.Second,
			LogSpans:            true,
			LocalAgentHostPort:  addr,
		},
	}

	return cfg.NewTracer()
}
  • 可见,这里封装了 Jaeger Tracer 的实例

2 )核心代码 main.go

package main

import (
	"fmt"
	"log"
	"strconv"

	"github.com/go-micro/plugins/v4/registry/consul"
	opentracingFn "github.com/go-micro/plugins/v4/wrapper/trace/opentracing"
	"github.com/opentracing/opentracing-go"
	"go-micro.dev/v4"
	"go-micro.dev/v4/registry"

	"gitee.com/go-micro-services/product/common"
	"gitee.com/go-micro-services/product/domain/repository"
	"gitee.com/go-micro-services/product/domain/service"
	"gitee.com/go-micro-services/product/handler"
	pbproduct "gitee.com/go-micro-services/product/proto/product"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

var (
	serviceName     = "go.micro.service.product"
	version         = "latest"
	host            = "127.0.0.1"
	port            = 8090
	address         = host + ":" + strconv.Itoa(port)
	mysqlConfigPath = "/micro/config/mysql"
)

func main() {
	// 1. 指定注册中心
	consulReg := consul.NewRegistry(
		registry.Addrs(address),
	)

	// 2. 从配置中心获取mysql配置并创建处理
	mysqlConfig, consulConfigErr := common.GetConsulMysqlConfig(address, mysqlConfigPath)
	if consulConfigErr != nil {
		log.Fatal(consulConfigErr)
	}
	mysqlUrl := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", mysqlConfig.User, mysqlConfig.Pwd, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Database)
	db, dbErr := gorm.Open("mysql", mysqlUrl)
	if dbErr != nil {
		log.Fatal(dbErr)
	}
	defer db.Close()
	db.SingularTable(false) // true 则 表就是单数

	rp := repository.NewProductRepository(db)
	// 数据库表初始化,只执行一次, 如果本来就设计好了,则无需下面
	// rp.InitTable()

	// 3. 链路追踪配置
	tracer, closer, tracerErr := common.NewTracer("go.micro.service.product", "localhost:6831")
	if tracerErr != nil {
		log.Fatal(tracerErr)
	}
	defer closer.Close()
	opentracing.SetGlobalTracer(tracer)

	// 4. 创建服务实例
	productDataService := service.NewProductDataService(rp)

	// 5. 创建服务和初始化
	srv := micro.NewService()
	srv.Init(
		micro.Name(serviceName),
		micro.Version(version),
		micro.Registry(consulReg),
		micro.WrapHandler(opentracingFn.NewHandlerWrapper(opentracing.GlobalTracer())), // 绑定链路追踪
	)

	// 6. 注册 handler
	if handlerErr := pbproduct.RegisterProductHandler(srv.Server(), &handler.Product{ProductDataService: productDataService}); handlerErr != nil {
		log.Fatal(handlerErr)
	}

	// 7. 运行服务
	if runErr := srv.Run(); runErr != nil {
		log.Fatal(runErr)
	}
}
  • 这里基于前文,做了稍许改动,接入了jaeger服务
  • 上面一些jaeger的配置,也可以在consul配置中心读取,这里仅做简单演示
  • 关于 jaeger 的核心代码如上,可后续作为参考

3 )相关经验参考

  • 链路追踪数据写入的过程可以加入 kafaka 缓冲压力
  • 我们可以通过链路追踪开发发现我们是否有循环调用
  • 在链路中非必要尽量避免带入异步场景的span
    • 异步场景,比如写入日志,操作数据库
    • 把这些操作加入span, 也没有一个明确返回的时间
    • 特别不利于排错
Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码) Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)。 阅读详情

相关推荐

使用 ArxivLoader 从 arXiv 加载学术文献并实现高效文档处理

arXiv是一个开放获取的学术存储平台,涵盖了物理、数学、计算机科学等多个领域的 200 万篇学术论文。这些文献中包含了如逻辑推理、机器学习等热门领域的最新研究进展。通过使用 ArxivLoader,我们可以轻松地搜索和加载 arXiv 上的学术文献,并将其转换为文本以供分析或应用于下游任务,例如问答系统、摘要生成或知识图谱构建。有时我们并不需要完整的文献内容,而是只需要摘要用于快速预览。可以使用 get_summaries_as_docs()# 获取文献摘要# 查看第一篇摘要。

hgSdaegva的博客 889

go-micro V2 从零开始(八)集成链路追踪工具jaeger

本文相关代码:gitee 文章目录前言步骤一、hystrix-go二、API网关2.1 创建目录2.2 编辑main.go 前言 这一章我们演示如何在网关中集成熔断器器Hystrix。 步骤 一、hystrix-go hystrix是一个容错库,旨在隔离指向远程系统,服务和第三方库的请求,杜绝级联故障,并在复杂的分布式系统中实现弹性,毕竟在分布式系统中,故障是不可避免的。 此项目脱胎于由Netflix开源的同名java项目。https://github.com/Netflix/Hystrix Hystr

hotcoffie的博客 1112

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

(16)go-micro微服务jaeger链路追踪

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等至此,go-micro微服务jaeger链路追踪开发工作就正式完成。接下来就开始Prometheus监控的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。欢迎大家加入夏沫の梦的学习交流进行学习交流经验,点击。

夏沫の梦的博客 1351

【网络原理】HTTP 请求 (Request)详解

【网络原理】HTTP 请求 (Request)详解,认识URLquery string关于 URL encode, GET方法,POST 方法,GET 和 POST 的区别,User-Agent (简称 UA),Referer,Cookie

ZXT的博客 1万+

手把手教你用STM32+LAN8720搭建以太网通信模块(含原理图)

本文详细介绍了如何使用STM32微控制器与LAN8720物理层芯片搭建以太网通信模块,涵盖硬件设计、软件配置及常见问题排查。重点讲解了LAN8720的低功耗设计、RMII接口简化布线等特性,以及STM32CubeMX配置和LwIP协议栈移植技巧,助力开发者快速实现稳定可靠的嵌入式网络通信。

CAT789的专栏 416

【链路追踪】「Go语言」OpenTelemetry实现[gin, gRPC, log, gorm, redis]的集成

go语言OpenTelemetry快速体验, 实现[gin, gRPC, log, gorm, redis]的集成

Jzin的博客 5624

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2770

[RPC/HTTP][链路追踪]Jaeger Micro2 Gin RPC、HTTP链路追踪

在RPC通信中,由于是分布式微服务,所以说接口之间的调用可能会变得复杂,链路之间的追踪、查看接口的健康状态,什么接口有问题,什么接口实现的时间长,这都是非常有必要观测的,链路追踪的图形化界面非常直观,这里我们就介绍一下如何使用Jaeger实现追踪过程。

XiAoRayL的博客 840

通达信烽火起爆指标公式

STICKLINE(IF(起爆666,-120,0),+33,0,3.4,0),COLOR007777;STICKLINE(IF(起爆666,-120,0),+33,0,1.8,0),COLOR009999;STICKLINE(IF(起爆666,-120,0),+33,0,1.2,0),COLOR00BBBB;STICKLINE(IF(起爆666,-120,0),+33,0,0.6,0),COLOR00DDDD;STICKLINE(起爆666,0,100,9999,0)*起爆,COLOR000000;

zhibiaogong的博客 3893

SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

本来昨天就应该也记录下,免得忘记的,但是有点晚了,酒没写,真的是被坑惨了。当然这也是追求最新的代价,也是对新技术、老知识点的重温。依赖更粒度让架构的知识面更高,需要非常清楚另外说不定是有新的负载均衡要出现了,就想当初loadbalancer取代Ribbon一样好了,真是坑了半夜,昨晚都没有写,今天才复盘,希望能帮到大家,让更多在坑里的技术人爬出来。

zwrlj527的专栏 1998

go-micro项目实战四 链路追踪

链路追踪 微服务架构下,所有的服务都分散在不同的地方,一旦某个服务出现问题,排查起来很费时费力。所以在微服务的演进下,需要一个全链路追踪系统来分析服务的运行状态。 go-micro的trace插件 Micro通过Wrapper实现了三种trace接口,aswxray,opencensus,opentracing。第一个是亚马逊AWS的。没有尝试。 opentracing是一个开源的标准。提供对厂商...

一个不靠谱的程序员 6055

汽车轮胎动平衡背后的秘密:如何用惯性主轴原理消除方向盘抖动

本文深入解析了汽车轮胎动平衡的核心原理,即利用惯性主轴原理消除高速行驶时的方向盘抖动。文章从方向盘抖动的现象出发,阐释了动不平衡产生的物理本质,并详细介绍了如何通过动平衡机测量、计算与校正,使轮胎-轮毂系统的实际旋转轴回归其惯性主轴,从而实现稳定运转。

grafana6viz的博客 347

【go-micro实践】jaeger分布式链路追踪

github完整代码地址 个人博客 安装jaeger jaeger提供一个all in one 的docker镜像,可以快速搭建实验环境 docker run -d --name jaeger -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778...

weixin_33726318的博客 1654

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

go 链路追踪_go-micro V2 从零开始(八)集成链路追踪工具jaeger

本文相关代码:gitee前言这一章我们继续使用go-plugins库中插件,以Wrapper方式集成链路追踪工具jaeger。步骤一、jaeger1.1 简介Jaeger是一个GO语言开发的微服务链路追踪工具,用于分布式系统监控和故障排除,他的主要特性包括:分布式上下文传播 分布式事务监控 根本原因分析服务依赖关系分析 性能/延迟优化以上内容翻译自jaeger官方文档,更多内容请查阅官网:Jaeg...

weixin_32166921的博客 443

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

go 链路追踪_【go-micro实践】jaeger分布式链路追踪

安装jaegerjaeger提供一个all in one 的docker镜像,可以快速搭建实验环境docker run -d --name jaeger-e COLLECTOR_ZIPKIN_HTTP_PORT=9411-p 5775:5775/udp-p 6831:6831/udp-p 6832:6832/udp-p 5778:5778-p 16686:16686-p 14268:14268-p...

weixin_29343187的博客 621

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

go 链路追踪_go-micro项目实战四 链路追踪-Go语言中文社区

链路追踪微服务架构下,所有的服务都分散在不同的地方,一旦某个服务出现问题,排查起来很费时费力。所以在微服务的演进下,需要一个全链路追踪系统来分析服务的运行状态。go-micro的trace插件Micro通过Wrapper实现了三种trace接口,aswxray,opencensus,opentracing。第一个是亚马逊AWS的。没有尝试。opentracing是一个开源的标准。提供对厂商中立的 ...

weixin_39906114的博客 452

【go-micro实践】micro 微服务架构实践

Github完整代码地址 个人博客 微服务架构 micro拥有完整的微服务生态,使用它构建一整套完整的微服务架构。下图是作者在博客中给出的使用micro的微服务架构图。 使用micro框架提供的工具Micro API(命令 micro api 运行)即可启动启动一个API网关。 $ go get -u github.com/micro/micro​ $ micro api --help NA...

weixin_34199335的博客 377

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

1 )目录结构 可以看到这是基于领域模型搭建的框架,默认是通过 go-micro生成的模板,之后进行修改的 proto 下的 pb.go 和 pb.micro.go 是通过 Makefile 中配置的 protoc 命令生成的 $ 2 ) 核心 main.go 以下是一些注意事项 服务初始化需要借助mysql,mysql的一些连接信息是从consul配置中心获取的 在初始化的时候,需要先运行一次 和 上面 中的参数50, 100可以写入环境变量来获取,这个可以根据具体资源情况进行调节

Wang的专栏 2360

Golang微服务开发实践

github: github.com/yun-mu/Micr… 微服务概念学习:可参考 Nginx 的微服务文章 微服务最佳实践:可参考 微服务最佳实践 demo 简介 服务: consignment-service(货运服务) user-service(用户服务) log-service (日志服务) vessel-service(货船服务) api-service (API 服务) 用到的...

weixin_34049032的博客 1896

(3)go-micro微服务项目搭建

账户功能是每一个系统都绕不开的一部分,所以本次搭建的微服务项目就是账户微服务项目,其中向外暴露的功能有:登录注册查询用户信息修改信息发送注册邮件发送重置密码邮件重置密码获取权限修改权限退出账号删除账号禁用账号启用账号提供的功能总共有13个,基本上包含了账户相关的所有功能!在本次微服务项目中使用到的技术包括:DockerMysqlRedisZap日志Consul配置、注册中心发送邮件(QQ邮箱)Jaeger链路追踪。

夏沫の梦的博客 1111

go-micro v3

Go Micro

u011619480的专栏 507

go项目实战——Go微服务入门到容器化实践,落地可观测微服务项目

系统完整的Go微服务技术栈+实用容器化落地方案+服务级监控观测台。

mirana的专栏 585

2026 后端开发必知:微服务架构实战指南 - 从单体到云原生

本文从实战角度讲解微服务架构迁移:对比单体与微服务架构,介绍服务拆分原则、技术栈选型(Spring Cloud/Nacos/Gateway)、服务通信方式、Docker/K8s容器化、监控运维方案,并分享迁移步骤与最佳实践,助你平滑演进到云原生架构。

xswlw_guoquanbao的博客 219
上一篇: Go微服务: 链路追踪jaeger原理和环境搭建
下一篇: Go微服务: 服务熔断hystrix原理
Wang's Blog
博客等级 码龄12年 7433粉丝 2419原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值