syntax = "proto3"; package envoy.api.v2.endpoint; import "envoy/api/v2/core/address.proto"; import "envoy/api/v2/core/base.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "validate/validate.proto"; import "gogoproto/gogo.proto"; // These are stats Envoy reports to GLB every so often. Report frequency is // defined by // :ref:`LoadStatsResponse.load_reporting_interval`. // Stats per upstream region/zone and optionally per subzone. // [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. message UpstreamLocalityStats { // Name of zone, region and optionally endpoint group these metrics were // collected from. Zone and region names could be empty if unknown. core.Locality locality = 1; // The total number of requests sent by this Envoy since the last report. This // information is aggregated over all the upstream Endpoints. total_requests // can be inferred from: // // .. code-block:: none // // total_requests = total_successful_requests + total_requests_in_progress + // total_error_requests // // The total number of requests successfully completed by the endpoints in the // locality. uint64 total_successful_requests = 2; // The total number of unfinished requests uint64 total_requests_in_progress = 3; // The total number of requests that failed due to errors at the endpoint, // aggregated over all endpoints in the locality. uint64 total_error_requests = 4; // Stats for multi-dimensional load balancing. repeated EndpointLoadMetricStats load_metric_stats = 5; // Endpoint granularity stats information for this locality. This information // is populated if the Server requests it by setting // :ref:`LoadStatsResponse.report_endpoint_granularity`. repeated UpstreamEndpointStats upstream_endpoint_stats = 7; // [#not-implemented-hide:] The priority of the endpoint group these metrics // were collected from. uint32 priority = 6; } message UpstreamEndpointStats { // Upstream host address. core.Address address = 1; // Opaque and implementation dependent metadata of the // endpoint. Envoy will pass this directly to the management server. google.protobuf.Struct metadata = 6; // The total number of requests successfully completed by the endpoint. A // single HTTP or gRPC request or stream is counted as one request. A TCP // connection is also treated as one request. There is no explicit // total_requests field below for an endpoint, but it may be inferred from: // // .. code-block:: none // // total_requests = total_successful_requests + total_requests_in_progress + // total_error_requests // // The total number of requests successfully completed by the endpoints in the // locality. These include non-5xx responses for HTTP, where errors // originate at the client and the endpoint responded successfully. For gRPC, // the grpc-status values are those not covered by total_error_requests below. uint64 total_successful_requests = 2; // The total number of unfinished requests for this endpoint. uint64 total_requests_in_progress = 3; // The total number of requests that failed due to errors at the endpoint. // For HTTP these are responses with 5xx status codes and for gRPC the // grpc-status values: // // - DeadlineExceeded // - Unimplemented // - Internal // - Unavailable // - Unknown // - DataLoss uint64 total_error_requests = 4; // Stats for multi-dimensional load balancing. repeated EndpointLoadMetricStats load_metric_stats = 5; } // [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. message EndpointLoadMetricStats { // Name of the metric; may be empty. string metric_name = 1; // Number of calls that finished and included this metric. uint64 num_requests_finished_with_metric = 2; // Sum of metric values across all calls that finished with this metric for // load_reporting_interval. double total_metric_value = 3; } // Per cluster load stats. Envoy reports these stats a management server in a // :ref:`LoadStatsRequest` // [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. message ClusterStats { // The name of the cluster. string cluster_name = 1 [(validate.rules).string.min_bytes = 1]; // Need at least one. repeated UpstreamLocalityStats upstream_locality_stats = 2 [(validate.rules).repeated .min_items = 1]; // Cluster-level stats such as total_successful_requests may be computed by // summing upstream_locality_stats. In addition, below there are additional // cluster-wide stats. The following total_requests equality holds at the // cluster-level: // // .. code-block:: none // // sum_locality(total_successful_requests) + sum_locality(total_requests_in_progress) + // sum_locality(total_error_requests) + total_dropped_requests` // // The total number of dropped requests. This covers requests // deliberately dropped by the drop_overload policy and circuit breaking. uint64 total_dropped_requests = 3; message DroppedRequests { // Identifier for the policy specifying the drop. string category = 1 [(validate.rules).string.min_bytes = 1]; // Total number of deliberately dropped requests for the category. uint64 dropped_count = 2; } // Information about deliberately dropped requests for each category specified // in the DropOverload policy. repeated DroppedRequests dropped_requests = 5; // Period over which the actual load report occurred. This will be guaranteed to include every // request reported. Due to system load and delays between the *LoadStatsRequest* sent from Envoy // and the *LoadStatsResponse* message sent from the management server, this may be longer than // the requested load reporting interval in the *LoadStatsResponse*. google.protobuf.Duration load_report_interval = 4; }