• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Golang中gRPC内置Trace的实现

    发布者: 琛瑞6678 | 发布时间: 2025-8-14 07:33| 查看数: 20| 评论数: 0|帖子模式

    gRPC内置了客户端和服务端的请求追踪,基于golang.org/x/net/trace包实现,默认是开启状态,可以查看事件和请求日志,对于基本的请求状态查看调试也是很有帮助的,客户端与服务端基本一致,这里以服务端开启trace server为例,代码如下。

    目录结构



    代码


    • 服务端
    1. package main

    2. import (
    3.         "context"
    4.         "fmt"
    5.         "log"
    6.         "net"
    7.         "net/http"
    8.         hello "sample-app/grpc/proto"

    9.         "golang.org/x/net/trace"
    10.         "google.golang.org/grpc"
    11. )

    12. // gprc服务器地址
    13. var Addr = "127.0.0.1:8080"

    14. // 定义结构 实现约定接口
    15. type helloService struct{}

    16. // 服务
    17. var HelloService = helloService{}

    18. // 实现服务接口
    19. func (h helloService) SayHello(c context.Context, req *hello.HelloRequest) (*hello.HelloResponse, error) {
    20.         resp := new(hello.HelloResponse)
    21.         resp.Message = fmt.Sprintf("Hello %s", req.Name)

    22.         return resp, nil
    23. }

    24. func init() {
    25.         //使用trace
    26.         grpc.EnableTracing = true
    27. }

    28. func main() {
    29.         ls, err := net.Listen("tcp", Addr)
    30.         if err != nil {
    31.                 fmt.Println(err)
    32.                 return
    33.         }
    34.         //实例化grpc server
    35.         server := grpc.NewServer()
    36.         //注册HelloService
    37.         hello.RegisterHelloServer(server, HelloService)
    38.         //开启trace
    39.         go startTrace()

    40.         fmt.Println("Listen on " + Addr)
    41.         server.Serve(ls)
    42. }

    43. func startTrace() {
    44.         trace.AuthRequest = func(req *http.Request) (any, sensitive bool) {
    45.                 return true, true
    46.         }

    47.         go http.ListenAndServe(":8081", nil)
    48.         log.Println("trace listen on 8081")
    49. }
    复制代码
    这里我们开启一个http服务监听8081端口,用来查看grpc请求的trace信息。
    运行:


    • 客户端
    1. package main

    2. import (
    3.         "context"
    4.         "fmt"
    5.         hello "sample-app/grpc/proto"

    6.         "google.golang.org/grpc"
    7. )

    8. const (
    9.         Addr = "127.0.0.1:8080"
    10. )

    11. func main() {
    12.         conn, err := grpc.Dial(Addr, grpc.WithInsecure())
    13.         if err != nil {
    14.                 fmt.Println("Dial fail", err)
    15.                 return
    16.         }
    17.         defer conn.Close()
    18.         //初始化服务器
    19.         c := hello.NewHelloClient(conn)
    20.         //单项请求
    21.         req := new(hello.HelloRequest)
    22.         req.Name = "gRPC"
    23.         resp, err := c.SayHello(context.Background(), req)
    24.         if err != nil {
    25.                 fmt.Println("say hello fail", err)
    26.                 return
    27.         }
    28.         fmt.Println(resp.Message)
    29. }
    复制代码

    • 请求


    服务器事件查看

    访问:localhost:8081/debug/events,结果如图所示:

    可以看到服务端注册的服务和服务正常启动的事件信息。

    请求日志信息查看

    访问:localhost:8081/debug/requests

    这里可以显示最近的请求状态,包括请求的服务,参数,耗时,响应,对于简单的状态查看还是很方便,默认显示最近10条记录。
    到此这篇关于Golang中gRPC内置Trace的实现的文章就介绍到这了,更多相关Golang gRPC内置Trace内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表