我是靠谱客的博主 清秀雪碧,这篇文章主要介绍基于jaeger和grpc实现的rpc调用链跟踪模块grpc-jaeger说明grpc-jaeger源依赖grpc-jaeger使用示例结合jaeger服务进行测试,现在分享给大家,希望可以做个参考。

grpc-jaeger说明

具体源码可参考我的github源码

grpc-jaeger是基于Go的针对gRPC的一种拦截器实现,用于结合jaeger来实现rpc调用链跟踪;可用于集成到微服务的分布式trace功能中。

grpc包中对外暴露了两个接口:grpc.UnaryClientInterceptor及grpc.UnaryServerInterceptor, 只要将这两个函数重写即可以自定义拦截器,从而注入jaeger相关跟踪代码。

grpc-jaeger源依赖

复制代码
1
2
3
google.golang.org/grpc github.com/opentracing/opentracing-go github.com/uber/jaeger-client-go

grpc-jaeger使用示例

  • 在grpc client端,添加grpc-jaeger
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import ( "fmt" "os" gtrace "github.com/moxiaomomo/grpc-jaeger" "google.golang.org/grpc" ) func rpcCli(dialOpts []grpc.DialOption) { conn, err := grpc.Dial("127.0.0.1:8001", dialOpts...) if err != nil { fmt.Printf("grpc connect failed, err:%+vn", err) return } defer conn.Close() // TODO: do some rpc-call // ... } func main() { dialOpts := []grpc.DialOption{grpc.WithInsecure()} tracer, _, err := gtrace.NewJaegerTracer("testCli", "127.0.0.1:6831") if err != nil { fmt.Printf("new tracer err: %+vn", err) os.Exit(-1) } if tracer != nil { dialOpts = append(dialOpts, gtrace.DialOption(tracer)) } // do rpc-call with dialOpts rpcCli(dialOpts) }
  • 在grpc server端,添加grpc-jaeger
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import ( "fmt" "os" gtrace "github.com/moxiaomomo/grpc-jaeger" "google.golang.org/grpc" ) func main() { var servOpts []grpc.ServerOption tracer, _, err := gtrace.NewJaegerTracer("testSrv", "127.0.0.1:6831") if err != nil { fmt.Printf("new tracer err: %+vn", err) os.Exit(-1) } if tracer != nil { servOpts = append(servOpts, gtrace.ServerOption(tracer)) } svr := grpc.NewServer(servOpts...) // TODO: register some rpc-service to grpc server ln, err := net.Listen("tcp", "127.0.0.1:8001") if err != nil { os.Exit(-1) } svr.Serve(ln) }

结合jaeger服务进行测试

1)部署jaeger

假设在某个节点已部署好jaeger测试服务,
jaeger-agent地址为192.168.1.100:6831
jaeger-ui地址为http://192.168.1.100:16686/

2)运行测试

具体测试用例在wrapper_test.go中,可直接在该文件当前目录中运行go test

复制代码
1
2
3
4
5
6
7
8
9
10
11
test@MG:/yourpath/grpc-jaeger$ go test 2018/06/17 15:06:05 Initializing logging reporter 2018/06/17 15:06:06 Initializing logging reporter SayHello Called. 2018/06/17 15:06:06 Reporting span 107bf923fcfc238e:1f607766f1329efd:107bf923fcfc238e:1 2018/06/17 15:06:06 Reporting span 107bf923fcfc238e:107bf923fcfc238e:0:1 call sayhello suc, res:message:"Hi im testern" PASS ok github.com/moxiaomomo/grpc-jaeger 3.004s

3)查看jaegerUI

打开http://192.168.1.100:16686/后查询对应Service, 可看到以下跟踪结果:jaegerui

最后

以上就是清秀雪碧最近收集整理的关于基于jaeger和grpc实现的rpc调用链跟踪模块grpc-jaeger说明grpc-jaeger源依赖grpc-jaeger使用示例结合jaeger服务进行测试的全部内容,更多相关基于jaeger和grpc实现内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(113)

评论列表共有 0 条评论

立即
投稿
返回
顶部