Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
envoy.config.metrics.v3.stats.proto Maven / Gradle / Ivy
syntax = "proto3";
package envoy.config.metrics.v3;
import "envoy/config/core/v3/address.proto";
import "envoy/type/matcher/v3/string.proto";
import "google/protobuf/any.proto";
import "google/protobuf/wrappers.proto";
import "udpa/annotations/status.proto";
import "udpa/annotations/versioning.proto";
import "validate/validate.proto";
option java_package = "io.envoyproxy.envoy.config.metrics.v3";
option java_outer_classname = "StatsProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/metrics/v3;metricsv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;
// [#protodoc-title: Stats]
// Statistics :ref:`architecture overview `.
// Configuration for pluggable stats sinks.
message StatsSink {
option (udpa.annotations.versioning).previous_message_type = "envoy.config.metrics.v2.StatsSink";
reserved 2;
reserved "config";
// The name of the stats sink to instantiate. The name must match a supported
// stats sink.
// See the :ref:`extensions listed in typed_config below ` for the default list of available stats sink.
// Sinks optionally support tagged/multiple dimensional metrics.
string name = 1;
// Stats sink specific configuration which depends on the sink being instantiated. See
// :ref:`StatsdSink ` for an example.
// [#extension-category: envoy.stats_sinks]
oneof config_type {
google.protobuf.Any typed_config = 3;
}
}
// Statistics configuration such as tagging.
message StatsConfig {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.metrics.v2.StatsConfig";
// Each stat name is independently processed through these tag specifiers. When a tag is
// matched, the first capture group is not immediately removed from the name, so later
// :ref:`TagSpecifiers ` can also match that
// same portion of the match. After all tag matching is complete, a tag-extracted version of
// the name is produced and is used in stats sinks that represent tags, such as Prometheus.
repeated TagSpecifier stats_tags = 1;
// Use all default tag regexes specified in Envoy. These can be combined with
// custom tags specified in :ref:`stats_tags
// `. They will be processed before
// the custom tags.
//
// .. note::
//
// If any default tags are specified twice, the config will be considered
// invalid.
//
// See :repo:`well_known_names.h ` for a list of the
// default tags in Envoy.
//
// If not provided, the value is assumed to be true.
google.protobuf.BoolValue use_all_default_tags = 2;
// Inclusion/exclusion matcher for stat name creation. If not provided, all stats are instantiated
// as normal. Preventing the instantiation of certain families of stats can improve memory
// performance for Envoys running especially large configs.
//
// .. warning::
// Excluding stats may affect Envoy's behavior in undocumented ways. See
// `issue #8771 `_ for more information.
// If any unexpected behavior changes are observed, please open a new issue immediately.
StatsMatcher stats_matcher = 3;
// Defines rules for setting the histogram buckets. Rules are evaluated in order, and the first
// match is applied. If no match is found (or if no rules are set), the following default buckets
// are used:
//
// .. code-block:: json
//
// [
// 0.5,
// 1,
// 5,
// 10,
// 25,
// 50,
// 100,
// 250,
// 500,
// 1000,
// 2500,
// 5000,
// 10000,
// 30000,
// 60000,
// 300000,
// 600000,
// 1800000,
// 3600000
// ]
repeated HistogramBucketSettings histogram_bucket_settings = 4;
}
// Configuration for disabling stat instantiation.
message StatsMatcher {
// The instantiation of stats is unrestricted by default. If the goal is to configure Envoy to
// instantiate all stats, there is no need to construct a StatsMatcher.
//
// However, StatsMatcher can be used to limit the creation of families of stats in order to
// conserve memory. Stats can either be disabled entirely, or they can be
// limited by either an exclusion or an inclusion list of :ref:`StringMatcher
// ` protos:
//
// * If ``reject_all`` is set to `true`, no stats will be instantiated. If ``reject_all`` is set to
// `false`, all stats will be instantiated.
//
// * If an exclusion list is supplied, any stat name matching *any* of the StringMatchers in the
// list will not instantiate.
//
// * If an inclusion list is supplied, no stats will instantiate, except those matching *any* of
// the StringMatchers in the list.
//
//
// A StringMatcher can be used to match against an exact string, a suffix / prefix, or a regex.
// **NB:** For performance reasons, it is highly recommended to use a prefix- or suffix-based
// matcher rather than a regex-based matcher.
//
// Example 1. Excluding all stats.
//
// .. code-block:: json
//
// {
// "statsMatcher": {
// "rejectAll": "true"
// }
// }
//
// Example 2. Excluding all cluster-specific stats, but not cluster-manager stats:
//
// .. code-block:: json
//
// {
// "statsMatcher": {
// "exclusionList": {
// "patterns": [
// {
// "prefix": "cluster."
// }
// ]
// }
// }
// }
//
// Example 3. Including only manager-related stats:
//
// .. code-block:: json
//
// {
// "statsMatcher": {
// "inclusionList": {
// "patterns": [
// {
// "prefix": "cluster_manager."
// },
// {
// "prefix": "listener_manager."
// }
// ]
// }
// }
// }
//
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.metrics.v2.StatsMatcher";
oneof stats_matcher {
option (validate.required) = true;
// If ``reject_all`` is true, then all stats are disabled. If ``reject_all`` is false, then all
// stats are enabled.
bool reject_all = 1;
// Exclusive match. All stats are enabled except for those matching one of the supplied
// StringMatcher protos.
type.matcher.v3.ListStringMatcher exclusion_list = 2;
// Inclusive match. No stats are enabled except for those matching one of the supplied
// StringMatcher protos.
type.matcher.v3.ListStringMatcher inclusion_list = 3;
}
}
// Designates a tag name and value pair. The value may be either a fixed value
// or a regex providing the value via capture groups. The specified tag will be
// unconditionally set if a fixed value, otherwise it will only be set if one
// or more capture groups in the regex match.
message TagSpecifier {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.metrics.v2.TagSpecifier";
// Attaches an identifier to the tag values to identify the tag being in the
// sink. Envoy has a set of default names and regexes to extract dynamic
// portions of existing stats, which can be found in :repo:`well_known_names.h
// ` in the Envoy repository. If a :ref:`tag_name
// ` is provided in the config and
// neither :ref:`regex ` or
// :ref:`fixed_value ` were specified,
// Envoy will attempt to find that name in its set of defaults and use the accompanying regex.
//
// .. note::
//
// A stat name may be spelled in such a way that it matches two different
// tag extractors for the same tag name. In that case, all but one of the
// tag values will be dropped. It is not specified which tag value will be
// retained. The extraction will only occur for one of the extractors, and
// only the matched extraction will be removed from the tag name.
string tag_name = 1;
oneof tag_value {
// Designates a tag to strip from the tag extracted name and provide as a named
// tag value for all statistics. This will only occur if any part of the name
// matches the regex provided with one or more capture groups.
//
// The first capture group identifies the portion of the name to remove. The
// second capture group (which will normally be nested inside the first) will
// designate the value of the tag for the statistic. If no second capture
// group is provided, the first will also be used to set the value of the tag.
// All other capture groups will be ignored.
//
// Example 1. a stat name ``cluster.foo_cluster.upstream_rq_timeout`` and
// one tag specifier:
//
// .. code-block:: json
//
// {
// "tag_name": "envoy.cluster_name",
// "regex": "^cluster\\.((.+?)\\.)"
// }
//
// Note that the regex will remove ``foo_cluster.`` making the tag extracted
// name ``cluster.upstream_rq_timeout`` and the tag value for
// ``envoy.cluster_name`` will be ``foo_cluster`` (note: there will be no
// ``.`` character because of the second capture group).
//
// Example 2. a stat name
// ``http.connection_manager_1.user_agent.ios.downstream_cx_total`` and two
// tag specifiers:
//
// .. code-block:: json
//
// [
// {
// "tag_name": "envoy.http_user_agent",
// "regex": "^http(?=\\.).*?\\.user_agent\\.((.+?)\\.)\\w+?$"
// },
// {
// "tag_name": "envoy.http_conn_manager_prefix",
// "regex": "^http\\.((.*?)\\.)"
// }
// ]
//
// The two regexes of the specifiers will be processed from the elaborated
// stat name.
//
// The first regex will save ``ios.`` as the tag value for ``envoy.http_user_agent``. It will
// leave it in the name for potential matching with additional tag specifiers. After all tag
// specifiers are processed the tags will be removed from the name.
//
// The second regex will populate tag ``envoy.http_conn_manager_prefix`` with value
// ``connection_manager_1.``, based on the original stat name.
//
// As a final step, the matched tags are removed, leaving
// ``http.user_agent.downstream_cx_total`` as the tag extracted name.
string regex = 2 [(validate.rules).string = {max_bytes: 1024}];
// Specifies a fixed tag value for the ``tag_name``.
string fixed_value = 3;
}
}
// Specifies a matcher for stats and the buckets that matching stats should use.
message HistogramBucketSettings {
// The stats that this rule applies to. The match is applied to the original stat name
// before tag-extraction, for example ``cluster.exampleclustername.upstream_cx_length_ms``.
type.matcher.v3.StringMatcher match = 1 [(validate.rules).message = {required: true}];
// Each value is the upper bound of a bucket. Each bucket must be greater than 0 and unique.
// The order of the buckets does not matter.
repeated double buckets = 2 [(validate.rules).repeated = {
min_items: 1
unique: true
items {double {gt: 0.0}}
}];
}
// Stats configuration proto schema for built-in ``envoy.stat_sinks.statsd`` sink. This sink does not support
// tagged metrics.
// [#extension: envoy.stat_sinks.statsd]
message StatsdSink {
option (udpa.annotations.versioning).previous_message_type = "envoy.config.metrics.v2.StatsdSink";
oneof statsd_specifier {
option (validate.required) = true;
// The UDP address of a running `statsd `_
// compliant listener. If specified, statistics will be flushed to this
// address.
core.v3.Address address = 1;
// The name of a cluster that is running a TCP `statsd
// `_ compliant listener. If specified,
// Envoy will connect to this cluster to flush statistics.
string tcp_cluster_name = 2;
}
// Optional custom prefix for StatsdSink. If
// specified, this will override the default prefix.
// For example:
//
// .. code-block:: json
//
// {
// "prefix" : "envoy-prod"
// }
//
// will change emitted stats to
//
// .. code-block:: cpp
//
// envoy-prod.test_counter:1|c
// envoy-prod.test_timer:5|ms
//
// Note that the default prefix, "envoy", will be used if a prefix is not
// specified.
//
// Stats with default prefix:
//
// .. code-block:: cpp
//
// envoy.test_counter:1|c
// envoy.test_timer:5|ms
string prefix = 3;
}
// Stats configuration proto schema for built-in ``envoy.stat_sinks.dog_statsd`` sink.
// The sink emits stats with `DogStatsD `_
// compatible tags. Tags are configurable via :ref:`StatsConfig
// `.
// [#extension: envoy.stat_sinks.dog_statsd]
message DogStatsdSink {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.metrics.v2.DogStatsdSink";
reserved 2;
oneof dog_statsd_specifier {
option (validate.required) = true;
// The UDP address of a running DogStatsD compliant listener. If specified,
// statistics will be flushed to this address.
core.v3.Address address = 1;
}
// Optional custom metric name prefix. See :ref:`StatsdSink's prefix field
// ` for more details.
string prefix = 3;
// Optional max datagram size to use when sending UDP messages. By default Envoy
// will emit one metric per datagram. By specifying a max-size larger than a single
// metric, Envoy will emit multiple, new-line separated metrics. The max datagram
// size should not exceed your network's MTU.
//
// Note that this value may not be respected if smaller than a single metric.
google.protobuf.UInt64Value max_bytes_per_datagram = 4 [(validate.rules).uint64 = {gt: 0}];
}
// Stats configuration proto schema for built-in ``envoy.stat_sinks.hystrix`` sink.
// The sink emits stats in `text/event-stream
// `_
// formatted stream for use by `Hystrix dashboard
// `_.
//
// Note that only a single HystrixSink should be configured.
//
// Streaming is started through an admin endpoint :http:get:`/hystrix_event_stream`.
// [#extension: envoy.stat_sinks.hystrix]
message HystrixSink {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.metrics.v2.HystrixSink";
// The number of buckets the rolling statistical window is divided into.
//
// Each time the sink is flushed, all relevant Envoy statistics are sampled and
// added to the rolling window (removing the oldest samples in the window
// in the process). The sink then outputs the aggregate statistics across the
// current rolling window to the event stream(s).
//
// ``rolling_window(ms)`` = ``stats_flush_interval(ms)`` * ``num_of_buckets``
//
// More detailed explanation can be found in `Hystrix wiki
// `_.
int64 num_buckets = 1;
}