gRPC内置了客户端和服务端的请求追踪,基于golang.org/x/net/trace包实现,默认是开启状态,可以查看事件和请求日志,对于基本的请求状态查看调试也是很有帮助的,客户端与服务端基本一致,这里以服务端开启trace server为例,代码如下。
目录结构
代码
- package main
- import (
- "context"
- "fmt"
- "log"
- "net"
- "net/http"
- hello "sample-app/grpc/proto"
- "golang.org/x/net/trace"
- "google.golang.org/grpc"
- )
- // gprc服务器地址
- var Addr = "127.0.0.1:8080"
- // 定义结构 实现约定接口
- type helloService struct{}
- // 服务
- var HelloService = helloService{}
- // 实现服务接口
- func (h helloService) SayHello(c context.Context, req *hello.HelloRequest) (*hello.HelloResponse, error) {
- resp := new(hello.HelloResponse)
- resp.Message = fmt.Sprintf("Hello %s", req.Name)
- return resp, nil
- }
- func init() {
- //使用trace
- grpc.EnableTracing = true
- }
- func main() {
- ls, err := net.Listen("tcp", Addr)
- if err != nil {
- fmt.Println(err)
- return
- }
- //实例化grpc server
- server := grpc.NewServer()
- //注册HelloService
- hello.RegisterHelloServer(server, HelloService)
- //开启trace
- go startTrace()
- fmt.Println("Listen on " + Addr)
- server.Serve(ls)
- }
- func startTrace() {
- trace.AuthRequest = func(req *http.Request) (any, sensitive bool) {
- return true, true
- }
- go http.ListenAndServe(":8081", nil)
- log.Println("trace listen on 8081")
- }
复制代码 这里我们开启一个http服务监听8081端口,用来查看grpc请求的trace信息。
运行:
- package main
- import (
- "context"
- "fmt"
- hello "sample-app/grpc/proto"
- "google.golang.org/grpc"
- )
- const (
- Addr = "127.0.0.1:8080"
- )
- func main() {
- conn, err := grpc.Dial(Addr, grpc.WithInsecure())
- if err != nil {
- fmt.Println("Dial fail", err)
- return
- }
- defer conn.Close()
- //初始化服务器
- c := hello.NewHelloClient(conn)
- //单项请求
- req := new(hello.HelloRequest)
- req.Name = "gRPC"
- resp, err := c.SayHello(context.Background(), req)
- if err != nil {
- fmt.Println("say hello fail", err)
- return
- }
- fmt.Println(resp.Message)
- }
复制代码
服务器事件查看
访问:localhost:8081/debug/events,结果如图所示:
可以看到服务端注册的服务和服务正常启动的事件信息。
请求日志信息查看
访问:localhost:8081/debug/requests
这里可以显示最近的请求状态,包括请求的服务,参数,耗时,响应,对于简单的状态查看还是很方便,默认显示最近10条记录。
到此这篇关于Golang中gRPC内置Trace的实现的文章就介绍到这了,更多相关Golang gRPC内置Trace内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:互联网
免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作! |