gRPC stats
statsはHandlerで取得できる
code:go
import (
"google.golang.org/grpc"
"google.golang.org/grpc/stats"
)
type myStatsHandler struct {}
func (h *myStatsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
// Tag the RPC context, if needed
return ctx
}
func (h *myStatsHandler) HandleRPC(ctx context.Context, stat stats.RPCStats) {
// Handle the RPC stats, e.g., log or record metrics
}
func (h *myStatsHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context {
// Tag the connection context, if needed
return ctx
}
func (h *myStatsHandler) HandleConn(ctx context.Context, stat stats.ConnStats) {
// Handle the connection stats, e.g., log or record metrics
}
func main() {
server := grpc.NewServer(grpc.StatsHandler(&myStatsHandler{}))
// Register services and start server
}
grpc.StatsHandlerでstatsを取得できるhandlerを定義できる
4つのメソッドを実装する必要がある
TagRPC
RPCが開始される直前に呼び出される
基本的にはRPCに関連するcontextを設定する
TraceID
RequestID
etc...
HandleRPC
RPCのライフサイクルのさまざまなところで呼ばれる
stats.Begin
stats.InPayload
stats.End
TagConn
新しいコネクションが確立される直前に呼ばれる
コネクションに関するcontextを設定する
HandleConn
コネクションのライフサイクルのさまざまなところで呼ばれる
stats.ConnBegin
stats.ConnEnd