mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
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> |
||
---|---|---|
.. | ||
azuread | ||
googleiam | ||
otlptranslator | ||
chunked.go | ||
chunked_test.go | ||
client.go | ||
client_test.go | ||
codec.go | ||
codec_test.go | ||
dial_context.go | ||
dial_context_test.go | ||
ewma.go | ||
intern.go | ||
intern_test.go | ||
max_timestamp.go | ||
metadata_watcher.go | ||
metadata_watcher_test.go | ||
queue_manager.go | ||
queue_manager_test.go | ||
read.go | ||
read_handler.go | ||
read_handler_test.go | ||
read_test.go | ||
stats.go | ||
storage.go | ||
storage_test.go | ||
write.go | ||
write_handler.go | ||
write_handler_test.go | ||
write_test.go |