Golang实战 XORM搭配OpenTracing+Jaeger链路监控让SQL执行一览无遗

系统环境

go version go1.14.3 windows/amd64

⚠️注意

本文章使用的是 xorm 1.0.0 版本,同时实现的方式不是并发安全的,xorm新版本已经加入Hook钩子函数,通过钩子函数可以实现并发安全的分布式链路追踪,具体请点击:

🌇 Golang XORM实现分布式链路追踪(源码分析,分布式CRUD必学)

⭐ 项目Gitee源码

一、Docker运行JaegerTracing-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 14250:14250 -p 9411:9411 jaegertracing/all-in-one:1.18

浏览器访问localhost:16686,可以看到JaegerUI界面,如下所示:
在这里插入图片描述

至此,以内存作为数据寄存方式的OpenTracing+Jaeger服务成功运行。

二、GoModule安装Xorm、OpenTracing和Jaeger

Xorm - 需要 1.0 版本及以上才能支持传递Context上下文

go get xorm.io/xorm

OpenTracing和Jaeger - 只需要安装Jaeger-Client就会依赖Opentracing

go get github.com/uber/jaeger-client-go

三、初始化Opentracing和Jaeger

func initJaeger() (closer io.Closer, err error) {
   
	// 根据配置初始化Tracer 返回Closer
	tracer, closer, err := (&config.Configuration{
   
		ServiceName: "xormWithTracing",
		Disabled:    false,
		Sampler: &config.SamplerConfig{
   
			Type: jaeger.SamplerTypeConst,
			// param的值在0到1之间,设置为1则将所有的Operation输出到Reporter
			Param: 1,
		},
		Reporter: &config.ReporterConfig{
   
			LogSpans:           true,
			LocalAgentHostPort: "localhost:6831",
		},
	}).NewTracer()
	if err != nil {
   
		return
	}

	// 设置全局Tracer - 如果不设置将会导致上下文无法生成正确的Span
	opentracing.SetGlobalTracer(tracer)
	return
}

在这里插入图片描述

四、通过日志模块将链路监控侵入到XORM执行逻辑中

  1. XORM通过其中Log包里面的ContextLogger接口定义了它需要的日志实例是怎么样的,我们可以在外部实现该接口就可以将链路监控的逻辑侵入到XORM的执行过程
// xorm.io\xorm@v1.0.2\log
// ContextLogger represents a logger interface with context
type ContextLogger interface {
   
	SQLLogger

	Debugf(format 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值