使用XORM和Opentracing,让你彻彻底底摆脱繁琐的CRUD的阴影,将工作重心转移至业务逻辑
使用XORM和Opentracing,让你彻彻底底摆脱繁琐的CRUD的阴影,将工作重心转移至业务逻辑
系统环境
go version go1.14.3 windows/amd64
xorm.io/xorm 1.0.3
一、 ⚠️提醒
XORM版本1.0.2及以上(支持以Hook钩子函数方式侵入XORM执行过程)
一定要看Q&A,看Q&A,看Q&A!
在之前的 Golang实战 XORM搭配OpenTracing+Jaeger链路监控让SQL执行一览无遗 文章中使用的侵入日志模块的方式是1.0.2版本以下侵入的方式,但是这种方式存在并发问题,会丢失span,如果升级到了1.0.2版本或以上就应该使用Hook钩子的方式侵入
二、过程
1. 使用Docker启动Opentracing + jaeger服务
使用的镜像:jaegertracing/all-in-one:1.18
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服务成功运行。
这里不详细讲解 Opentracing 的使用,有兴趣的同学可以查看官方技术文档
同时这里搭配的 jaeger 进行使用,方便我们调试和线上小规模部署
2. 安装Xorm、OpenTracing和Jaeger
Xorm - 需要 1.0.2 版本及以上才能支持Hook钩子函数
go get xorm.io/xorm
OpenTracing和Jaeger - 只需要安装Jaeger-Client就会依赖Opentracing
go get github.com/uber/jaeger-client-go
3. 初始化Opentracing –> 通常由服务统一初始化
main.go
package main
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.ReporterConfi