prometheus/storage/remote
sh0rez 5303e515af
Some checks are pending
buf.build / lint and publish (push) Waiting to run
CI / Go tests (push) Waiting to run
CI / More Go tests (push) Waiting to run
CI / Go tests with previous Go version (push) Waiting to run
CI / UI tests (push) Waiting to run
CI / Go tests on Windows (push) Waiting to run
CI / Mixins tests (push) Waiting to run
CI / Build Prometheus for common architectures (0) (push) Waiting to run
CI / Build Prometheus for common architectures (1) (push) Waiting to run
CI / Build Prometheus for common architectures (2) (push) Waiting to run
CI / Build Prometheus for all architectures (0) (push) Waiting to run
CI / Build Prometheus for all architectures (1) (push) Waiting to run
CI / Build Prometheus for all architectures (10) (push) Waiting to run
CI / Build Prometheus for all architectures (11) (push) Waiting to run
CI / Build Prometheus for all architectures (2) (push) Waiting to run
CI / Build Prometheus for all architectures (3) (push) Waiting to run
CI / Build Prometheus for all architectures (4) (push) Waiting to run
CI / Build Prometheus for all architectures (5) (push) Waiting to run
CI / Build Prometheus for all architectures (6) (push) Waiting to run
CI / Build Prometheus for all architectures (7) (push) Waiting to run
CI / Build Prometheus for all architectures (8) (push) Waiting to run
CI / Build Prometheus for all architectures (9) (push) Waiting to run
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
CI / Check generated parser (push) Waiting to run
CI / golangci-lint (push) Waiting to run
CI / fuzzing (push) Waiting to run
CI / codeql (push) Waiting to run
CI / Publish main branch artifacts (push) Blocked by required conditions
CI / Publish release artefacts (push) Blocked by required conditions
CI / Publish UI on npm Registry (push) Blocked by required conditions
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
remote/otlp: convert delta to cumulative (#15165)
What

Adds support for OTLP delta temporality to the OTLP endpoint.
This is done by calling the deltatocumulative processor from the OpenTelemetry collector during OTLP conversion.

Why

Delta conversion is a naturally stateful process, which requires careful request routing when operated inside a collector.
Prometheus is already stateful and doing the conversion in-server reduces the operational burden on the ingest architecture by only having one stateful component.

How

deltatocumulative is a OTel collector component that works as follows:

* pmetric.Metrics come from a receiver or in this case from the HTTP client
* It operates as an in-place update loop:
    * for each sample, if not delta, leave unmodified
    * if delta, do:
      * state += sample, where state is the in-memory sum of all previous samples
      * sample = state, sample value is now cumulative
    * this is supported for sums (counters), gauges, histograms (old histograms) and exponential histograms (native histograms)
If a series receives no new samples for 5m, its state is removed from memory


Performance

Delta performance is a stateful operation and the OTel code is not highly optimized yet, e.g. it locks the entire processor for each request. Nonetheless, care has been taken to mitigate those effects:

delta conversion is behind a feature flag. If disabled, no conversion code is ever invoked
if enabled, conversion is not invoked if request not actually contains delta samples. This leads to no measureable performance difference between default-cumulative to convert-cumulative (only cumulative, feature on/off)

Signed-off-by: sh0rez <me@shorez.de>
2025-01-14 11:33:31 -03:00
..
azuread enable errorf rule from perfsprint linter 2024-11-06 16:50:36 +01:00
googleiam feat: add Google cloud roundtripper for remote write (#14346) 2024-07-30 16:25:19 +01:00
otlptranslator otlp/translator: Use separate function for metric names with UTF8 characters (#15664) 2025-01-06 11:30:39 -03:00
chunked.go Add streaming remote read to ReadClient (#11379) 2024-08-28 07:23:54 +01:00
chunked_test.go fix: use "ErrorContains" or "EqualError" instead of "Contains(t, err.Error()" and "Equal(t, err.Error()" (#15094) 2024-10-06 16:35:29 +00:00
client.go [ENHANCEMEN] Remote-Write: optionally use a DNS resolver that picks a random IP (#15329) 2024-11-15 15:41:49 +00:00
client_test.go Add streaming remote read to ReadClient (#11379) 2024-08-28 07:23:54 +01:00
codec.go Add streaming remote read to ReadClient (#11379) 2024-08-28 07:23:54 +01:00
codec_test.go Support ingesting PWRv2's Created Timestamp as 0 samples 2024-12-20 10:48:46 -03:00
dial_context.go [ENHANCEMEN] Remote-Write: optionally use a DNS resolver that picks a random IP (#15329) 2024-11-15 15:41:49 +00:00
dial_context_test.go [ENHANCEMEN] Remote-Write: optionally use a DNS resolver that picks a random IP (#15329) 2024-11-15 15:41:49 +00:00
ewma.go
intern.go
intern_test.go Upgrade to golangci-lint v1.62.0 (#15424) 2024-11-20 17:22:20 +01:00
max_timestamp.go
metadata_watcher.go Fix issues raised by staticcheck (#15722) 2025-01-09 17:51:26 +01:00
metadata_watcher_test.go
queue_manager.go Fix issues raised by staticcheck (#15722) 2025-01-09 17:51:26 +01:00
queue_manager_test.go fix TestDropOldTimeSeries on 32-bit 2024-12-16 10:45:07 -05:00
read.go Add streaming remote read to ReadClient (#11379) 2024-08-28 07:23:54 +01:00
read_handler.go chore!: adopt log/slog, remove go-kit/log 2024-10-07 15:58:50 -04:00
read_handler_test.go fix(bstream/writeByte): ensure it appends only one byte (#14854) 2024-09-17 16:28:33 +02:00
read_test.go fix(test): adjust defer invocations (#14996) 2024-09-27 17:13:51 +01:00
stats.go [PRW 2.0] Added Sender and RW Handler support for Response Stats. (#14444) 2024-07-19 18:53:40 +01:00
storage.go chore!: adopt log/slog, remove go-kit/log 2024-10-07 15:58:50 -04:00
storage_test.go
write.go [ENHANCEMEN] Remote-Write: optionally use a DNS resolver that picks a random IP (#15329) 2024-11-15 15:41:49 +00:00
write_handler.go remote/otlp: convert delta to cumulative (#15165) 2025-01-14 11:33:31 -03:00
write_handler_test.go fix linter 2024-12-20 10:48:46 -03:00
write_test.go remote/otlp: convert delta to cumulative (#15165) 2025-01-14 11:33:31 -03:00