From 9f37c7d59a56c931c78646013c269c8e3028a8a3 Mon Sep 17 00:00:00 2001 From: Alan West <3676547+alanwest@users.noreply.github.com> Date: Wed, 16 Jun 2021 11:12:26 -0700 Subject: [PATCH 1/2] Update OTLP protos to v0.9.0 (#2088) * Update to v0.9.0 OTLP protos * Fix conflict with Equals property from generated code and standard Equals method --- .../collector/trace/v1/trace_service.proto | 2 +- .../proto/common/v1/common.proto | 3 + .../opentelemetry/proto/logs/v1/logs.proto | 10 +- .../experimental/metrics_config_service.proto | 102 +++++ .../proto/metrics/v1/metrics.proto | 418 +++++++++++------- .../opentelemetry/proto/trace/v1/trace.proto | 12 +- 6 files changed, 375 insertions(+), 172 deletions(-) create mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/experimental/metrics_config_service.proto diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/collector/trace/v1/trace_service.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/collector/trace/v1/trace_service.proto index 37d0237254..e889a39054 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/collector/trace/v1/trace_service.proto +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/collector/trace/v1/trace_service.proto @@ -24,7 +24,7 @@ option java_outer_classname = "TraceServiceProto"; option go_package = "github.com/open-telemetry/opentelemetry-proto/gen/go/collector/trace/v1"; // Service that can be used to push spans between one Application instrumented with -// OpenTelemetry and an collector, or between an collector and a central collector (in this +// OpenTelemetry and a collector, or between a collector and a central collector (in this // case spans are sent/received to/from multiple Applications). service TraceService { // For performance reasons, it is recommended to keep this RPC diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/common/v1/common.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/common/v1/common.proto index 214c218235..8dc24567f5 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/common/v1/common.proto +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/common/v1/common.proto @@ -34,6 +34,7 @@ message AnyValue { double double_value = 4; ArrayValue array_value = 5; KeyValueList kvlist_value = 6; + bytes bytes_value = 7; } } @@ -65,6 +66,8 @@ message KeyValue { // StringKeyValue is a pair of key/value strings. This is the simpler (and faster) version // of KeyValue that only supports string values. message StringKeyValue { + option deprecated = true; + string key = 1; string value = 2; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/logs/v1/logs.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/logs/v1/logs.proto index 7e576ba166..84fafef221 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/logs/v1/logs.proto +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/logs/v1/logs.proto @@ -32,6 +32,11 @@ message ResourceLogs { // A list of InstrumentationLibraryLogs that originate from a resource. repeated InstrumentationLibraryLogs instrumentation_library_logs = 2; + + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "instrumentation_library_logs" field which have their own + // schema_url field. + string schema_url = 3; } // A collection of Logs produced by an InstrumentationLibrary. @@ -43,6 +48,9 @@ message InstrumentationLibraryLogs { // A list of log records. repeated LogRecord logs = 2; + + // This schema_url applies to all logs in the "logs" field. + string schema_url = 3; } // Possible values for LogRecord.SeverityNumber. @@ -82,7 +90,7 @@ enum LogRecordFlags { } // A log record according to OpenTelemetry Log Data Model: -// https://github.com/open-telemetry/oteps/blob/master/text/logs/0097-log-data-model.md +// https://github.com/open-telemetry/oteps/blob/main/text/logs/0097-log-data-model.md message LogRecord { // time_unix_nano is the time when the event occurred. // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/experimental/metrics_config_service.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/experimental/metrics_config_service.proto new file mode 100644 index 0000000000..d73a7fee80 --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/experimental/metrics_config_service.proto @@ -0,0 +1,102 @@ +// Copyright 2019, OpenTelemetry 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. + +syntax = "proto3"; + +package opentelemetry.proto.metrics.experimental; + +import "opentelemetry/proto/resource/v1/resource.proto"; + +option java_multiple_files = true; +option java_package = "io.opentelemetry.proto.metrics.experimental"; +option java_outer_classname = "MetricConfigServiceProto"; +option go_package = "github.com/open-telemetry/opentelemetry-proto/gen/go/metrics/experimental"; + +// MetricConfig is a service that enables updating metric schedules, trace +// parameters, and other configurations on the SDK without having to restart the +// instrumented application. The collector can also serve as the configuration +// service, acting as a bridge between third-party configuration services and +// the SDK, piping updated configs from a third-party source to an instrumented +// application. +service MetricConfig { + rpc GetMetricConfig (MetricConfigRequest) returns (MetricConfigResponse); +} + +message MetricConfigRequest{ + + // Required. The resource for which configuration should be returned. + opentelemetry.proto.resource.v1.Resource resource = 1; + + // Optional. The value of MetricConfigResponse.fingerprint for the last + // configuration that the caller received and successfully applied. + bytes last_known_fingerprint = 2; +} + +message MetricConfigResponse { + + // Optional. The fingerprint associated with this MetricConfigResponse. Each + // change in configs yields a different fingerprint. The resource SHOULD copy + // this value to MetricConfigRequest.last_known_fingerprint for the next + // configuration request. If there are no changes between fingerprint and + // MetricConfigRequest.last_known_fingerprint, then all other fields besides + // fingerprint in the response are optional, or the same as the last update if + // present. + // + // The exact mechanics of generating the fingerprint is up to the + // implementation. However, a fingerprint must be deterministically determined + // by the configurations -- the same configuration will generate the same + // fingerprint on any instance of an implementation. Hence using a timestamp is + // unacceptable, but a deterministic hash is fine. + bytes fingerprint = 1; + + // A Schedule is used to apply a particular scheduling configuration to + // a metric. If a metric name matches a schedule's patterns, then the metric + // adopts the configuration specified by the schedule. + message Schedule { + + // A light-weight pattern that can match 1 or more + // metrics, for which this schedule will apply. The string is used to + // match against metric names. It should not exceed 100k characters. + message Pattern { + oneof match { + string equal_to = 1; // matches the metric name exactly + string starts_with = 2; // prefix-matches the metric name + } + } + + // Metrics with names that match a rule in the inclusion_patterns are + // targeted by this schedule. Metrics that match the exclusion_patterns + // are not targeted for this schedule, even if they match an inclusion + // pattern. + repeated Pattern exclusion_patterns = 1; + repeated Pattern inclusion_patterns = 2; + + // Describes the collection period for each metric in seconds. + // A period of 0 means to not export. + int32 period_sec = 3; + } + + // A single metric may match multiple schedules. In such cases, the schedule + // that specifies the smallest period is applied. + // + // Note, for optimization purposes, it is recommended to use as few schedules + // as possible to capture all required metric updates. Where you can be + // conservative, do take full advantage of the inclusion/exclusion patterns to + // capture as much of your targeted metrics. + repeated Schedule schedules = 2; + + // Optional. The client is suggested to wait this long (in seconds) before + // pinging the configuration service again. + int32 suggested_wait_time_sec = 3; +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/v1/metrics.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/v1/metrics.proto index 371a43ceec..244f4229bd 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/v1/metrics.proto +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/metrics/v1/metrics.proto @@ -32,6 +32,11 @@ message ResourceMetrics { // A list of metrics that originate from a resource. repeated InstrumentationLibraryMetrics instrumentation_library_metrics = 2; + + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "instrumentation_library_metrics" field which have their own + // schema_url field. + string schema_url = 3; } // A collection of Metrics produced by an InstrumentationLibrary. @@ -43,9 +48,16 @@ message InstrumentationLibraryMetrics { // A list of metrics that originate from an instrumentation library. repeated Metric metrics = 2; + + // This schema_url applies to all metrics in the "metrics" field. + string schema_url = 3; } -// Defines a Metric which has one or more timeseries. +// Defines a Metric which has one or more timeseries. The following is a +// brief summary of the Metric data model. For more details, see: +// +// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/datamodel.md +// // // The data model and relation between entities is shown in the // diagram below. Here, "DataPoint" is the term used to refer to any @@ -54,8 +66,8 @@ message InstrumentationLibraryMetrics { // // - Metric is composed of a metadata and data. // - Metadata part contains a name, description, unit. -// - Data is one of the possible types (Gauge, Sum, Histogram, etc.). -// - DataPoint contains timestamps, labels, and one of the possible value type +// - Data is one of the possible types (Sum, Gauge, Histogram, Summary). +// - DataPoint contains timestamps, attributes, and one of the possible value type // fields. // // Metric @@ -95,14 +107,37 @@ message InstrumentationLibraryMetrics { // |+-----+ | // +---------------------------+ // +// Each distinct type of DataPoint represents the output of a specific +// aggregation function, the result of applying the DataPoint's +// associated function of to one or more measurements. +// // All DataPoint types have three common fields: -// - Labels zero or more key-value pairs associated with the data point. -// - StartTimeUnixNano MUST be set to the start of the interval when the data's -// type includes an AggregationTemporality. This field is not set otherwise. -// - TimeUnixNano MUST be set to: -// - the moment when an aggregation is reported (independent of the -// aggregation temporality). -// - the instantaneous time of the event. +// - Attributes includes key-value pairs associated with the data point +// - TimeUnixNano is required, set to the end time of the aggregation +// - StartTimeUnixNano is optional, but strongly encouraged for DataPoints +// having an AggregationTemporality field, as discussed below. +// +// Both TimeUnixNano and StartTimeUnixNano values are expressed as +// UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970. +// +// # TimeUnixNano +// +// This field is required, having consistent interpretation across +// DataPoint types. TimeUnixNano is the moment corresponding to when +// the data point's aggregate value was captured. +// +// Data points with the 0 value for TimeUnixNano SHOULD be rejected +// by consumers. +// +// # StartTimeUnixNano +// +// StartTimeUnixNano in general allows detecting when a sequence of +// observations is unbroken. This field indicates to consumers the +// start time for points with cumulative and delta +// AggregationTemporality, and it should be included whenever possible +// to support correct rate calculation. Although it may be omitted +// when the start time is truly unknown, setting StartTimeUnixNano is +// strongly encouraged. message Metric { // name of the metric, including its DNS name prefix. It must be unique. string name = 1; @@ -114,68 +149,74 @@ message Metric { // described by http://unitsofmeasure.org/ucum.html. string unit = 3; - // TODO: Decide if support for RawMeasurements (measurements recorded using - // the synchronous instruments) is necessary. It can be used to delegate the - // aggregation from the application to the agent/collector. See - // https://github.com/open-telemetry/opentelemetry-specification/issues/617 - // Data determines the aggregation type (if any) of the metric, what is the // reported value type for the data points, as well as the relatationship to // the time interval over which they are reported. - // - // TODO: Update table after the decision on: - // https://github.com/open-telemetry/opentelemetry-specification/issues/731. - // By default, metrics recording using the OpenTelemetry API are exported as - // (the table does not include MeasurementValueType to avoid extra rows): - // - // Instrument Type - // ---------------------------------------------- - // Counter Sum(aggregation_temporality=delta;is_monotonic=true) - // UpDownCounter Sum(aggregation_temporality=delta;is_monotonic=false) - // ValueRecorder TBD - // SumObserver Sum(aggregation_temporality=cumulative;is_monotonic=true) - // UpDownSumObserver Sum(aggregation_temporality=cumulative;is_monotonic=false) - // ValueObserver Gauge() oneof data { - IntGauge int_gauge = 4; - DoubleGauge double_gauge = 5; - IntSum int_sum = 6; - DoubleSum double_sum = 7; - IntHistogram int_histogram = 8; - DoubleHistogram double_histogram = 9; - DoubleSummary double_summary = 11; + // IntGauge and IntSum are deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `int_gauge` and `int_sum` fields. + // 2. New senders, which are aware of this change MUST send only `gauge` + // and `sum` fields. + // 3. New receivers, which are aware of this change MUST convert these into + // `gauge` and `sum` by using the provided as_int field in the oneof values. + // This field will be removed in ~3 months, on July 1, 2021. + IntGauge int_gauge = 4 [deprecated = true]; + Gauge gauge = 5; + // This field will be removed in ~3 months, on July 1, 2021. + IntSum int_sum = 6 [deprecated = true]; + Sum sum = 7; + + // IntHistogram is deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `int_histogram` field. + // 2. New senders, which are aware of this change MUST send only `histogram`. + // 3. New receivers, which are aware of this change MUST convert this into + // `histogram` by simply converting all int64 values into float. + // This field will be removed in ~3 months, on July 1, 2021. + IntHistogram int_histogram = 8 [deprecated = true]; + Histogram histogram = 9; + Summary summary = 11; } } -// Gauge represents the type of a int scalar metric that always exports the +// IntGauge is deprecated. Use Gauge with an integer value in NumberDataPoint. +// +// IntGauge represents the type of a int scalar metric that always exports the // "current value" for every data point. It should be used for an "unknown" // aggregation. -// +// // A Gauge does not support different aggregation temporalities. Given the // aggregation is unknown, points cannot be combined using the same // aggregation, regardless of aggregation temporalities. Therefore, // AggregationTemporality is not included. Consequently, this also means // "StartTimeUnixNano" is ignored for all data points. message IntGauge { + option deprecated = true; + repeated IntDataPoint data_points = 1; } // Gauge represents the type of a double scalar metric that always exports the // "current value" for every data point. It should be used for an "unknown" // aggregation. -// +// // A Gauge does not support different aggregation temporalities. Given the // aggregation is unknown, points cannot be combined using the same // aggregation, regardless of aggregation temporalities. Therefore, // AggregationTemporality is not included. Consequently, this also means // "StartTimeUnixNano" is ignored for all data points. -message DoubleGauge { - repeated DoubleDataPoint data_points = 1; +message Gauge { + repeated NumberDataPoint data_points = 1; } -// Sum represents the type of a numeric int scalar metric that is calculated as +// IntSum is deprecated. Use Sum with an integer value in NumberDataPoint. +// +// IntSum represents the type of a numeric int scalar metric that is calculated as // a sum of all reported measurements over a time interval. message IntSum { + option deprecated = true; + repeated IntDataPoint data_points = 1; // aggregation_temporality describes if the aggregator reports delta changes @@ -188,9 +229,9 @@ message IntSum { // Sum represents the type of a numeric double scalar metric that is calculated // as a sum of all reported measurements over a time interval. -message DoubleSum { - repeated DoubleDataPoint data_points = 1; - +message Sum { + repeated NumberDataPoint 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; @@ -199,9 +240,14 @@ message DoubleSum { bool is_monotonic = 3; } -// Represents the type of a metric that is calculated by aggregating as a +// IntHistogram is deprecated, replaced by Histogram points using double- +// valued exemplars. +// +// This represents the type of a metric that is calculated by aggregating as a // Histogram of all reported int measurements over a time interval. message IntHistogram { + option deprecated = true; + repeated IntHistogramDataPoint data_points = 1; // aggregation_temporality describes if the aggregator reports delta changes @@ -209,24 +255,24 @@ message IntHistogram { AggregationTemporality aggregation_temporality = 2; } -// Represents the type of a metric that is calculated by aggregating as a -// Histogram of all reported double measurements over a time interval. -message DoubleHistogram { - repeated DoubleHistogramDataPoint data_points = 1; +// Histogram represents the type of a metric that is calculated by aggregating +// as a Histogram of all reported double measurements over a time interval. +message Histogram { + repeated HistogramDataPoint 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; } -// DoubleSummary metric data are used to convey quantile summaries, +// Summary metric data are used to convey quantile summaries, // a Prometheus (see: https://prometheus.io/docs/concepts/metric_types/#summary) // and OpenMetrics (see: https://github.com/OpenObservability/OpenMetrics/blob/4dbf6075567ab43296eed941037c12951faafb92/protos/prometheus.proto#L45) // data type. These data points cannot always be merged in a meaningful way. // While they can be useful in some applications, histogram data points are // recommended for new applications. -message DoubleSummary { - repeated DoubleSummaryDataPoint data_points = 1; +message Summary { + repeated SummaryDataPoint data_points = 1; } // AggregationTemporality defines how a metric aggregator reports aggregated @@ -293,7 +339,7 @@ enum AggregationTemporality { // number of requests received over the interval of time t_1 to // t_0+1 with a value of 1. // - // Note: Even though, when reporting changes since last report time, using + // Note: Even though, when reporting changes since last report time, using // CUMULATIVE is valid, it is not recommended. This may cause problems for // systems that do not use start_time to determine when the aggregation // value was reset (e.g. Prometheus). @@ -303,25 +349,20 @@ enum AggregationTemporality { // IntDataPoint is a single data point in a timeseries that describes the // time-varying values of a int64 metric. message IntDataPoint { + option deprecated = true; + // 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. + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detiled comments above Metric. // - // 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. - // + // TimeUnixNano is required, see the detailed comments above Metric. + // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 time_unix_nano = 3; @@ -334,64 +375,75 @@ message IntDataPoint { repeated IntExemplar exemplars = 5; } -// DoubleDataPoint is a single data point in a timeseries that describes the +// NumberDataPoint is a single data point in a timeseries that describes the // time-varying value of a double metric. -message DoubleDataPoint { - // The set of labels that uniquely identify this timeseries. - repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1; +message NumberDataPoint { + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + repeated opentelemetry.proto.common.v1.KeyValue attributes = 7; - // 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. + // Labels is deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `labels` field. + // 2. New senders, which are aware of this change MUST send only `attributes`. + // 3. New receivers, which are aware of this change MUST convert this into + // `labels` by simply converting all int64 values into float. + // + // This field will be removed in ~3 months, on July 1, 2021. + repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1 [deprecated = true]; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detiled comments above Metric. // - // 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. - // + // TimeUnixNano is required, see the detailed comments above Metric. + // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 time_unix_nano = 3; - // value itself. - double value = 4; + // The value itself. A point is considered invalid when one of the recognized + // value fields is not present inside this oneof. + oneof value { + double as_double = 4; + sfixed64 as_int = 6; + } // (Optional) List of exemplars collected from // measurements that were used to form the data point - repeated DoubleExemplar exemplars = 5; + repeated Exemplar exemplars = 5; } -// IntHistogramDataPoint is a single data point in a timeseries that describes +// IntHistogramDataPoint is deprecated; use HistogramDataPoint. +// +// This is a single data point in a timeseries that describes // the time-varying values of a Histogram of int values. A Histogram contains // summary statistics for a population of values, it may optionally contain // the distribution of those values across a set of buckets. +// +// If the histogram contains the distribution of values, then both +// "explicit_bounds" and "bucket counts" fields must be defined. +// If the histogram does not contain the distribution of values, then both +// "explicit_bounds" and "bucket_counts" must be omitted and only "count" and +// "sum" are known. message IntHistogramDataPoint { + option deprecated = true; + // 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. + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detiled comments above Metric. // - // 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. - // + // TimeUnixNano is required, see the detailed comments above Metric. + // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 time_unix_nano = 3; @@ -415,28 +467,20 @@ message IntHistogramDataPoint { // the number of elements in explicit_bounds array. repeated fixed64 bucket_counts = 6; - // A histogram may optionally contain the distribution of the values in the population. - // In that case one of the option fields below and "buckets" field both must be defined. - // Otherwise all option fields and "buckets" field must be omitted in which case the - // distribution of values in the histogram is unknown and only the total count and sum are known. - - // explicit_bounds is the only supported bucket option currently. - // TODO: Add more bucket options. - // explicit_bounds specifies buckets with explicitly defined bounds for values. - // The bucket boundaries are described by "bounds" field. // - // This defines size(bounds) + 1 (= N) buckets. The boundaries for bucket - // at index i are: + // This defines size(explicit_bounds) + 1 (= N) buckets. The boundaries for + // bucket at index i are: + // + // (-infinity, explicit_bounds[i]] for i == 0 + // (explicit_bounds[i-1], explicit_bounds[i]] for 0 < i < N-1 + // (explicit_bounds[i], +infinity) for i == N-1 // - // (-infinity, bounds[i]) for i == 0 - // [bounds[i-1], bounds[i]) for 0 < i < N-1 - // [bounds[i], +infinity) for i == N-1 - // The values in bounds array must be strictly increasing. + // The values in the explicit_bounds array must be strictly increasing. // - // Note: only [a, b) intervals are currently supported for each bucket except the first one. - // If we decide to also support (a, b] intervals we should add support for these by defining - // a boolean value which decides what type of intervals to use. + // Histogram buckets are inclusive of their upper boundary, except the last + // bucket where the boundary is at infinity. This format is intentionally + // compatible with the OpenMetrics histogram definition. repeated double explicit_bounds = 7; // (Optional) List of exemplars collected from @@ -448,26 +492,36 @@ message IntHistogramDataPoint { // time-varying values of a Histogram of double values. A Histogram contains // summary statistics for a population of values, it may optionally contain the // distribution of those values across a set of buckets. -message DoubleHistogramDataPoint { - // 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. +// +// If the histogram contains the distribution of values, then both +// "explicit_bounds" and "bucket counts" fields must be defined. +// If the histogram does not contain the distribution of values, then both +// "explicit_bounds" and "bucket_counts" must be omitted and only "count" and +// "sum" are known. +message HistogramDataPoint { + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + repeated opentelemetry.proto.common.v1.KeyValue attributes = 9; + + // Labels is deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `labels` field. + // 2. New senders, which are aware of this change MUST send only `attributes`. + // 3. New receivers, which are aware of this change MUST convert this into + // `labels` by simply converting all int64 values into float. + // + // This field will be removed in ~3 months, on July 1, 2021. + repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1 [deprecated = true]; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detiled comments above Metric. // - // 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. - // + // TimeUnixNano is required, see the detailed comments above Metric. + // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. fixed64 time_unix_nano = 3; @@ -480,6 +534,12 @@ message DoubleHistogramDataPoint { // sum of the values in the population. If count is zero then this field // must be zero. This value must be equal to the sum of the "sum" fields in // buckets if a histogram is provided. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#histogram double sum = 5; // bucket_counts is an optional field contains the count values of histogram @@ -491,56 +551,52 @@ message DoubleHistogramDataPoint { // the number of elements in explicit_bounds array. repeated fixed64 bucket_counts = 6; - // A histogram may optionally contain the distribution of the values in the population. - // In that case one of the option fields below and "buckets" field both must be defined. - // Otherwise all option fields and "buckets" field must be omitted in which case the - // distribution of values in the histogram is unknown and only the total count and sum are known. - - // explicit_bounds is the only supported bucket option currently. - // TODO: Add more bucket options. - // explicit_bounds specifies buckets with explicitly defined bounds for values. - // The bucket boundaries are described by "bounds" field. // - // This defines size(bounds) + 1 (= N) buckets. The boundaries for bucket - // at index i are: + // This defines size(explicit_bounds) + 1 (= N) buckets. The boundaries for + // bucket at index i are: + // + // (-infinity, explicit_bounds[i]] for i == 0 + // (explicit_bounds[i-1], explicit_bounds[i]] for 0 < i < N-1 + // (explicit_bounds[i], +infinity) for i == N-1 // - // (-infinity, bounds[i]) for i == 0 - // [bounds[i-1], bounds[i]) for 0 < i < N-1 - // [bounds[i], +infinity) for i == N-1 - // The values in bounds array must be strictly increasing. + // The values in the explicit_bounds array must be strictly increasing. // - // Note: only [a, b) intervals are currently supported for each bucket except the first one. - // If we decide to also support (a, b] intervals we should add support for these by defining - // a boolean value which decides what type of intervals to use. + // Histogram buckets are inclusive of their upper boundary, except the last + // bucket where the boundary is at infinity. This format is intentionally + // compatible with the OpenMetrics histogram definition. repeated double explicit_bounds = 7; // (Optional) List of exemplars collected from // measurements that were used to form the data point - repeated DoubleExemplar exemplars = 8; + repeated Exemplar exemplars = 8; } -// DoubleSummaryDataPoint is a single data point in a timeseries that describes the +// 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; +message SummaryDataPoint { + // The set of key/value pairs that uniquely identify the timeseries from + // where this point belongs. The list may be empty (may contain 0 elements). + repeated opentelemetry.proto.common.v1.KeyValue attributes = 7; - // 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. + // Labels is deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `labels` field. + // 2. New senders, which are aware of this change MUST send only `attributes`. + // 3. New receivers, which are aware of this change MUST convert this into + // `labels` by simply converting all int64 values into float. // - // The aggregation value is over the time interval (start_time_unix_nano, - // time_unix_nano]. + // This field will be removed in ~3 months, on July 1, 2021. + repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1 [deprecated = true]; + + // StartTimeUnixNano is optional but strongly encouraged, see the + // the detiled comments above Metric. // // 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. + // TimeUnixNano is required, see the detailed comments above Metric. // // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January // 1970. @@ -551,6 +607,12 @@ message DoubleSummaryDataPoint { // sum of the values in the population. If count is zero then this field // must be zero. + // + // Note: Sum should only be filled out when measuring non-negative discrete + // events, and is assumed to be monotonic over the values of these events. + // Negative events *can* be recorded, but sum should not be filled out when + // doing so. This is specifically to enforce compatibility w/ OpenMetrics, + // see: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#summary double sum = 5; // Represents the value at a given quantile of a distribution. @@ -567,6 +629,8 @@ message DoubleSummaryDataPoint { double quantile = 1; // The value at the given quantile of a distribution. + // + // Quantile values must NOT be negative. double value = 2; } @@ -580,6 +644,8 @@ message DoubleSummaryDataPoint { // was recorded, for example the span and trace ID of the active span when the // exemplar was recorded. message IntExemplar { + option deprecated = true; + // The set of labels that were filtered out by the aggregator, but recorded // alongside the original measurement. Only labels that were filtered out // by the aggregator should be included @@ -605,15 +671,26 @@ message IntExemplar { bytes trace_id = 5; } -// A representation of an exemplar, which is a sample input double measurement. +// A representation of an exemplar, which is a sample input 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 // exemplar was recorded. -message DoubleExemplar { - // The set of labels that were filtered out by the aggregator, but recorded - // alongside the original measurement. Only labels that were filtered out - // by the aggregator should be included - repeated opentelemetry.proto.common.v1.StringKeyValue filtered_labels = 1; +message Exemplar { + // The set of key/value pairs that were filtered out by the aggregator, but + // recorded alongside the original measurement. Only key/value pairs that were + // filtered out by the aggregator should be included + repeated opentelemetry.proto.common.v1.KeyValue filtered_attributes = 7; + + // Labels is deprecated and will be removed soon. + // 1. Old senders and receivers that are not aware of this change will + // continue using the `filtered_labels` field. + // 2. New senders, which are aware of this change MUST send only + // `filtered_attributes`. + // 3. New receivers, which are aware of this change MUST convert this into + // `filtered_labels` by simply converting all int64 values into float. + // + // This field will be removed in ~3 months, on July 1, 2021. + repeated opentelemetry.proto.common.v1.StringKeyValue filtered_labels = 1 [deprecated = true]; // time_unix_nano is the exact time when this exemplar was recorded // @@ -621,8 +698,13 @@ message DoubleExemplar { // 1970. fixed64 time_unix_nano = 2; - // Numerical double value of the measurement that was recorded. - double value = 3; + // Numerical value of the measurement that was recorded. An exemplar is + // considered invalid when one of the recognized value fields is not present + // inside this oneof. + oneof value { + double as_double = 3; + sfixed64 as_int = 6; + } // (Optional) Span ID of the exemplar trace. // span_id may be missing if the measurement is not recorded inside a trace diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/trace/v1/trace.proto b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/trace/v1/trace.proto index 004c2148c6..1513e52ee3 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/trace/v1/trace.proto +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/opentelemetry/proto/trace/v1/trace.proto @@ -32,6 +32,11 @@ message ResourceSpans { // A list of InstrumentationLibrarySpans that originate from a resource. repeated InstrumentationLibrarySpans instrumentation_library_spans = 2; + + // This schema_url applies to the data in the "resource" field. It does not apply + // to the data in the "instrumentation_library_spans" field which have their own + // schema_url field. + string schema_url = 3; } // A collection of Spans produced by an InstrumentationLibrary. @@ -43,6 +48,9 @@ message InstrumentationLibrarySpans { // A list of Spans that originate from an instrumentation library. repeated Span spans = 2; + + // This schema_url applies to all spans and span events in the "spans" field. + string schema_url = 3; } // Span represents a single operation within a trace. Spans can be @@ -107,7 +115,7 @@ message Span { SPAN_KIND_UNSPECIFIED = 0; // Indicates that the span represents an internal operation within an application, - // as opposed to an operations happening at the boundaries. Default value. + // as opposed to an operation happening at the boundaries. Default value. SPAN_KIND_INTERNAL = 1; // Indicates that the span covers server-side handling of an RPC or other @@ -300,7 +308,7 @@ message Status { string message = 2; // For the semantics of status codes see - // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/api.md#set-status + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status enum StatusCode { // The default status. STATUS_CODE_UNSET = 0; From 7723fa04cffbf9aca662be87e4599991b8b0d9cc Mon Sep 17 00:00:00 2001 From: Utkarsh Umesan Pillai <66651184+utpilla@users.noreply.github.com> Date: Wed, 16 Jun 2021 12:40:29 -0700 Subject: [PATCH 2/2] Update Microsoft.NET.Test.Sdk package to latest version 16.10.0 (#2085) --- build/Common.nonprod.props | 2 +- build/Common.props | 3 ++- build/process-codecoverage.ps1 | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build/Common.nonprod.props b/build/Common.nonprod.props index 57593f6ca7..72c9456056 100644 --- a/build/Common.nonprod.props +++ b/build/Common.nonprod.props @@ -36,7 +36,7 @@ [5.0.0,6.0) [5.0.0,6.0) [5.0.0,6.0) - [16.9.1] + [16.10.0] [4.14.5,5.0) [6.1.0,7.0) [2.1.58,3.0) diff --git a/build/Common.props b/build/Common.props index d273eebea0..c16d435a7e 100644 --- a/build/Common.props +++ b/build/Common.props @@ -30,7 +30,7 @@ [2.1.1,6.0) [1.0.7,2.0) [3.3.1] - [16.9.1] + [16.10.0] [2.1.0,6.0) [2.1.0,6.0) [2.1.0,6.0) @@ -57,6 +57,7 @@ All +