Golang gRPC實踐 連載六 內置Trace

內置Trace

grpc默認提供了客戶端和服務端的trace日誌,惋惜沒有提供自定義接口,當前只能查看基本的事件日誌和請求日誌,對於基本的請求狀態查看也是頗有幫助的,客戶端與服務端基本一致,這裏已服務端開啓trace爲例,修改hello項目的server代碼:git

server/main.gogithub

package main

import (
    "net"
    "net/http"

    pb "git.vodjk.com/go-grpc/example/proto" // 引入編譯生成的包

    "golang.org/x/net/context"
    "golang.org/x/net/trace"  // 引入trace包
    "google.golang.org/grpc"
    "google.golang.org/grpc/grpclog"
)

const (
    // Address gRPC服務地址
    Address = "127.0.0.1:50052"
)

// 定義helloService並實現約定的接口
type helloService struct{}

// HelloService ...
var HelloService = helloService{}

func (h helloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    resp := new(pb.HelloReply)
    resp.Message = "Hello " + in.Name + "."

    return resp, nil
}

func main() {
    listen, err := net.Listen("tcp", Address)
    if err != nil {
        grpclog.Fatalf("failed to listen: %v", err)
    }

    // 實例化grpc Server
    s := grpc.NewServer()

    // 註冊HelloService
    pb.RegisterHelloServer(s, HelloService)

    // 開啓trace
    go startTrace()

    grpclog.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)
    grpclog.Println("Trace listen on 50051")
}

這裏咱們開啓一個http服務監聽50051端口,用來查看grpc請求的trace信息golang

運行:tcp

go run main.go

Listen on 127.0.0.1:50052                                                       
Trace listen on 50051

// 進入client目錄執行一次客戶端請求

服務端事件查看

訪問:localhost:50051/debug/events,結果如圖:google

圖片描述

能夠看到服務端註冊的服務和服務正常啓動的事件信息,默認trace中只有這一個事件spa

請求日誌信息查看

訪問:localhost:50051/debug/requests,結果如圖:debug

圖片描述

這裏能夠顯示最近的請求狀態,包括請求的服務、參數、耗時、響應,對於簡單的狀態查看仍是很方便的,默認值顯示最近10條記錄,不能夠修改。日誌

參考

本系列示例代碼

相關文章
相關標籤/搜索