syntax = "proto3"; package envoy.service.metrics.v2; option java_outer_classname = "MetricsServiceProto"; option java_multiple_files = true; option java_package = "io.envoyproxy.envoy.service.metrics.v2"; option go_package = "v2"; option java_generic_services = true; import "envoy/api/v2/core/base.proto"; // This line is different from the definition in https://github.com/envoyproxy/data-plane-api to let // the dependency structure clearer. import "prometheus/client_model/metrics.proto"; import "validate/validate.proto"; // Service for streaming metrics to server that consumes the metrics data. It uses Prometheus metric // data model as a standard to represent metrics information. service MetricsService { // Envoy will connect and send StreamMetricsMessage messages forever. It does not expect any // response to be sent as nothing would be done in the case of failure. rpc StreamMetrics(stream StreamMetricsMessage) returns (StreamMetricsResponse) { } } message StreamMetricsResponse { } message StreamMetricsMessage { message Identifier { // The node sending metrics over the stream. envoy.api.v2.core.Node node = 1 [(validate.rules).message.required = true]; } // Identifier data effectively is a structured metadata. As a performance optimization this will // only be sent in the first message on the stream. Identifier identifier = 1; // A list of metric entries repeated io.prometheus.client.MetricFamily envoy_metrics = 2; }