123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- // Copyright 2018 The gRPC Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // This file defines an interface for exporting monitoring information
- // out of gRPC servers. See the full design at
- // https://github.com/grpc/proposal/blob/master/A14-channelz.md
- //
- // The canonical version of this proto can be found at
- // https://github.com/grpc/grpc-proto/blob/master/grpc/channelz/v1/channelz.proto
-
- syntax = "proto3";
-
- package grpc.channelz.v1;
-
- import "google/protobuf/any.proto";
- import "google/protobuf/duration.proto";
- import "google/protobuf/timestamp.proto";
- import "google/protobuf/wrappers.proto";
-
- option go_package = "google.golang.org/grpc/channelz/grpc_channelz_v1";
- option java_multiple_files = true;
- option java_package = "io.grpc.channelz.v1";
- option java_outer_classname = "ChannelzProto";
-
- // Channel is a logical grouping of channels, subchannels, and sockets.
- message Channel {
- // The identifier for this channel. This should bet set.
- ChannelRef ref = 1;
- // Data specific to this channel.
- ChannelData data = 2;
- // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
-
- // There are no ordering guarantees on the order of channel refs.
- // There may not be cycles in the ref graph.
- // A channel ref may be present in more than one channel or subchannel.
- repeated ChannelRef channel_ref = 3;
-
- // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
- // There are no ordering guarantees on the order of subchannel refs.
- // There may not be cycles in the ref graph.
- // A sub channel ref may be present in more than one channel or subchannel.
- repeated SubchannelRef subchannel_ref = 4;
-
- // There are no ordering guarantees on the order of sockets.
- repeated SocketRef socket_ref = 5;
- }
-
- // Subchannel is a logical grouping of channels, subchannels, and sockets.
- // A subchannel is load balanced over by it's ancestor
- message Subchannel {
- // The identifier for this channel.
- SubchannelRef ref = 1;
- // Data specific to this channel.
- ChannelData data = 2;
- // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
-
- // There are no ordering guarantees on the order of channel refs.
- // There may not be cycles in the ref graph.
- // A channel ref may be present in more than one channel or subchannel.
- repeated ChannelRef channel_ref = 3;
-
- // At most one of 'channel_ref+subchannel_ref' and 'socket' is set.
- // There are no ordering guarantees on the order of subchannel refs.
- // There may not be cycles in the ref graph.
- // A sub channel ref may be present in more than one channel or subchannel.
- repeated SubchannelRef subchannel_ref = 4;
-
- // There are no ordering guarantees on the order of sockets.
- repeated SocketRef socket_ref = 5;
- }
-
- // These come from the specified states in this document:
- // https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
- message ChannelConnectivityState {
- enum State {
- UNKNOWN = 0;
- IDLE = 1;
- CONNECTING = 2;
- READY = 3;
- TRANSIENT_FAILURE = 4;
- SHUTDOWN = 5;
- }
- State state = 1;
- }
-
- // Channel data is data related to a specific Channel or Subchannel.
- message ChannelData {
- // The connectivity state of the channel or subchannel. Implementations
- // should always set this.
- ChannelConnectivityState state = 1;
-
- // The target this channel originally tried to connect to. May be absent
- string target = 2;
-
- // A trace of recent events on the channel. May be absent.
- ChannelTrace trace = 3;
-
- // The number of calls started on the channel
- int64 calls_started = 4;
- // The number of calls that have completed with an OK status
- int64 calls_succeeded = 5;
- // The number of calls that have completed with a non-OK status
- int64 calls_failed = 6;
-
- // The last time a call was started on the channel.
- google.protobuf.Timestamp last_call_started_timestamp = 7;
- }
-
- // A trace event is an interesting thing that happened to a channel or
- // subchannel, such as creation, address resolution, subchannel creation, etc.
- message ChannelTraceEvent {
- // High level description of the event.
- string description = 1;
- // The supported severity levels of trace events.
- enum Severity {
- CT_UNKNOWN = 0;
- CT_INFO = 1;
- CT_WARNING = 2;
- CT_ERROR = 3;
- }
- // the severity of the trace event
- Severity severity = 2;
- // When this event occurred.
- google.protobuf.Timestamp timestamp = 3;
- // ref of referenced channel or subchannel.
- // Optional, only present if this event refers to a child object. For example,
- // this field would be filled if this trace event was for a subchannel being
- // created.
- oneof child_ref {
- ChannelRef channel_ref = 4;
- SubchannelRef subchannel_ref = 5;
- }
- }
-
- // ChannelTrace represents the recent events that have occurred on the channel.
- message ChannelTrace {
- // Number of events ever logged in this tracing object. This can differ from
- // events.size() because events can be overwritten or garbage collected by
- // implementations.
- int64 num_events_logged = 1;
- // Time that this channel was created.
- google.protobuf.Timestamp creation_timestamp = 2;
- // List of events that have occurred on this channel.
- repeated ChannelTraceEvent events = 3;
- }
-
- // ChannelRef is a reference to a Channel.
- message ChannelRef {
- // The globally unique id for this channel. Must be a positive number.
- int64 channel_id = 1;
- // An optional name associated with the channel.
- string name = 2;
- // Intentionally don't use field numbers from other refs.
- reserved 3, 4, 5, 6, 7, 8;
- }
-
- // SubchannelRef is a reference to a Subchannel.
- message SubchannelRef {
- // The globally unique id for this subchannel. Must be a positive number.
- int64 subchannel_id = 7;
- // An optional name associated with the subchannel.
- string name = 8;
- // Intentionally don't use field numbers from other refs.
- reserved 1, 2, 3, 4, 5, 6;
- }
-
- // SocketRef is a reference to a Socket.
- message SocketRef {
- // The globally unique id for this socket. Must be a positive number.
- int64 socket_id = 3;
- // An optional name associated with the socket.
- string name = 4;
- // Intentionally don't use field numbers from other refs.
- reserved 1, 2, 5, 6, 7, 8;
- }
-
- // ServerRef is a reference to a Server.
- message ServerRef {
- // A globally unique identifier for this server. Must be a positive number.
- int64 server_id = 5;
- // An optional name associated with the server.
- string name = 6;
- // Intentionally don't use field numbers from other refs.
- reserved 1, 2, 3, 4, 7, 8;
- }
-
- // Server represents a single server. There may be multiple servers in a single
- // program.
- message Server {
- // The identifier for a Server. This should be set.
- ServerRef ref = 1;
- // The associated data of the Server.
- ServerData data = 2;
-
- // The sockets that the server is listening on. There are no ordering
- // guarantees. This may be absent.
- repeated SocketRef listen_socket = 3;
- }
-
- // ServerData is data for a specific Server.
- message ServerData {
- // A trace of recent events on the server. May be absent.
- ChannelTrace trace = 1;
-
- // The number of incoming calls started on the server
- int64 calls_started = 2;
- // The number of incoming calls that have completed with an OK status
- int64 calls_succeeded = 3;
- // The number of incoming calls that have a completed with a non-OK status
- int64 calls_failed = 4;
-
- // The last time a call was started on the server.
- google.protobuf.Timestamp last_call_started_timestamp = 5;
- }
-
- // Information about an actual connection. Pronounced "sock-ay".
- message Socket {
- // The identifier for the Socket.
- SocketRef ref = 1;
-
- // Data specific to this Socket.
- SocketData data = 2;
- // The locally bound address.
- Address local = 3;
- // The remote bound address. May be absent.
- Address remote = 4;
- // Security details for this socket. May be absent if not available, or
- // there is no security on the socket.
- Security security = 5;
-
- // Optional, represents the name of the remote endpoint, if different than
- // the original target name.
- string remote_name = 6;
- }
-
- // SocketData is data associated for a specific Socket. The fields present
- // are specific to the implementation, so there may be minor differences in
- // the semantics. (e.g. flow control windows)
- message SocketData {
- // The number of streams that have been started.
- int64 streams_started = 1;
- // The number of streams that have ended successfully:
- // On client side, received frame with eos bit set;
- // On server side, sent frame with eos bit set.
- int64 streams_succeeded = 2;
- // The number of streams that have ended unsuccessfully:
- // On client side, ended without receiving frame with eos bit set;
- // On server side, ended without sending frame with eos bit set.
- int64 streams_failed = 3;
- // The number of grpc messages successfully sent on this socket.
- int64 messages_sent = 4;
- // The number of grpc messages received on this socket.
- int64 messages_received = 5;
-
- // The number of keep alives sent. This is typically implemented with HTTP/2
- // ping messages.
- int64 keep_alives_sent = 6;
-
- // The last time a stream was created by this endpoint. Usually unset for
- // servers.
- google.protobuf.Timestamp last_local_stream_created_timestamp = 7;
- // The last time a stream was created by the remote endpoint. Usually unset
- // for clients.
- google.protobuf.Timestamp last_remote_stream_created_timestamp = 8;
-
- // The last time a message was sent by this endpoint.
- google.protobuf.Timestamp last_message_sent_timestamp = 9;
- // The last time a message was received by this endpoint.
- google.protobuf.Timestamp last_message_received_timestamp = 10;
-
- // 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.
- google.protobuf.Int64Value local_flow_control_window = 11;
-
- // 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.
- google.protobuf.Int64Value remote_flow_control_window = 12;
-
- // Socket options set on this socket. May be absent if 'summary' is set
- // on GetSocketRequest.
- repeated SocketOption option = 13;
- }
-
- // Address represents the address used to create the socket.
- message Address {
- message TcpIpAddress {
- // Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16
- // bytes in length.
- bytes ip_address = 1;
- // 0-64k, or -1 if not appropriate.
- int32 port = 2;
- }
- // A Unix Domain Socket address.
- message UdsAddress {
- string filename = 1;
- }
- // An address type not included above.
- message OtherAddress {
- // The human readable version of the value. This value should be set.
- string name = 1;
- // The actual address message.
- google.protobuf.Any value = 2;
- }
-
- oneof address {
- TcpIpAddress tcpip_address = 1;
- UdsAddress uds_address = 2;
- OtherAddress other_address = 3;
- }
- }
-
- // Security represents details about how secure the socket is.
- message Security {
- message Tls {
- oneof cipher_suite {
- // The cipher suite name in the RFC 4346 format:
- // https://tools.ietf.org/html/rfc4346#appendix-C
- string standard_name = 1;
- // Some other way to describe the cipher suite if
- // the RFC 4346 name is not available.
- string other_name = 2;
- }
- // the certificate used by this endpoint.
- bytes local_certificate = 3;
- // the certificate used by the remote endpoint.
- bytes remote_certificate = 4;
- }
- message OtherSecurity {
- // The human readable version of the value.
- string name = 1;
- // The actual security details message.
- google.protobuf.Any value = 2;
- }
- oneof model {
- Tls tls = 1;
- OtherSecurity other = 2;
- }
- }
-
- // SocketOption represents socket options for a socket. Specifically, these
- // are the options returned by getsockopt().
- message SocketOption {
- // The full name of the socket option. Typically this will be the upper case
- // name, such as "SO_REUSEPORT".
- string name = 1;
- // The human readable value of this socket option. At least one of value or
- // additional will be set.
- string value = 2;
- // Additional data associated with the socket option. At least one of value
- // or additional will be set.
- google.protobuf.Any additional = 3;
- }
-
- // For use with SocketOption's additional field. This is primarily used for
- // SO_RCVTIMEO and SO_SNDTIMEO
- message SocketOptionTimeout {
- google.protobuf.Duration duration = 1;
- }
-
- // For use with SocketOption's additional field. This is primarily used for
- // SO_LINGER.
- message SocketOptionLinger {
- // active maps to `struct linger.l_onoff`
- bool active = 1;
- // duration maps to `struct linger.l_linger`
- google.protobuf.Duration duration = 2;
- }
-
- // For use with SocketOption's additional field. Tcp info for
- // SOL_TCP and TCP_INFO.
- message SocketOptionTcpInfo {
- uint32 tcpi_state = 1;
-
- uint32 tcpi_ca_state = 2;
- uint32 tcpi_retransmits = 3;
- uint32 tcpi_probes = 4;
- uint32 tcpi_backoff = 5;
- uint32 tcpi_options = 6;
- uint32 tcpi_snd_wscale = 7;
- uint32 tcpi_rcv_wscale = 8;
-
- uint32 tcpi_rto = 9;
- uint32 tcpi_ato = 10;
- uint32 tcpi_snd_mss = 11;
- uint32 tcpi_rcv_mss = 12;
-
- uint32 tcpi_unacked = 13;
- uint32 tcpi_sacked = 14;
- uint32 tcpi_lost = 15;
- uint32 tcpi_retrans = 16;
- uint32 tcpi_fackets = 17;
-
- uint32 tcpi_last_data_sent = 18;
- uint32 tcpi_last_ack_sent = 19;
- uint32 tcpi_last_data_recv = 20;
- uint32 tcpi_last_ack_recv = 21;
-
- uint32 tcpi_pmtu = 22;
- uint32 tcpi_rcv_ssthresh = 23;
- uint32 tcpi_rtt = 24;
- uint32 tcpi_rttvar = 25;
- uint32 tcpi_snd_ssthresh = 26;
- uint32 tcpi_snd_cwnd = 27;
- uint32 tcpi_advmss = 28;
- uint32 tcpi_reordering = 29;
- }
-
- // Channelz is a service exposed by gRPC servers that provides detailed debug
- // information.
- service Channelz {
- // Gets all root channels (i.e. channels the application has directly
- // created). This does not include subchannels nor non-top level channels.
- rpc GetTopChannels(GetTopChannelsRequest) returns (GetTopChannelsResponse);
- // Gets all servers that exist in the process.
- rpc GetServers(GetServersRequest) returns (GetServersResponse);
- // Returns a single Server, or else a NOT_FOUND code.
- rpc GetServer(GetServerRequest) returns (GetServerResponse);
- // Gets all server sockets that exist in the process.
- rpc GetServerSockets(GetServerSocketsRequest) returns (GetServerSocketsResponse);
- // Returns a single Channel, or else a NOT_FOUND code.
- rpc GetChannel(GetChannelRequest) returns (GetChannelResponse);
- // Returns a single Subchannel, or else a NOT_FOUND code.
- rpc GetSubchannel(GetSubchannelRequest) returns (GetSubchannelResponse);
- // Returns a single Socket or else a NOT_FOUND code.
- rpc GetSocket(GetSocketRequest) returns (GetSocketResponse);
- }
-
- message GetTopChannelsRequest {
- // start_channel_id indicates that only channels at or above this id should be
- // included in the results.
- // To request the first page, this should be set to 0. To request
- // subsequent pages, the client generates this value by adding 1 to
- // the highest seen result ID.
- int64 start_channel_id = 1;
-
- // If non-zero, the server will return a page of results containing
- // at most this many items. If zero, the server will choose a
- // reasonable page size. Must never be negative.
- int64 max_results = 2;
- }
-
- message GetTopChannelsResponse {
- // list of channels that the connection detail service knows about. Sorted in
- // ascending channel_id order.
- // Must contain at least 1 result, otherwise 'end' must be true.
- repeated Channel channel = 1;
- // If set, indicates that the list of channels is the final list. Requesting
- // more channels can only return more if they are created after this RPC
- // completes.
- bool end = 2;
- }
-
- message GetServersRequest {
- // start_server_id indicates that only servers at or above this id should be
- // included in the results.
- // To request the first page, this must be set to 0. To request
- // subsequent pages, the client generates this value by adding 1 to
- // the highest seen result ID.
- int64 start_server_id = 1;
-
- // If non-zero, the server will return a page of results containing
- // at most this many items. If zero, the server will choose a
- // reasonable page size. Must never be negative.
- int64 max_results = 2;
- }
-
- message GetServersResponse {
- // list of servers that the connection detail service knows about. Sorted in
- // ascending server_id order.
- // Must contain at least 1 result, otherwise 'end' must be true.
- repeated Server server = 1;
- // If set, indicates that the list of servers is the final list. Requesting
- // more servers will only return more if they are created after this RPC
- // completes.
- bool end = 2;
- }
-
- message GetServerRequest {
- // server_id is the identifier of the specific server to get.
- int64 server_id = 1;
- }
-
- message GetServerResponse {
- // The Server that corresponds to the requested server_id. This field
- // should be set.
- Server server = 1;
- }
-
- message GetServerSocketsRequest {
- int64 server_id = 1;
- // start_socket_id indicates that only sockets at or above this id should be
- // included in the results.
- // To request the first page, this must be set to 0. To request
- // subsequent pages, the client generates this value by adding 1 to
- // the highest seen result ID.
- int64 start_socket_id = 2;
-
- // If non-zero, the server will return a page of results containing
- // at most this many items. If zero, the server will choose a
- // reasonable page size. Must never be negative.
- int64 max_results = 3;
- }
-
- message GetServerSocketsResponse {
- // list of socket refs that the connection detail service knows about. Sorted in
- // ascending socket_id order.
- // Must contain at least 1 result, otherwise 'end' must be true.
- repeated SocketRef socket_ref = 1;
- // If set, indicates that the list of sockets is the final list. Requesting
- // more sockets will only return more if they are created after this RPC
- // completes.
- bool end = 2;
- }
-
- message GetChannelRequest {
- // channel_id is the identifier of the specific channel to get.
- int64 channel_id = 1;
- }
-
- message GetChannelResponse {
- // The Channel that corresponds to the requested channel_id. This field
- // should be set.
- Channel channel = 1;
- }
-
- message GetSubchannelRequest {
- // subchannel_id is the identifier of the specific subchannel to get.
- int64 subchannel_id = 1;
- }
-
- message GetSubchannelResponse {
- // The Subchannel that corresponds to the requested subchannel_id. This
- // field should be set.
- Subchannel subchannel = 1;
- }
-
- message GetSocketRequest {
- // socket_id is the identifier of the specific socket to get.
- int64 socket_id = 1;
-
- // If true, the response will contain only high level information
- // that is inexpensive to obtain. Fields thay may be omitted are
- // documented.
- bool summary = 2;
- }
-
- message GetSocketResponse {
- // The Socket that corresponds to the requested socket_id. This field
- // should be set.
- Socket socket = 1;
- }
|