Documentation

Overview

    Package channelz defines APIs for enabling channelz service, entry registration/deletion, and accessing channelz data. It also defines channelz metric struct formats.

    All APIs in this package are experimental.

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var (
    
    	// EntryPerPage defines the number of channelz entries to be shown on a web page.
    	EntryPerPage = int64(50)
    )

    Functions

    func AddTraceEvent

    func AddTraceEvent(id int64, depth int, desc *TraceEventDesc)

      AddTraceEvent adds trace related to the entity with specified id, using the provided TraceEventDesc.

      func Error

      func Error(id int64, args ...interface{})

        Error logs through grpclog.Error and adds a trace event if channelz is on.

        func Errorf

        func Errorf(id int64, format string, args ...interface{})

          Errorf logs through grpclog.Errorf and adds a trace event if channelz is on.

          func Info

          func Info(id int64, args ...interface{})

            Info logs through grpclog.Info and adds a trace event if channelz is on.

            func Infof

            func Infof(id int64, format string, args ...interface{})

              Infof logs through grpclog.Infof and adds a trace event if channelz is on.

              func IsOn

              func IsOn() bool

                IsOn returns whether channelz data collection is on.

                func NewChannelzStorage

                func NewChannelzStorage() (cleanup func() error)

                  NewChannelzStorage initializes channelz data storage and id generator.

                  This function returns a cleanup function to wait for all channelz state to be reset by the grpc goroutines when those entities get closed. By using this cleanup function, we make sure tests don't mess up each other, i.e. lingering goroutine from previous test doing entity removal happen to remove some entity just register by the new test, since the id space is the same.

                  Note: This function is exported for testing purpose only. User should not call it in most cases.

                  func RegisterChannel

                  func RegisterChannel(c Channel, pid int64, ref string) int64

                    RegisterChannel registers the given channel c in channelz database with ref as its reference name, and add it to the child list of its parent (identified by pid). pid = 0 means no parent. It returns the unique channelz tracking id assigned to this channel.

                    func RegisterListenSocket

                    func RegisterListenSocket(s Socket, pid int64, ref string) int64

                      RegisterListenSocket registers the given listen socket s in channelz database with ref as its reference name, and add it to the child list of its parent (identified by pid). It returns the unique channelz tracking id assigned to this listen socket.

                      func RegisterNormalSocket

                      func RegisterNormalSocket(s Socket, pid int64, ref string) int64

                        RegisterNormalSocket registers the given normal socket s in channelz database with ref as its reference name, and add it to the child list of its parent (identified by pid). It returns the unique channelz tracking id assigned to this normal socket.

                        func RegisterServer

                        func RegisterServer(s Server, ref string) int64

                          RegisterServer registers the given server s in channelz database. It returns the unique channelz tracking id assigned to this server.

                          func RegisterSubChannel

                          func RegisterSubChannel(c Channel, pid int64, ref string) int64

                            RegisterSubChannel registers the given channel c in channelz database with ref as its reference name, and add it to the child list of its parent (identified by pid). It returns the unique channelz tracking id assigned to this subchannel.

                            func RemoveEntry

                            func RemoveEntry(id int64)

                              RemoveEntry removes an entry with unique channelz trakcing id to be id from channelz database.

                              func ResetMaxTraceEntryToDefault

                              func ResetMaxTraceEntryToDefault()

                                ResetMaxTraceEntryToDefault resets the maximum number of trace entry per entity to default.

                                func SetMaxTraceEntry

                                func SetMaxTraceEntry(i int32)

                                  SetMaxTraceEntry sets maximum number of trace entry per entity (i.e. channel/subchannel). Setting it to 0 will disable channel tracing.

                                  func TurnOn

                                  func TurnOn()

                                    TurnOn turns on channelz data collection.

                                    func Warning

                                    func Warning(id int64, args ...interface{})

                                      Warning logs through grpclog.Warning and adds a trace event if channelz is on.

                                      func Warningf

                                      func Warningf(id int64, format string, args ...interface{})

                                        Warningf logs through grpclog.Warningf and adds a trace event if channelz is on.

                                        Types

                                        type Channel

                                        type Channel interface {
                                        	ChannelzMetric() *ChannelInternalMetric
                                        }

                                          Channel is the interface that should be satisfied in order to be tracked by channelz as Channel or SubChannel.

                                          type ChannelInternalMetric

                                          type ChannelInternalMetric struct {
                                          	// current connectivity state of the channel.
                                          	State connectivity.State
                                          	// The target this channel originally tried to connect to.  May be absent
                                          	Target string
                                          	// The number of calls started on the channel.
                                          	CallsStarted int64
                                          	// The number of calls that have completed with an OK status.
                                          	CallsSucceeded int64
                                          	// The number of calls that have a completed with a non-OK status.
                                          	CallsFailed int64
                                          	// The last time a call was started on the channel.
                                          	LastCallStartedTimestamp time.Time
                                          }

                                            ChannelInternalMetric defines the struct that the implementor of Channel interface should return from ChannelzMetric().

                                            type ChannelMetric

                                            type ChannelMetric struct {
                                            	// ID is the channelz id of this channel.
                                            	ID int64
                                            	// RefName is the human readable reference string of this channel.
                                            	RefName string
                                            	// ChannelData contains channel internal metric reported by the channel through
                                            	// ChannelzMetric().
                                            	ChannelData *ChannelInternalMetric
                                            	// NestedChans tracks the nested channel type children of this channel in the format of
                                            	// a map from nested channel channelz id to corresponding reference string.
                                            	NestedChans map[int64]string
                                            	// SubChans tracks the subchannel type children of this channel in the format of a
                                            	// map from subchannel channelz id to corresponding reference string.
                                            	SubChans map[int64]string
                                            	// Sockets tracks the socket type children of this channel in the format of a map
                                            	// from socket channelz id to corresponding reference string.
                                            	// Note current grpc implementation doesn't allow channel having sockets directly,
                                            	// therefore, this is field is unused.
                                            	Sockets map[int64]string
                                            	// Trace contains the most recent traced events.
                                            	Trace *ChannelTrace
                                            }

                                              ChannelMetric defines the info channelz provides for a specific Channel, which includes ChannelInternalMetric and channelz-specific data, such as channelz id, child list, etc.

                                              func GetChannel

                                              func GetChannel(id int64) *ChannelMetric

                                                GetChannel returns the ChannelMetric for the channel (identified by id).

                                                func GetTopChannels

                                                func GetTopChannels(id int64, maxResults int64) ([]*ChannelMetric, bool)

                                                  GetTopChannels returns a slice of top channel's ChannelMetric, along with a boolean indicating whether there's more top channels to be queried for.

                                                  The arg id specifies that only top channel with id at or above it will be included in the result. The returned slice is up to a length of the arg maxResults or EntryPerPage if maxResults is zero, and is sorted in ascending id order.

                                                  type ChannelTrace

                                                  type ChannelTrace struct {
                                                  	// EventNum is the number of events that ever got traced (i.e. including those that have been deleted)
                                                  	EventNum int64
                                                  	// CreationTime is the creation time of the trace.
                                                  	CreationTime time.Time
                                                  	// Events stores the most recent trace events (up to $maxTraceEntry, newer event will overwrite the
                                                  	// oldest one)
                                                  	Events []*TraceEvent
                                                  }

                                                    ChannelTrace stores traced events on a channel/subchannel and related info.

                                                    type RefChannelType

                                                    type RefChannelType int

                                                      RefChannelType is the type of the entity being referenced in a trace event.

                                                      const (
                                                      	// RefChannel indicates the referenced entity is a Channel.
                                                      	RefChannel RefChannelType = iota
                                                      	// RefSubChannel indicates the referenced entity is a SubChannel.
                                                      	RefSubChannel
                                                      )

                                                      type Server

                                                      type Server interface {
                                                      	ChannelzMetric() *ServerInternalMetric
                                                      }

                                                        Server is the interface to be satisfied in order to be tracked by channelz as Server.

                                                        type ServerInternalMetric

                                                        type ServerInternalMetric struct {
                                                        	// The number of incoming calls started on the server.
                                                        	CallsStarted int64
                                                        	// The number of incoming calls that have completed with an OK status.
                                                        	CallsSucceeded int64
                                                        	// The number of incoming calls that have a completed with a non-OK status.
                                                        	CallsFailed int64
                                                        	// The last time a call was started on the server.
                                                        	LastCallStartedTimestamp time.Time
                                                        }

                                                          ServerInternalMetric defines the struct that the implementor of Server interface should return from ChannelzMetric().

                                                          type ServerMetric

                                                          type ServerMetric struct {
                                                          	// ID is the channelz id of this server.
                                                          	ID int64
                                                          	// RefName is the human readable reference string of this server.
                                                          	RefName string
                                                          	// ServerData contains server internal metric reported by the server through
                                                          	// ChannelzMetric().
                                                          	ServerData *ServerInternalMetric
                                                          	// ListenSockets tracks the listener socket type children of this server in the
                                                          	// format of a map from socket channelz id to corresponding reference string.
                                                          	ListenSockets map[int64]string
                                                          }

                                                            ServerMetric defines the info channelz provides for a specific Server, which includes ServerInternalMetric and channelz-specific data, such as channelz id, child list, etc.

                                                            func GetServer

                                                            func GetServer(id int64) *ServerMetric

                                                              GetServer returns the ServerMetric for the server (identified by id).

                                                              func GetServers

                                                              func GetServers(id int64, maxResults int64) ([]*ServerMetric, bool)

                                                                GetServers returns a slice of server's ServerMetric, along with a boolean indicating whether there's more servers to be queried for.

                                                                The arg id specifies that only server with id at or above it will be included in the result. The returned slice is up to a length of the arg maxResults or EntryPerPage if maxResults is zero, and is sorted in ascending id order.

                                                                type Severity

                                                                type Severity int

                                                                  Severity is the severity level of a trace event. The canonical enumeration of all valid values is here: https://github.com/grpc/grpc-proto/blob/9b13d199cc0d4703c7ea26c9c330ba695866eb23/grpc/channelz/v1/channelz.proto#L126.

                                                                  const (
                                                                  	// CtUNKNOWN indicates unknown severity of a trace event.
                                                                  	CtUNKNOWN Severity = iota
                                                                  	// CtINFO indicates info level severity of a trace event.
                                                                  	CtINFO
                                                                  	// CtWarning indicates warning level severity of a trace event.
                                                                  	CtWarning
                                                                  	// CtError indicates error level severity of a trace event.
                                                                  	CtError
                                                                  )

                                                                  type Socket

                                                                  type Socket interface {
                                                                  	ChannelzMetric() *SocketInternalMetric
                                                                  }

                                                                    Socket is the interface that should be satisfied in order to be tracked by channelz as Socket.

                                                                    type SocketInternalMetric

                                                                    type SocketInternalMetric struct {
                                                                    	// The number of streams that have been started.
                                                                    	StreamsStarted int64
                                                                    	// The number of streams that have ended successfully:
                                                                    	// On client side, receiving frame with eos bit set.
                                                                    	// On server side, sending frame with eos bit set.
                                                                    	StreamsSucceeded int64
                                                                    	// The number of streams that have ended unsuccessfully:
                                                                    	// On client side, termination without receiving frame with eos bit set.
                                                                    	// On server side, termination without sending frame with eos bit set.
                                                                    	StreamsFailed int64
                                                                    	// The number of messages successfully sent on this socket.
                                                                    	MessagesSent     int64
                                                                    	MessagesReceived int64
                                                                    	// The number of keep alives sent.  This is typically implemented with HTTP/2
                                                                    	// ping messages.
                                                                    	KeepAlivesSent int64
                                                                    	// The last time a stream was created by this endpoint.  Usually unset for
                                                                    	// servers.
                                                                    	LastLocalStreamCreatedTimestamp time.Time
                                                                    	// The last time a stream was created by the remote endpoint.  Usually unset
                                                                    	// for clients.
                                                                    	LastRemoteStreamCreatedTimestamp time.Time
                                                                    	// The last time a message was sent by this endpoint.
                                                                    	LastMessageSentTimestamp time.Time
                                                                    	// The last time a message was received by this endpoint.
                                                                    	LastMessageReceivedTimestamp time.Time
                                                                    	// The amount of window, granted to the local endpoint by the remote endpoint.
                                                                    	// This may be slightly out of date due to network latency.  This does NOT
                                                                    	// include stream level or TCP level flow control info.
                                                                    	LocalFlowControlWindow int64
                                                                    	// The amount of window, granted to the remote endpoint by the local endpoint.
                                                                    	// This may be slightly out of date due to network latency.  This does NOT
                                                                    	// include stream level or TCP level flow control info.
                                                                    	RemoteFlowControlWindow int64
                                                                    	// The locally bound address.
                                                                    	LocalAddr net.Addr
                                                                    	// The remote bound address.  May be absent.
                                                                    	RemoteAddr net.Addr
                                                                    	// Optional, represents the name of the remote endpoint, if different than
                                                                    	// the original target name.
                                                                    	RemoteName    string
                                                                    	SocketOptions *SocketOptionData
                                                                    	Security      credentials.ChannelzSecurityValue
                                                                    }

                                                                      SocketInternalMetric defines the struct that the implementor of Socket interface should return from ChannelzMetric().

                                                                      type SocketMetric

                                                                      type SocketMetric struct {
                                                                      	// ID is the channelz id of this socket.
                                                                      	ID int64
                                                                      	// RefName is the human readable reference string of this socket.
                                                                      	RefName string
                                                                      	// SocketData contains socket internal metric reported by the socket through
                                                                      	// ChannelzMetric().
                                                                      	SocketData *SocketInternalMetric
                                                                      }

                                                                        SocketMetric defines the info channelz provides for a specific Socket, which includes SocketInternalMetric and channelz-specific data, such as channelz id, etc.

                                                                        func GetServerSockets

                                                                        func GetServerSockets(id int64, startID int64, maxResults int64) ([]*SocketMetric, bool)

                                                                          GetServerSockets returns a slice of server's (identified by id) normal socket's SocketMetric, along with a boolean indicating whether there's more sockets to be queried for.

                                                                          The arg startID specifies that only sockets with id at or above it will be included in the result. The returned slice is up to a length of the arg maxResults or EntryPerPage if maxResults is zero, and is sorted in ascending id order.

                                                                          func GetSocket

                                                                          func GetSocket(id int64) *SocketMetric

                                                                            GetSocket returns the SocketInternalMetric for the socket (identified by id).

                                                                            type SocketOptionData

                                                                            type SocketOptionData struct {
                                                                            	Linger      *unix.Linger
                                                                            	RecvTimeout *unix.Timeval
                                                                            	SendTimeout *unix.Timeval
                                                                            	TCPInfo     *unix.TCPInfo
                                                                            }

                                                                              SocketOptionData defines the struct to hold socket option data, and related getter function to obtain info from fd.

                                                                              func GetSocketOption

                                                                              func GetSocketOption(socket interface{}) *SocketOptionData

                                                                                GetSocketOption gets the socket option info of the conn.

                                                                                func (*SocketOptionData) Getsockopt

                                                                                func (s *SocketOptionData) Getsockopt(fd uintptr)

                                                                                  Getsockopt defines the function to get socket options requested by channelz. It is to be passed to syscall.RawConn.Control().

                                                                                  type SubChannelMetric

                                                                                  type SubChannelMetric struct {
                                                                                  	// ID is the channelz id of this subchannel.
                                                                                  	ID int64
                                                                                  	// RefName is the human readable reference string of this subchannel.
                                                                                  	RefName string
                                                                                  	// ChannelData contains subchannel internal metric reported by the subchannel
                                                                                  	// through ChannelzMetric().
                                                                                  	ChannelData *ChannelInternalMetric
                                                                                  	// NestedChans tracks the nested channel type children of this subchannel in the format of
                                                                                  	// a map from nested channel channelz id to corresponding reference string.
                                                                                  	// Note current grpc implementation doesn't allow subchannel to have nested channels
                                                                                  	// as children, therefore, this field is unused.
                                                                                  	NestedChans map[int64]string
                                                                                  	// SubChans tracks the subchannel type children of this subchannel in the format of a
                                                                                  	// map from subchannel channelz id to corresponding reference string.
                                                                                  	// Note current grpc implementation doesn't allow subchannel to have subchannels
                                                                                  	// as children, therefore, this field is unused.
                                                                                  	SubChans map[int64]string
                                                                                  	// Sockets tracks the socket type children of this subchannel in the format of a map
                                                                                  	// from socket channelz id to corresponding reference string.
                                                                                  	Sockets map[int64]string
                                                                                  	// Trace contains the most recent traced events.
                                                                                  	Trace *ChannelTrace
                                                                                  }

                                                                                    SubChannelMetric defines the info channelz provides for a specific SubChannel, which includes ChannelInternalMetric and channelz-specific data, such as channelz id, child list, etc.

                                                                                    func GetSubChannel

                                                                                    func GetSubChannel(id int64) *SubChannelMetric

                                                                                      GetSubChannel returns the SubChannelMetric for the subchannel (identified by id).

                                                                                      type TraceEvent

                                                                                      type TraceEvent struct {
                                                                                      	// Desc is a simple description of the trace event.
                                                                                      	Desc string
                                                                                      	// Severity states the severity of this trace event.
                                                                                      	Severity Severity
                                                                                      	// Timestamp is the event time.
                                                                                      	Timestamp time.Time
                                                                                      	// RefID is the id of the entity that gets referenced in the event. RefID is 0 if no other entity is
                                                                                      	// involved in this event.
                                                                                      	// e.g. SubChannel (id: 4[]) Created. --> RefID = 4, RefName = "" (inside [])
                                                                                      	RefID int64
                                                                                      	// RefName is the reference name for the entity that gets referenced in the event.
                                                                                      	RefName string
                                                                                      	// RefType indicates the referenced entity type, i.e Channel or SubChannel.
                                                                                      	RefType RefChannelType
                                                                                      }

                                                                                        TraceEvent represent a single trace event

                                                                                        type TraceEventDesc

                                                                                        type TraceEventDesc struct {
                                                                                        	Desc     string
                                                                                        	Severity Severity
                                                                                        	Parent   *TraceEventDesc
                                                                                        }

                                                                                          TraceEventDesc is what the caller of AddTraceEvent should provide to describe the event to be added to the channel trace. The Parent field is optional. It is used for event that will be recorded in the entity's parent trace also.