Golang中gRPC内置Trace的实现

 更新时间:2025年03月03日 10:46:41   作者:两片空白  
gRPC内置了基于golang.org/x/net/trace包的客户端和服务端请求追踪,默认开启状态,可以查看事件和请求日志,帮助调试,具有一定的参考价值,感兴趣的可以了解一下

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang利用函数闭包实现简单的中间件

    golang利用函数闭包实现简单的中间件

    中间件设计模式是一种常见的软件设计模式,它在许多编程语言和框架中被广泛应用,这篇文章主要为大家介绍一下golang利用函数闭包实现一个简单的中间件,感兴趣的可以了解下
    2023-10-10
  • golang post请求常用的几种方式小结

    golang post请求常用的几种方式小结

    这篇文章主要介绍了golang post请求常用的几种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言实现IP段范围校验示例

    Go语言实现IP段范围校验示例

    这篇文章主要介绍了Go语言实现IP段范围校验示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Golang Map value不可寻址使用指针类型代替示例详解

    Golang Map value不可寻址使用指针类型代替示例详解

    这篇文章主要为大家介绍了Golang Map value不可寻址使用指针类型代替示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 一文搞懂Golang 时间和日期相关函数

    一文搞懂Golang 时间和日期相关函数

    这篇文章主要介绍了Golang 时间和日期相关函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Go语言Handler详细说明

    Go语言Handler详细说明

    这篇文章主要介绍了Go语言Handler详细说明,Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,需要的朋友可以参考下
    2022-04-04
  • sublime安装支持go和html的插件

    sublime安装支持go和html的插件

    这篇文章主要介绍了sublime安装支持go和html的插件,需要的朋友可以参考下
    2015-01-01
  • Golang unsafe包中的类型和函数详解

    Golang unsafe包中的类型和函数详解

    Golang中的unsafe包用于在运行时进行低级别的操作,这些操作通常是不安全的,因为可以打破Golang的类型安全性和内存安全性,使用 unsafe包的程序可能会影响可移植性和兼容性,接下来看下unsafe包中的类型和函数
    2023-08-08
  • 使用Go语言实现发送HTTP请求并给GET添加参数

    使用Go语言实现发送HTTP请求并给GET添加参数

    在开发Web应用程序时,我们经常需要向服务器发送HTTP请求,本文将介绍一下使用Go语言发送HTTP请求,并给GET请求添加参数的方法,感兴趣的小伙伴可以了解一下
    2023-07-07
  • 定位并修复 Go 中的内存泄露问题

    定位并修复 Go 中的内存泄露问题

    Go 是一门带 GC 的语言,这篇文章回顾了我如何发现内存泄漏、如何修复它,以及我如何修复 Google 示例 Go 代码中的类似问题,以及我们如何改进我们的库以防止将来发生这种情况,感兴趣的朋友一起看看吧
    2021-10-10

最新评论