From 8af96bd408b7c2e78aba0a71cec9c3f950e9c851 Mon Sep 17 00:00:00 2001 From: Arthur Silva Sens Date: Tue, 3 Oct 2023 20:44:06 -0300 Subject: [PATCH] Add proposal for created timestamps Signed-off-by: Arthur Silva Sens --- .../followup-scrape-example.png | Bin 0 -> 26547 bytes .../initial-scrape-example.png | Bin 0 -> 25974 bytes proposals/2023-06-13_created-timestamp.md | 158 ++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 assets/2023-06-13_created-timestamps/followup-scrape-example.png create mode 100644 assets/2023-06-13_created-timestamps/initial-scrape-example.png create mode 100644 proposals/2023-06-13_created-timestamp.md diff --git a/assets/2023-06-13_created-timestamps/followup-scrape-example.png b/assets/2023-06-13_created-timestamps/followup-scrape-example.png new file mode 100644 index 0000000000000000000000000000000000000000..62ee6f989e74fd368f6553ea8bba4ed1df59282d GIT binary patch literal 26547 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 A?*IS* literal 0 HcmV?d00001 diff --git a/assets/2023-06-13_created-timestamps/initial-scrape-example.png b/assets/2023-06-13_created-timestamps/initial-scrape-example.png new file mode 100644 index 0000000000000000000000000000000000000000..83776722ee54223bb5de60c73fca27f82eb305a7 GIT binary patch literal 25974 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

-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 CT!c*k literal 0 HcmV?d00001 diff --git a/proposals/2023-06-13_created-timestamp.md b/proposals/2023-06-13_created-timestamp.md new file mode 100644 index 0000000..0d586ec --- /dev/null +++ b/proposals/2023-06-13_created-timestamp.md @@ -0,0 +1,158 @@ +## Created Timestamps + +* **Owners** + * Arthur Silva Sens ([@ArthurSens](https://github.com/ArthurSens)) + * Bartłomiej Płotka ([@bwplotka](https://github.com/bwplotka)) + * Max Amin ([@macxamin](https://github.com/macxamin)) + * Daniel Hrabovcak ([@TheSpiritXIII](https://github.com/TheSpiritXIII)) + +* **Implementation**: Partially implemented + +* **Related Issues and PRs:** + * https://github.com/prometheus/prometheus/issues/6541 + +* **Other docs or links:** + * https://docs.google.com/document/d/1kakDVn8aP1JerimLeazuMfy2jaB14W2kZDHMRokPcv4/edit + +> We propose that created timestamps be exposed by common exposition formats. During scrape, created timestamps are processed before normal sample values. They are ingested as a "synthetic" sample with a value of 0 and a timestamp equal to the created timestamp found in the scrape, followed by appending the actual sample with the usual scraped value timestamp. +> +> Additionally, created timestamps are added to time series metadata to be propagated via remote-write. + +## Why + +Prometheus counters are one of the most useful metric types in Prometheus. Thanks to monotonous characteristics and simple semantics it allows cheap and reliable calculations of rate/increase/delta (called “rates” in this document), even in the event of missed scrapes. + +This worked well for years, but certain edge cases started to impact the community: +* Common problems of uninitialized counters occur. We don’t know when the metric with value 0 started, so the counter starts with the incremented value. This can impact visualization and alerting. +* Counter resets can go undetected if a counter is quickly incremented after a counter reset so that the next scrape sees a value that is higher than the value during the last scrape before the counter reset. +* Finding absolute value for longer metrics is expensive as one has to go sample by sample to detect resets. This impacts ingestors as it requires stateful algorithms that discern between new metrics and long-running ones it did not see before, as well as advanced algorithms like the read-level deduplication algorithm in Thanos. + +Furthermore, the same problems occur for Summaries and Histograms (old and native ones) since all of them are represented by counters. + +### Pitfalls of the current solution + +Rate-like functions calculate relative differences between 2 points in time, naturally, it requires at least 2 data points to be able to perform any calculations. For the most common cases, it works well for rates over long time ranges since it is likely that several data points were ingested. + +However, it falls short for rates that englobes the data point collected in the first scrape of an application, or when using rates against metrics ingested from push-based applications with long push intervals, because only one data point is present in such occasions. + +## Goals + +* Prometheus can collect and store reset timestamps for counters, summaries, and histograms on scrape using common exposition formats. +* Prometheus will persist the created timestamp across restarts (WAL). +* Prometheus can perform meaningful rate-like functions even with a single scrape. +* Prometheus can inject created timestamps for stateless remote write use. + * Stateless means here that every streamed batch of samples for certain counters has its created timestamp known. + +### Audience + +* Users monitoring push-based applications with long push intervals. +* Users depending on high-precision rates, especially during the initial scrapes of an application. +* Users that are sending metrics to ingestors that require created timestamp, e.g. Monarch. + +## Non-Goals + +* Propose changes to Prometheus text exposition format for now. Advanced functionalities like exemplars, native histograms, or created timestamps are not on the short-term roadmap. +* Elaborate on technical details for rate implementation. +* Remote Write extensions (should be in different proposals). +* Support Gauges and Gauge-like metrics (Info, Stateset, Gauge Histograms). None of the exposition formats allows this, thus it’s out of scope. + +## How + +We propose to append a newly appearing created timestamp as an additional 0-value sample to the TSDB. We call this a “zero injection”. + +During a scrape, created timestamps are processed before normal sample values. If a certain metric is not yet present in the TSDB, a “synthetic” sample is appended with a value of 0 and a timestamp equal to the created timestamp found in the scrape. Followed by appending the actual sample with the usual scraped value and timestamp. + +![Initial scrape example](../assets/2023-06-13_created-timestamps/initial-scrape-example.png) + +On following scrapes, created timestamps are not appended until a scrape finds a created timestamp higher than the latest sample's timestamp, which would trigger the insertion of another sample with a 0-value sample. + +![Alt text](../assets/2023-06-13_created-timestamps/followup-scrape-example.png) + +This is already enough to improve rate calculations as mentioned in the [Goals](#goals) section, while also persisting such data in WAL (even if not explicit) and although it allows an easier implementation, it comes with few limitations: + +* Unable to ingest created timestamps out of TSDB Head range. +* Unable to help ingestors that require created timestamps as a separate field, as they would need to implement stateful logic to identify injected zeros in a batch of samples. + +For those reasons, created timestamps will also be stored as metadata **per series**, following the similar logic used for the zero-injection. + +### Collection + +We propose created timestamps to be supported when Prometheus is used with Prometheus protobuf format, OpenMetrics proto, and text formats. Let’s explore each case: + +#### Prometheus Protobuf + +Since Prometheus already supports scraping endpoints with Prometheus protobuf and knowing that adding the created timestamp field is trivial, it makes Prometheus protobuf the preferred option for initial implementation: + +```proto +message Counter { + optional double value = 1; + optional Exemplar exemplar = 2; + optional google.protobuf.Timestamp created_timestamp_ms = 3; +} + +message Summary { + optional uint64 sample_count = 1; + optional double sample_sum = 2; + repeated Quantile quantile = 3; + optional google.protobuf.Timestamp created_timestamp_ms = 4; +} + +message Histogram { + // … + repeated double positive_count = 14; // Absolute count of each bucket. + optional google.protobuf.Timestamp created_timestamp_ms = 15; +} +``` + +Once the protocol is extended, the Prometheus parser can easily identify created timestamps and ingest as mentioned in the [How](#how) section. + +#### OpenMetrics Protobuf + +Follows the same semantics as mentioned in [Prometheus Protobuf](#prometheus-protobuf), but Prometheus still isn't able to parse it. + +The task here is to simply implement the missing parser. + +#### OpenMetrics text + +For OpenMetrics text the situation is more complex. For OM text format, the _created timestamps series would be normally ingested as a normal series. However, for this solution, we propose to capture the timestamp from the series and treat it as the synthetic zero. Then we propose to remove the artificial series to avoid further metric collisions, semantic differences (series vs. created timestamp metadata), and consistency with other exposition formats. + +The removal of a special metric is a **breaking change**. However, we still propose doing it to stop the spread of this confusing pattern in the community (with adequate warning). The current usage of created metrics is low and users are [actually not adopting OM](https://github.com/prometheus/client_python/tree/v0.17.1#disabling-_created-metrics) for that reason. Thus allowing users to opt out (users can set if they want to preserve those metrics) seems like a good way forward. + +Note that, the conversion of _created series to created timestamp append will not be a trivial, or efficient code. We have to check various metrics, and buffer appends of potentially related metrics. Ideally, this will go away from the next version of OpenMetrics text (outside of the scope of this proposal). + +### Feature flag + +Zero injection comes with a change to sample intervals. We inject samples every time a created timestamp is higher than the previously ingested sample's timestamp, meaning that the timestamp difference between two samples is no longer equal to the scrape interval. This behavior will change the results of functions that depend on such intervals, such as `count_over_time`. + +Also, as mentioned in [OpenMetrics text](#openmetrics-text), changing the behavior of the OpenMetrics parser to drop time series that represents the created timestamp can come as a big surprise to existing users. + +To avoid surprises, all the functionality mentioned in this proposal will be hidden behind a feature flag called "created-timestamp-ingestion". + +## Alternatives + +### Inject sentinel values + +Instead of injecting zero samples, a sentinel value, e.g. *CreatedNaN* could be ingested instead to avoid confusion when noticing that not all samples follow the configured scrape interval. + +It would also help remote-write ingestors to easily identify created timestamps in a batch of samples. + +It would require refactoring of rate-like functions, where sentinel values would need to be replaced with zeros. + +### Created timestamps as time series + +Prometheus can already parse and ingest created timestamps from OpenMetrics text format. However, currently, it is ingested as a new time series. + +It comes with a stream of downsides, though: +* A source of friction for adopting OpenMetrics text format for Prometheus users. +* Inconsistent with OpenTelemetry and OpenMetrics proto format. +* Confusing and surprising semantics by adding special series that have to be used especially. The link to related series is also poor and prone to errors. +* Metric name collisions - there might be user’s metrics with _created suffix that means something else. +* Inefficient storage, leading up to a 50% memory increase if the instance ingests mostly counters. This is because each series adds indexing overhead. The created timestamp semantics allow for significantly more efficient storage if we treat them not as a series but tailored to its APIs. Additionally, increases network utilization as more data is being scraped and transferred over the wire. +* Inefficient and error-prone usage. rate(), increase(), and delta() functions would need to perform extra queries to TSDB to find restarts and staleness. Metrics with clashing names might provide unexpected results. + +## Action Plan + +* [X] Extend Prometheus protobuf with created timestamps. https://github.com/prometheus/client_model/pull/66 +* [X] Implement created timestamps in client_golang. https://github.com/prometheus/client_golang/pull/1313 +* [ ] Implement parsing and zero-injection of created timestamps in Prometheus. +* [ ] Implement created timestamps as time series metadata.