stats_monitoring/

directory
v0.0.0-...-a764d3f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2025 License: Apache-2.0

README

Stats Monitoring Handler

This example demonstrates the use of the stats package for reporting various network and RPC stats. Note that all fields are READ-ONLY and the APIs of the stats package are experimental.

Try it

go run server/main.go
go run client/main.go

Explanation

gRPC provides a mechanism to hook on to various events (phases) of the request-response network cycle through the stats.Handler interface. To access these events, a concrete type that implements stats.Handler should be passed to grpc.WithStatsHandler() on the client side and grpc.StatsHandler() on the server side.

The HandleRPC(context.Context, RPCStats) method on stats.Handler is called multiple times during a request-response cycle, and various event stats are passed to its RPCStats parameter (an interface). The concrete types that implement this interface are: *stats.Begin, *stats.InHeader, *stats.InPayload, *stats.InTrailer, *stats.OutHeader, *stats.OutPayload, *stats.OutTrailer, and *stats.End. The order of these events differs on client and server.

Similarly, the HandleConn(context.Context, ConnStats) method on stats.Handler is called twice, once at the beginning of the connection with *stats.ConnBegin and once at the end with *stats.ConnEnd.

The stats.Handler interface also provides TagRPC(context.Context, *RPCTagInfo) context.Context and TagConn(context.Context, *ConnTagInfo) context.Context methods. These methods are mainly used to attach network related information to the given context.

The TagRPC(context.Context, *RPCTagInfo) context.Context method returns a context from which the context used for the rest lifetime of the RPC will be derived. This behavior is consistent between the gRPC client and server.

The context returned from TagConn(context.Context, *ConnTagInfo) context.Context has varied lifespan:

  • In the gRPC client: The context used for the rest lifetime of the RPC will NOT be derived from this context. Hence the information attached to this context can only be consumed by HandleConn(context.Context, ConnStats) method.
  • In the gRPC server: The context used for the rest lifetime of the RPC will be derived from this context.

NOTE: The stats package should only be used for network monitoring purposes, and not as an alternative to interceptors.

Directories

Path Synopsis
Binary client is an example client to illustrate the use of the stats handler.
Binary client is an example client to illustrate the use of the stats handler.
Binary server is an example server to illustrate the use of the stats handler.
Binary server is an example server to illustrate the use of the stats handler.
Package statshandler is an example pkg to illustrate the use of the stats handler.
Package statshandler is an example pkg to illustrate the use of the stats handler.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL