package stats
import "google.golang.org/grpc/stats"
Package stats is for collecting and reporting various network and RPC stats. This package is for monitoring purpose only. All fields are read-only. All APIs are experimental.
Index ¶
- func SetTags(ctx context.Context, b []byte) context.Context
- func SetTrace(ctx context.Context, b []byte) context.Context
- func Tags(ctx context.Context) []byte
- func Trace(ctx context.Context) []byte
- type Begin
- type ConnBegin
- type ConnEnd
- type ConnStats
- type ConnTagInfo
- type DelayedPickComplete
- type End
- type Handler
- type InHeader
- type InPayload
- type InTrailer
- type MetricSet
- func NewMetricSet(metricNames ...string) *MetricSet
- func (m *MetricSet) Add(metricNames ...string) *MetricSet
- func (m *MetricSet) Join(metrics *MetricSet) *MetricSet
- func (m *MetricSet) Metrics() map[string]bool
- func (m *MetricSet) Remove(metricNames ...string) *MetricSet
- type OutHeader
- type OutPayload
- type OutTrailer
- type PickerUpdated
- type RPCStats
- type RPCTagInfo
Functions ¶
func SetTags ¶
SetTags attaches stats tagging data to the context, which will be sent in the outgoing RPC with the header grpc-tags-bin. Subsequent calls to SetTags will overwrite the values from earlier calls.
Deprecated: set the `grpc-tags-bin` header in the metadata instead.
func SetTrace ¶
SetTrace attaches stats tagging data to the context, which will be sent in the outgoing RPC with the header grpc-trace-bin. Subsequent calls to SetTrace will overwrite the values from earlier calls.
Deprecated: set the `grpc-trace-bin` header in the metadata instead.
func Tags ¶
Tags returns the tags from the context for the inbound RPC.
Deprecated: obtain the `grpc-tags-bin` header from metadata instead.
func Trace ¶
Trace returns the trace from the context for the inbound RPC.
Deprecated: obtain the `grpc-trace-bin` header from metadata instead.
Types ¶
type Begin ¶
type Begin struct {
// Client is true if this Begin is from client side.
Client bool
// BeginTime is the time when the RPC attempt begins.
BeginTime time.Time
// FailFast indicates if this RPC is failfast.
FailFast bool
// IsClientStream indicates whether the RPC is a client streaming RPC.
IsClientStream bool
// IsServerStream indicates whether the RPC is a server streaming RPC.
IsServerStream bool
// IsTransparentRetryAttempt indicates whether this attempt was initiated
// due to transparently retrying a previous attempt.
IsTransparentRetryAttempt bool
}
Begin contains stats for the start of an RPC attempt.
- Server-side: Triggered after `InHeader`, as headers are processed before the RPC lifecycle begins.
- Client-side: The first stats event recorded.
FailFast is only valid if this Begin is from client side.
func (*Begin) IsClient ¶
IsClient indicates if the stats information is from client side.
type ConnBegin ¶
type ConnBegin struct {
// Client is true if this ConnBegin is from client side.
Client bool
}
ConnBegin contains stats about connection establishment.
func (*ConnBegin) IsClient ¶
IsClient indicates if this is from client side.
type ConnEnd ¶
type ConnEnd struct {
// Client is true if this ConnEnd is from client side.
Client bool
}
ConnEnd contains stats about connection termination.
func (*ConnEnd) IsClient ¶
IsClient indicates if this is from client side.
type ConnStats ¶
type ConnStats interface {
// IsClient returns true if this ConnStats is from client side.
IsClient() bool
// contains filtered or unexported methods
}
ConnStats contains stats information about connections.
type ConnTagInfo ¶
type ConnTagInfo struct {
// RemoteAddr is the remote address of the corresponding connection.
RemoteAddr net.Addr
// LocalAddr is the local address of the corresponding connection.
LocalAddr net.Addr
}
ConnTagInfo defines the relevant information needed by connection context tagger.
type DelayedPickComplete ¶
type DelayedPickComplete struct{}
DelayedPickComplete indicates that the RPC is unblocked following a delay in selecting a connection for the call.
func (*DelayedPickComplete) IsClient ¶
func (*DelayedPickComplete) IsClient() bool
IsClient indicates DelayedPickComplete is available on the client.
type End ¶
type End struct {
// Client is true if this End is from client side.
Client bool
// BeginTime is the time when the RPC began.
BeginTime time.Time
// EndTime is the time when the RPC ends.
EndTime time.Time
// Trailer contains the trailer metadata received from the server. This
// field is only valid if this End is from the client side.
// Deprecated: use Trailer in InTrailer instead.
Trailer metadata.MD
// Error is the error the RPC ended with. It is an error generated from
// status.Status and can be converted back to status.Status using
// status.FromError if non-nil.
Error error
}
End contains stats about RPC completion.
func (*End) IsClient ¶
IsClient indicates if this is from client side.
type Handler ¶
type Handler interface {
// TagRPC can attach some information to the given context.
// The context used for the rest lifetime of the RPC will be derived from
// the returned context.
TagRPC(context.Context, *RPCTagInfo) context.Context
// HandleRPC processes the RPC stats.
HandleRPC(context.Context, RPCStats)
// TagConn can attach some information to the given context.
// The returned context will be used for stats handling.
// For conn stats handling, the context used in HandleConn for this
// connection will be derived from the context returned.
// For RPC stats handling,
// - On server side, the context used in HandleRPC for all RPCs on this
// connection will be derived from the context returned.
// - On client side, the context is not derived from the context returned.
TagConn(context.Context, *ConnTagInfo) context.Context
// HandleConn processes the Conn stats.
HandleConn(context.Context, ConnStats)
}
Handler defines the interface for the related stats handling (e.g., RPCs, connections).
type InHeader ¶
type InHeader struct {
// Client is true if this InHeader is from client side.
Client bool
// WireLength is the wire length of header.
WireLength int
// Compression is the compression algorithm used for the RPC.
Compression string
// Header contains the header metadata received.
Header metadata.MD
// The following fields are valid only if Client is false.
// FullMethod is the full RPC method string, i.e., /package.service/method.
FullMethod string
// RemoteAddr is the remote address of the corresponding connection.
RemoteAddr net.Addr
// LocalAddr is the local address of the corresponding connection.
LocalAddr net.Addr
}
InHeader contains stats about header reception.
- Server-side: The first stats event after the RPC request is received.
func (*InHeader) IsClient ¶
IsClient indicates if the stats information is from client side.
type InPayload ¶
type InPayload struct {
// Client is true if this InPayload is from client side.
Client bool
// Payload is the payload with original type. This may be modified after
// the call to HandleRPC which provides the InPayload returns and must be
// copied if needed later.
Payload any
// Length is the size of the uncompressed payload data. Does not include any
// framing (gRPC or HTTP/2).
Length int
// CompressedLength is the size of the compressed payload data. Does not
// include any framing (gRPC or HTTP/2). Same as Length if compression not
// enabled.
CompressedLength int
// WireLength is the size of the compressed payload data plus gRPC framing.
// Does not include HTTP/2 framing.
WireLength int
// RecvTime is the time when the payload is received.
RecvTime time.Time
}
InPayload contains stats about an incoming payload.
func (*InPayload) IsClient ¶
IsClient indicates if the stats information is from client side.
type InTrailer ¶
type InTrailer struct {
// Client is true if this InTrailer is from client side.
Client bool
// WireLength is the wire length of trailer.
WireLength int
// Trailer contains the trailer metadata received from the server. This
// field is only valid if this InTrailer is from the client side.
Trailer metadata.MD
}
InTrailer contains stats about trailer reception.
func (*InTrailer) IsClient ¶
IsClient indicates if the stats information is from client side.
type MetricSet ¶
type MetricSet struct {
// contains filtered or unexported fields
}
MetricSet is a set of metrics to record. Once created, MetricSet is immutable, however Add and Remove can make copies with specific metrics added or removed, respectively.
Do not construct directly; use NewMetricSet instead.
func NewMetricSet ¶
NewMetricSet returns a MetricSet containing metricNames.
func (*MetricSet) Add ¶
Add adds the metricNames to the metrics set and returns a new copy with the additional metrics.
func (*MetricSet) Join ¶
Join joins the metrics passed in with the metrics set, and returns a new copy with the merged metrics.
func (*MetricSet) Metrics ¶
Metrics returns the metrics set. The returned map is read-only and must not be modified.
func (*MetricSet) Remove ¶
Remove removes the metricNames from the metrics set and returns a new copy with the metrics removed.
type OutHeader ¶
type OutHeader struct {
// Client is true if this OutHeader is from client side.
Client bool
// Compression is the compression algorithm used for the RPC.
Compression string
// Header contains the header metadata sent.
Header metadata.MD
// The following fields are valid only if Client is true.
// FullMethod is the full RPC method string, i.e., /package.service/method.
FullMethod string
// RemoteAddr is the remote address of the corresponding connection.
RemoteAddr net.Addr
// LocalAddr is the local address of the corresponding connection.
LocalAddr net.Addr
}
OutHeader contains stats about header transmission.
- Client-side: Only occurs after 'Begin', as headers are always the first thing sent on a stream.
func (*OutHeader) IsClient ¶
IsClient indicates if this stats information is from client side.
type OutPayload ¶
type OutPayload struct {
// Client is true if this OutPayload is from client side.
Client bool
// Payload is the payload with original type. This may be modified after
// the call to HandleRPC which provides the OutPayload returns and must be
// copied if needed later.
Payload any
// Length is the size of the uncompressed payload data. Does not include any
// framing (gRPC or HTTP/2).
Length int
// CompressedLength is the size of the compressed payload data. Does not
// include any framing (gRPC or HTTP/2). Same as Length if compression not
// enabled.
CompressedLength int
// WireLength is the size of the compressed payload data plus gRPC framing.
// Does not include HTTP/2 framing.
WireLength int
// SentTime is the time when the payload is sent.
SentTime time.Time
}
OutPayload contains stats about an outgoing payload.
func (*OutPayload) IsClient ¶
func (s *OutPayload) IsClient() bool
IsClient indicates if this stats information is from client side.
type OutTrailer ¶
type OutTrailer struct {
// Client is true if this OutTrailer is from client side.
Client bool
// WireLength is the wire length of trailer.
//
// Deprecated: This field is never set. The length is not known when this
// message is emitted because the trailer fields are compressed with hpack
// after that.
WireLength int
// Trailer contains the trailer metadata sent to the client. This
// field is only valid if this OutTrailer is from the server side.
Trailer metadata.MD
}
OutTrailer contains stats about trailer transmission.
func (*OutTrailer) IsClient ¶
func (s *OutTrailer) IsClient() bool
IsClient indicates if this stats information is from client side.
type PickerUpdated ¶
type PickerUpdated = DelayedPickComplete
PickerUpdated indicates that the RPC is unblocked following a delay in selecting a connection for the call.
Deprecated: will be removed in a future release; use DelayedPickComplete instead.
type RPCStats ¶
type RPCStats interface {
// IsClient returns true if this RPCStats is from client side.
IsClient() bool
// contains filtered or unexported methods
}
RPCStats contains stats information about RPCs.
type RPCTagInfo ¶
type RPCTagInfo struct {
// FullMethodName is the RPC method in the format of /package.service/method.
FullMethodName string
// FailFast indicates if this RPC is failfast.
// This field is only valid on client side, it's always false on server side.
FailFast bool
// NameResolutionDelay indicates if the RPC needed to wait for the
// initial name resolver update before it could begin. This should only
// happen if the channel is IDLE when the RPC is started. Note that
// all retry or hedging attempts for an RPC that experienced a delay
// will have it set.
//
// This field is only valid on the client side; it is always false on
// the server side.
NameResolutionDelay bool
}
RPCTagInfo defines the relevant information needed by RPC context tagger.
Source Files ¶
handlers.go metrics.go stats.go
Directories ¶
| Path | Synopsis |
|---|---|
| stats/opentelemetry | Package opentelemetry implements opentelemetry instrumentation code for gRPC-Go clients and servers. |
| stats/opentelemetry/csm | Package csm contains utilities for Google Cloud Service Mesh observability. |
| stats/opentelemetry/internal | Package internal defines the PluginOption interface. |
- Version
- v1.80.0-dev
- Published
- Jan 21, 2026
- Platform
- windows/amd64
- Imports
- 5 packages
- Last checked
- 38 seconds ago –
Tools for package owners.