内置Trace
grpc内置了客户端和服务端的请求追踪,基于golang.org/x/net/trace
包实现,默认是开启状态,可以查看事件和请求日志,对于基本的请求状态查看调试也是很有帮助的,客户端与服务端基本一致,这里以服务端开启trace server为例,修改hello项目服务端代码:
目录结构
1 2 3 4 5 6 7 8 9
| |—— hello_trace/ |—— client/ |—— main.go // 客户端 |—— server/ |—— main.go // 服务端 |—— proto/ |—— hello/ |—— hello.proto // proto描述文件 |—— hello.pb.go // proto编译后文件
|
示例代码
服务端
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package main import ( "fmt" "net" "net/http" pb "hellogrpc/proto/hello" "context" "golang.org/x/net/trace" "google.golang.org/grpc" "log" ) const ( Address = "127.0.0.1:50052" )
type helloService struct{}
var HelloService = helloService{}
func (h helloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { resp := new(pb.HelloResponse) resp.Message = fmt.Sprintf("Hello %s.", in.Name) return resp, nil } func main() { grpc.EnableTracing = true listen, err := net.Listen("tcp", Address) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterHelloServer(s, HelloService) go startTrace() log.Println("Listen on " + Address) s.Serve(listen) } func startTrace() { trace.AuthRequest = func(req *http.Request) (any, sensitive bool) { return true, true } go http.ListenAndServe(":50051", nil) log.Println("Trace listen on 50051") }
|
客户端
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
| package main import ( pb "hellogrpc/proto/hello" "golang.org/x/net/context" "google.golang.org/grpc" "log" ) const ( Address = "127.0.0.1:50052" ) func main() { conn, err := grpc.Dial(Address, grpc.WithInsecure()) if err != nil { log.Fatalln(err) } defer conn.Close() c := pb.NewHelloClient(conn) req := &pb.HelloRequest{Name: "gRPC"} res, err := c.SayHello(context.Background(), req) if err != nil { log.Fatalln(err) } log.Println(res.Message) }
|
这里我们开启一个http服务监听50051端口,用来查看grpc请求的trace信息
运行:
1 2 3 4 5
| $ go run main.go Listen on 127.0.0.1:50052
Trace listen on 50051 # 进入client目录执行一次客户端请求
|
服务端事件查看
访问:localhost:50051/debug/events,结果如图:
图片描述
可以看到服务端注册的服务和服务正常启动的事件信息,默认trace中只有这一个事件
请求日志信息查看
访问:localhost:50051/debug/requests,结果如图:
图片描述
这里可以显示最近的请求状态,包括请求的服务、参数、耗时、响应,对于简单的状态查看还是很方便的,默认值显示最近10条记录,不可以修改。