From 068c2a7c83956b83d9938026d06eb43af9e7a5b3 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Fri, 30 Apr 2021 11:16:21 -0400 Subject: [PATCH 01/16] Fixes. --- specification/metrics/datamodel.md | 46 +++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 1d1f893c51e..a1e046a4993 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -300,7 +300,51 @@ Pending ### Histogram -Pending +[Histgram](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L225) +metric data points convey a population of recorded data points in a compressed +format. A histogram bundles a set of events into divided populations with an +overall event count and aggregate sum for all events. + +![Delta Histogram](img/model-histogram.png) + +Histograms consist of the following: + +- An *Aggregation Temporality* of delta or cumulative. +- A set of data points, each containing: +- An independent set of Attribute name-value pairs. + - A time window (of `(start, end]`) time for which the Histogram was bundled. + - The time interval is inclusive of the end time. + - Times are specified in Value is UNIX Epoch time in nanoseconds since + `00:00:00 UTC on 1 January 1970` + - A count (`count`) of the total population of points in the histogram. + - A sum (`sum`) of all the values in the histogram. + - (optional) A series of buckets with: + - Explicit boundary values. These values denote the lower and upper bounds + for buckets and whether not a given observation would be recorded in this + bucket. + - A count of the number of observations that fell within this bucket. + - (optional) a set of examplars (see [Exemplar](#exemplars)). + +Like Sums, Histograms also define an aggregation temporality. The picture above +denotes Delta temporality where accumulated events are dropped after reporting +and a new aggregation occurs. Cumulative, on the other hand, contiues to +aggregate events until a reset. + +#### Exemplars + +An exemplar is a recorded value that associates OpenTelemetry context to +a metric event within a Histogram. It allows users to link Trace signals w/ +Metrics. + +Exemplars consist of: + - The trace associated with a recording (`trace_id`, `span_id`) + - The time of the observation (`time_unix_nano`) + - The recorded value (`value`) + - A set of filtered attributes (`filtered_attributes`) which provide + additional insight into the Context when the observation was made. + +When an exemplar exists, its value already participates in `bucket_counts`, +`count` and `sum` reported by the histogram point. ### Summary (Legacy) From 786339d49997a4f34c4cb0523a77bbf0d7d849d6 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Fri, 30 Apr 2021 11:19:04 -0400 Subject: [PATCH 02/16] Add histogram diagram. --- specification/metrics/datamodel.md | 2 +- .../metrics/img/model-delta-histogram.png | Bin 0 -> 54345 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 specification/metrics/img/model-delta-histogram.png diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index a1e046a4993..86971bc6ec6 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -305,7 +305,7 @@ metric data points convey a population of recorded data points in a compressed format. A histogram bundles a set of events into divided populations with an overall event count and aggregate sum for all events. -![Delta Histogram](img/model-histogram.png) +![Delta Histogram](img/model-delta-histogram.png) Histograms consist of the following: diff --git a/specification/metrics/img/model-delta-histogram.png b/specification/metrics/img/model-delta-histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ec06a270d63d4d1d06fb519afcb896d70616f2 GIT binary patch literal 54345 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࿌R)^^=S{Bzbm&2LTwOmx&`y{(uAD?%v#KgrJ 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 E024%QSO5S3 literal 0 HcmV?d00001 From 335f5012000113cf301861a4165f2958745e59de Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Fri, 30 Apr 2021 11:21:47 -0400 Subject: [PATCH 03/16] Clean up formatting. --- specification/metrics/datamodel.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 86971bc6ec6..3a9fcecaffe 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -323,7 +323,7 @@ Histograms consist of the following: for buckets and whether not a given observation would be recorded in this bucket. - A count of the number of observations that fell within this bucket. - - (optional) a set of examplars (see [Exemplar](#exemplars)). + - (optional) a set of examplars (see [Exemplars](#exemplars)). Like Sums, Histograms also define an aggregation temporality. The picture above denotes Delta temporality where accumulated events are dropped after reporting @@ -337,11 +337,12 @@ a metric event within a Histogram. It allows users to link Trace signals w/ Metrics. Exemplars consist of: - - The trace associated with a recording (`trace_id`, `span_id`) - - The time of the observation (`time_unix_nano`) - - The recorded value (`value`) - - A set of filtered attributes (`filtered_attributes`) which provide - additional insight into the Context when the observation was made. + +- The trace associated with a recording (`trace_id`, `span_id`) +- The time of the observation (`time_unix_nano`) +- The recorded value (`value`) +- A set of filtered attributes (`filtered_attributes`) which provide + additional insight into the Context when the observation was made. When an exemplar exists, its value already participates in `bucket_counts`, `count` and `sum` reported by the histogram point. From 9e02f967b5d707d430956ac17056d411006e8f2d Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Fri, 30 Apr 2021 11:25:59 -0400 Subject: [PATCH 04/16] Fix formatting, some wordsmithing. --- specification/metrics/datamodel.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 3a9fcecaffe..76661ffe13a 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -311,7 +311,7 @@ Histograms consist of the following: - An *Aggregation Temporality* of delta or cumulative. - A set of data points, each containing: -- An independent set of Attribute name-value pairs. + - An independent set of Attribute name-value pairs. - A time window (of `(start, end]`) time for which the Histogram was bundled. - The time interval is inclusive of the end time. - Times are specified in Value is UNIX Epoch time in nanoseconds since @@ -338,7 +338,7 @@ Metrics. Exemplars consist of: -- The trace associated with a recording (`trace_id`, `span_id`) +- (optional) The trace associated with a recording (`trace_id`, `span_id`) - The time of the observation (`time_unix_nano`) - The recorded value (`value`) - A set of filtered attributes (`filtered_attributes`) which provide From 08ee61664cb2ff73b4e38d1d60ab6cd6c7319fbb Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Fri, 30 Apr 2021 11:30:12 -0400 Subject: [PATCH 05/16] Update changelog w/ PR. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f47c33c857..feae88189a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ release. - Expand description of Event Model and Instruments. ([#1614](https://github.com/open-telemetry/opentelemetry-specification/pull/1614)) - Flesh out metric identity and single-write principle. ([#1574](https://github.com/open-telemetry/opentelemetry-specification/pull/1574)) - Expand `Sum` metric description in the data model and delta-to-cumulative handling. ([#1618](https://github.com/open-telemetry/opentelemetry-specification/pull/1618)) +- Expand `Histogram` metric description in the data model ([#1664](https://github.com/open-telemetry/opentelemetry-specification/pull/1664)) ### Logs From d5ec1f0e436a62f58b20a416062c25889c717c73 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Sat, 1 May 2021 16:11:58 -0400 Subject: [PATCH 06/16] Update specification/metrics/datamodel.md Co-authored-by: Reiley Yang --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 76661ffe13a..cd5fb046306 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -327,7 +327,7 @@ Histograms consist of the following: Like Sums, Histograms also define an aggregation temporality. The picture above denotes Delta temporality where accumulated events are dropped after reporting -and a new aggregation occurs. Cumulative, on the other hand, contiues to +and a new aggregation occurs. Cumulative, on the other hand, continues to aggregate events until a reset. #### Exemplars From 4fad85c30cd01dd4a59b69a2b2e903e93a2fa19d Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 3 May 2021 10:05:26 -0400 Subject: [PATCH 07/16] Update specification/metrics/datamodel.md Co-authored-by: Punya Biswal --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index cd5fb046306..40ebf940876 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -300,7 +300,7 @@ Pending ### Histogram -[Histgram](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L225) +[Histogram](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L225) metric data points convey a population of recorded data points in a compressed format. A histogram bundles a set of events into divided populations with an overall event count and aggregate sum for all events. From 74d01075b8fc03686149954d4b25e32e725ce32d Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 3 May 2021 10:18:11 -0400 Subject: [PATCH 08/16] Update specification/metrics/datamodel.md Co-authored-by: Punya Biswal --- specification/metrics/datamodel.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 40ebf940876..673d833c1ec 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -314,8 +314,7 @@ Histograms consist of the following: - An independent set of Attribute name-value pairs. - A time window (of `(start, end]`) time for which the Histogram was bundled. - The time interval is inclusive of the end time. - - Times are specified in Value is UNIX Epoch time in nanoseconds since - `00:00:00 UTC on 1 January 1970` + - Time values are specified as nanoseconds since the UNIX Epoch (00:00:00 UTC on 1 January 1970). - A count (`count`) of the total population of points in the histogram. - A sum (`sum`) of all the values in the histogram. - (optional) A series of buckets with: From d8cfa4f98beb0110deb791b31e24399616aec284 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 3 May 2021 10:18:16 -0400 Subject: [PATCH 09/16] Update specification/metrics/datamodel.md Co-authored-by: Punya Biswal --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 673d833c1ec..86e67f3574c 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -332,7 +332,7 @@ aggregate events until a reset. #### Exemplars An exemplar is a recorded value that associates OpenTelemetry context to -a metric event within a Histogram. It allows users to link Trace signals w/ +a metric event within a Histogram. One use case is to allow users to link Trace signals w/ Metrics. Exemplars consist of: From f02484dae4169a54c60c0ab7d9e59cfc49d91440 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 3 May 2021 10:19:14 -0400 Subject: [PATCH 10/16] Fix lint issues. --- specification/metrics/datamodel.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 86e67f3574c..e69e737679e 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -314,7 +314,8 @@ Histograms consist of the following: - An independent set of Attribute name-value pairs. - A time window (of `(start, end]`) time for which the Histogram was bundled. - The time interval is inclusive of the end time. - - Time values are specified as nanoseconds since the UNIX Epoch (00:00:00 UTC on 1 January 1970). + - Time values are specified as nanoseconds since the UNIX Epoch + (00:00:00 UTC on 1 January 1970). - A count (`count`) of the total population of points in the histogram. - A sum (`sum`) of all the values in the histogram. - (optional) A series of buckets with: @@ -332,8 +333,8 @@ aggregate events until a reset. #### Exemplars An exemplar is a recorded value that associates OpenTelemetry context to -a metric event within a Histogram. One use case is to allow users to link Trace signals w/ -Metrics. +a metric event within a Histogram. One use case is to allow users to link +Trace signals w/ Metrics. Exemplars consist of: From 76548ec735708be4f0adf2b5ad153009f568c9da Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Wed, 5 May 2021 22:05:00 -0400 Subject: [PATCH 11/16] Fix merge conflict resolution issue. --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef313d7a7a1..12b1f030f92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ release. ### Metrics +- Expand `Histogram` metric description in the data model ([#1664](https://github.com/open-telemetry/opentelemetry-specification/pull/1664)) + ### Logs ### Semantic Conventions @@ -42,7 +44,6 @@ release. - Remove the "Func" name, use "Asynchronous" and "Observable". ([#1645](https://github.com/open-telemetry/opentelemetry-specification/pull/1645)) - Add details to UpDownCounter API. ([#1665](https://github.com/open-telemetry/opentelemetry-specification/pull/1665)) - Add details to Histogram API. ([#1657](https://github.com/open-telemetry/opentelemetry-specification/pull/1657)) -- Expand `Histogram` metric description in the data model ([#1664](https://github.com/open-telemetry/opentelemetry-specification/pull/1664)) ### Logs From a797a066f515aecdc870276205a18b7f99c2645b Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 11 May 2021 15:15:31 -0400 Subject: [PATCH 12/16] Update specification/metrics/datamodel.md Co-authored-by: Joshua MacDonald --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 38fd3b66155..82a948bdf86 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -325,7 +325,7 @@ user configuration. ### Histogram [Histogram](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L225) -metric data points convey a population of recorded data points in a compressed +metric data points convey a population of recorded measurements in a compressed format. A histogram bundles a set of events into divided populations with an overall event count and aggregate sum for all events. From 93c32c9264734572323b5185c83fa6823aeb9d96 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 11 May 2021 15:15:50 -0400 Subject: [PATCH 13/16] Update specification/metrics/datamodel.md Co-authored-by: Joshua MacDonald --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 82a948bdf86..5433a308029 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -350,7 +350,7 @@ Histograms consist of the following: - (optional) a set of examplars (see [Exemplars](#exemplars)). Like Sums, Histograms also define an aggregation temporality. The picture above -denotes Delta temporality where accumulated events are dropped after reporting +denotes Delta temporality where accumulated event counts are reset to zero after reporting and a new aggregation occurs. Cumulative, on the other hand, continues to aggregate events until a reset. From 60b714dae9d4aeff3217dad882af9ca8b6296ff0 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 11 May 2021 15:16:38 -0400 Subject: [PATCH 14/16] Update specification/metrics/datamodel.md Co-authored-by: Joshua MacDonald --- specification/metrics/datamodel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index 5433a308029..a99b47e99ed 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -352,7 +352,7 @@ Histograms consist of the following: Like Sums, Histograms also define an aggregation temporality. The picture above denotes Delta temporality where accumulated event counts are reset to zero after reporting and a new aggregation occurs. Cumulative, on the other hand, continues to -aggregate events until a reset. +aggregate events, resetting with the use of a new start time. #### Exemplars From caa92091a0737c20a1bae32b38e105ed0a57dfcf Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Thu, 13 May 2021 14:05:51 -0400 Subject: [PATCH 15/16] Clarify exemplars. --- specification/metrics/datamodel.md | 32 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index a99b47e99ed..e597a86cae7 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -272,6 +272,7 @@ in OTLP consist of the following: - The time interval is inclusive of the end time. - Times are specified in Value is UNIX Epoch time in nanoseconds since `00:00:00 UTC on 1 January 1970` + - (optional) a set of examplars (see [Exemplars](#exemplars)). The aggregation temporality is used to understand the context in which the sum was calculated. When the aggregation temporality is "delta", we expect to have @@ -304,6 +305,7 @@ in OTLP represents a sampled value at a given time. A Gauge stream consists of: - A sampled value (e.g. current cpu temperature) - A timestamp when the value was sampled (`time_unix_nano`) - (optional) A timestamp (`start_time_unix_nano`) which has [TBD semantics](https://github.com/open-telemetry/opentelemetry-proto/pull/295). + - (optional) a set of examplars (see [Exemplars](#exemplars)). In OTLP, a point within a Gauge stream represents the last-sampled event for a given time window. @@ -354,10 +356,20 @@ denotes Delta temporality where accumulated event counts are reset to zero after and a new aggregation occurs. Cumulative, on the other hand, continues to aggregate events, resetting with the use of a new start time. -#### Exemplars +### Summary (Legacy) + +[Summary](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L244) +metric data points convey quantile summaries, e.g. What is the 99-th percentile +latency of my HTTP server. Unlike other point types in OpenTelemetry, Summary +points cannot always be merged in a meaningful way. This point type is not +recommended for new applications and exists for compatibility with other +formats. + + +## Exemplars An exemplar is a recorded value that associates OpenTelemetry context to -a metric event within a Histogram. One use case is to allow users to link +a metric event within a Metric. One use case is to allow users to link Trace signals w/ Metrics. Exemplars consist of: @@ -368,17 +380,15 @@ Exemplars consist of: - A set of filtered attributes (`filtered_attributes`) which provide additional insight into the Context when the observation was made. -When an exemplar exists, its value already participates in `bucket_counts`, -`count` and `sum` reported by the histogram point. +For Histograms, when an exemplar exists, its value already participates +in `bucket_counts`, `count` and `sum` reported by the histogram point. -### Summary (Legacy) +For Sums, when an exemplar exists, its value is already included in the overall +sum. + +For Gauges, when an exemplar exists, its value was seen at some point within +the gauge interval for the same source. -[Summary](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L244) -metric data points convey quantile summaries, e.g. What is the 99-th percentile -latency of my HTTP server. Unlike other point types in OpenTelemetry, Summary -points cannot always be merged in a meaningful way. This point type is not -recommended for new applications and exists for compatibility with other -formats. ## Single-Writer From 5b22eedc49a06aeed741e6b0d4f59a34d786a476 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Thu, 13 May 2021 14:30:20 -0400 Subject: [PATCH 16/16] Fix lint issues. --- specification/metrics/datamodel.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/specification/metrics/datamodel.md b/specification/metrics/datamodel.md index e597a86cae7..1e123d72233 100644 --- a/specification/metrics/datamodel.md +++ b/specification/metrics/datamodel.md @@ -272,7 +272,7 @@ in OTLP consist of the following: - The time interval is inclusive of the end time. - Times are specified in Value is UNIX Epoch time in nanoseconds since `00:00:00 UTC on 1 January 1970` - - (optional) a set of examplars (see [Exemplars](#exemplars)). + - (optional) a set of examplars (see [Exemplars](#exemplars)). The aggregation temporality is used to understand the context in which the sum was calculated. When the aggregation temporality is "delta", we expect to have @@ -365,7 +365,6 @@ points cannot always be merged in a meaningful way. This point type is not recommended for new applications and exists for compatibility with other formats. - ## Exemplars An exemplar is a recorded value that associates OpenTelemetry context to @@ -389,7 +388,6 @@ sum. For Gauges, when an exemplar exists, its value was seen at some point within the gauge interval for the same source. - ## Single-Writer All metric data streams within OTLP must have one logical writer. This means,