From 6e615f688b827e71971d1c1ec0998e33c78762c3 Mon Sep 17 00:00:00 2001 From: Gianluca Cacace Date: Wed, 28 Oct 2020 12:52:18 +0000 Subject: [PATCH] Add SummaryDataPoint support to Metrics proto (opentelemetry/opentelemetry-specification#1146) * Add IntSummary and DoubleSummary to data * Add IntSummaryDataPoint and DoubleSummaryDataPoint * Comments --- opentelemetry/proto/metrics/v1/metrics.proto | 158 ++++++++++++++++++- 1 file changed, 153 insertions(+), 5 deletions(-) diff --git a/opentelemetry/proto/metrics/v1/metrics.proto b/opentelemetry/proto/metrics/v1/metrics.proto index aa9d71303..7fc078b85 100644 --- a/opentelemetry/proto/metrics/v1/metrics.proto +++ b/opentelemetry/proto/metrics/v1/metrics.proto @@ -61,11 +61,11 @@ message InstrumentationLibraryMetrics { // +------------+ // |name | // |description | -// |unit | +---------------------------+ -// |data |---> |Gauge, Sum, Histogram, ... | -// +------------+ +---------------------------+ +// |unit | +------------------------------------+ +// |data |---> |Gauge, Sum, Histogram, Summary, ... | +// +------------+ +------------------------------------+ // -// Data [One of Gauge, Sum, Histogram, ...] +// Data [One of Gauge, Sum, Histogram, Summary, ...] // +-----------+ // |... | // Metadata about the Data. // |points |--+ @@ -142,6 +142,8 @@ message Metric { DoubleSum double_sum = 7; IntHistogram int_histogram = 8; DoubleHistogram double_histogram = 9; + IntSummary int_summary = 10; + DoubleSummary double_summary = 11; } } @@ -217,6 +219,22 @@ message DoubleHistogram { AggregationTemporality aggregation_temporality = 2; } +message IntSummary { + repeated IntSummaryDataPoint data_points = 1; + + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality aggregation_temporality = 2; +} + +message DoubleSummary { + repeated DoubleSummaryDataPoint data_points = 1; + + // aggregation_temporality describes if the aggregator reports delta changes + // since last report time, or cumulative changes since a fixed start time. + AggregationTemporality aggregation_temporality = 2; +} + // AggregationTemporality defines how a metric aggregator reports aggregated // values. It describes how those values relate to the time interval over // which they are aggregated. @@ -250,7 +268,7 @@ enum AggregationTemporality { // t_0+2 with a value of 2. AGGREGATION_TEMPORALITY_DELTA = 1; - // CUMULATIVE is an AggregationTemporality for a metic aggregator which + // CUMULATIVE is an AggregationTemporality for a metric aggregator which // reports changes since a fixed start time. This means that current values // of a CUMULATIVE metric depend on all previous measurements since the // start time. Because of this, the sender is required to retain this state @@ -508,6 +526,136 @@ message DoubleHistogramDataPoint { repeated DoubleExemplar exemplars = 8; } +// SummaryDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Summary metric. +message IntSummaryDataPoint { + // The set of labels that uniquely identify this timeseries. + repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1; + + // start_time_unix_nano is the last time when the aggregation value was reset + // to "zero". For some metric types this is ignored, see data types for more + // details. + // + // The aggregation value is over the time interval (start_time_unix_nano, + // time_unix_nano]. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + // + // Value of 0 indicates that the timestamp is unspecified. In that case the + // timestamp may be decided by the backend. + fixed64 start_time_unix_nano = 2; + + // time_unix_nano is the moment when this aggregation value was reported. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // count is the number of values in the population. Must be non-negative. + fixed64 count = 4; + + // sum of the values in the population. If count is zero then this field + // must be zero. + sfixed64 sum = 5; + + // min of the values in the population. + sfixed64 min = 6; + + // max of the values in the population. + sfixed64 max = 7; + + // Represents the value at a given quantile of a distribution. + // + // To record Min and Max values following conventions are used: + // - The 1.0 quantile is equivalent to the maximum value observed. + // - The 0.0 quantile is equivalent to the minimum value observed. + // + // See the following issue for more context: + // https://github.com/open-telemetry/opentelemetry-proto/issues/125 + message ValueAtQuantile { + // The quantile of a distribution. Must be in the interval + // [0.0, 1.0]. + double quantile = 1; + + // The value at the given quantile of a distribution. + sfixed64 value = 2; + } + + // (Optional) List of values at different quantiles of the distribution calculated + // from the current snapshot. The quantiles must be strictly increasing. + repeated ValueAtQuantile quantile_values = 8; + + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + repeated IntExemplar exemplars = 9; +} + +// SummaryDataPoint is a single data point in a timeseries that describes the +// time-varying values of a Summary metric. +message DoubleSummaryDataPoint { + // The set of labels that uniquely identify this timeseries. + repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1; + + // start_time_unix_nano is the last time when the aggregation value was reset + // to "zero". For some metric types this is ignored, see data types for more + // details. + // + // The aggregation value is over the time interval (start_time_unix_nano, + // time_unix_nano]. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + // + // Value of 0 indicates that the timestamp is unspecified. In that case the + // timestamp may be decided by the backend. + fixed64 start_time_unix_nano = 2; + + // time_unix_nano is the moment when this aggregation value was reported. + // + // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January + // 1970. + fixed64 time_unix_nano = 3; + + // count is the number of values in the population. Must be non-negative. + fixed64 count = 4; + + // sum of the values in the population. If count is zero then this field + // must be zero. + double sum = 5; + + // min of the values in the population. + double min = 6; + + // max of the values in the population. + double max = 7; + + // Represents the value at a given quantile of a distribution. + // + // To record Min and Max values following conventions are used: + // - The 1.0 quantile is equivalent to the maximum value observed. + // - The 0.0 quantile is equivalent to the minimum value observed. + // + // See the following issue for more context: + // https://github.com/open-telemetry/opentelemetry-proto/issues/125 + message ValueAtQuantile { + // The quantile of a distribution. Must be in the interval + // [0.0, 1.0]. + double quantile = 1; + + // The value at the given quantile of a distribution. + double value = 2; + } + + // (Optional) list of values at different quantiles of the distribution calculated + // from the current snapshot. The quantiles must be strictly increasing. + repeated ValueAtQuantile quantile_values = 8; + + // (Optional) List of exemplars collected from + // measurements that were used to form the data point + repeated DoubleExemplar exemplars = 9; +} + // A representation of an exemplar, which is a sample input int measurement. // Exemplars also hold information about the environment when the measurement // was recorded, for example the span and trace ID of the active span when the