From ca44a3a4b95be14a70d28cab58707addf8c39471 Mon Sep 17 00:00:00 2001 From: Derek Zhang <161868481+GreyLilac09@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:01:11 -0400 Subject: [PATCH] feat(metrics): add TTL-based cache for metric sets and add expire_metrics_secs for Prometheus remote write sink (#23286) * add ttl policy to metricset * rust fmt * rust * update cue * fix secs format * fix float * component docs * update comments * fix fmt * update comment * add cleanup and fix timestamp * remove unnecessary function * add MetricEntry as struct * fix lint issues * use is_some_and * revert greptime_logs.cue --- .../fix_metric_set_memory_growth.feature.md | 6 + src/sinks/prometheus/remote_write/config.rs | 9 + src/sinks/prometheus/remote_write/sink.rs | 4 +- src/sinks/util/buffer/metrics/normalize.rs | 227 +++++++++++++++--- src/sinks/util/builder.rs | 20 +- src/sinks/util/normalizer.rs | 10 +- .../sinks/base/prometheus_remote_write.cue | 11 + 7 files changed, 242 insertions(+), 45 deletions(-) create mode 100644 changelog.d/fix_metric_set_memory_growth.feature.md diff --git a/changelog.d/fix_metric_set_memory_growth.feature.md b/changelog.d/fix_metric_set_memory_growth.feature.md new file mode 100644 index 0000000000000..525648566668a --- /dev/null +++ b/changelog.d/fix_metric_set_memory_growth.feature.md @@ -0,0 +1,6 @@ +- Add a TTL-based cache for metrics sets +- Add `expire_metrics_secs` config for Prometheus remote write sink which uses the TTL-based cache +- This fixes an issue where incremental metrics are preserved for the lifetime of Vector's runtime, which causes + indefinite memory growth + +authors: GreyLilac09 diff --git a/src/sinks/prometheus/remote_write/config.rs b/src/sinks/prometheus/remote_write/config.rs index 9a61d0be6baa0..03f6d2bee2905 100644 --- a/src/sinks/prometheus/remote_write/config.rs +++ b/src/sinks/prometheus/remote_write/config.rs @@ -93,6 +93,14 @@ pub struct RemoteWriteConfig { #[configurable(metadata(docs::advanced))] pub tenant_id: Option