Golang中gRPC內置Trace的實現(xiàn)
gRPC內置了客戶端和服務端的請求追蹤,基于golang.org/x/net/trace包實現(xiàn),默認是開啟狀態(tài),可以查看事件和請求日志,對于基本的請求狀態(tài)查看調試也是很有幫助的,客戶端與服務端基本一致,這里以服務端開啟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"
// 定義結構 實現(xiàn)約定接口
type helloService struct{}
// 服務
var HelloService = helloService{}
// 實現(xiàn)服務接口
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服務監(jiān)聽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

這里可以顯示最近的請求狀態(tài),包括請求的服務,參數(shù),耗時,響應,對于簡單的狀態(tài)查看還是很方便,默認顯示最近10條記錄。
到此這篇關于Golang中gRPC內置Trace的實現(xiàn)的文章就介紹到這了,更多相關Golang gRPC內置Trace內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang利用函數(shù)閉包實現(xiàn)簡單的中間件
中間件設計模式是一種常見的軟件設計模式,它在許多編程語言和框架中被廣泛應用,這篇文章主要為大家介紹一下golang利用函數(shù)閉包實現(xiàn)一個簡單的中間件,感興趣的可以了解下2023-10-10
Golang Map value不可尋址使用指針類型代替示例詳解
這篇文章主要為大家介紹了Golang Map value不可尋址使用指針類型代替示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
使用Go語言實現(xiàn)發(fā)送HTTP請求并給GET添加參數(shù)
在開發(fā)Web應用程序時,我們經(jīng)常需要向服務器發(fā)送HTTP請求,本文將介紹一下使用Go語言發(fā)送HTTP請求,并給GET請求添加參數(shù)的方法,感興趣的小伙伴可以了解一下2023-07-07

