Skip to content

Add opt-in Vec TTL via MetricVec and TTLRegistry#1989

Open
jpinsonneau wants to merge 4 commits into
prometheus:mainfrom
jpinsonneau:ttl-registry
Open

Add opt-in Vec TTL via MetricVec and TTLRegistry#1989
jpinsonneau wants to merge 4 commits into
prometheus:mainfrom
jpinsonneau:ttl-registry

Conversation

@jpinsonneau
Copy link
Copy Markdown

Introduce NewMetricVecWithTTL and per-child lastAccessed tracking so
stale label sets can be omitted from Collect and removed with
CleanupExpired. Store vec children as pointers to satisfy atomic
copying rules.

Keep default NewCounterVec/NewGaugeVec/NewHistogramVec on NewMetricVec
without TTL for backwards compatibility. Opt-in TTLRegistry wraps a
dedicated Registry, exposes New*Vec constructors with a fixed ttl, and
runs CleanupExpired before each Gather.

Relates to #1983

Signed-off-by: Julien Pinsonneau jpinsonn@redhat.com
Made-with: Cursor

Introduce NewMetricVecWithTTL and per-child lastAccessed tracking so
stale label sets can be omitted from Collect and removed with
CleanupExpired. Store vec children as pointers to satisfy atomic
copying rules.

Keep default NewCounterVec/NewGaugeVec/NewHistogramVec on NewMetricVec
without TTL for backwards compatibility. Opt-in TTLRegistry wraps a
dedicated Registry, exposes New*Vec constructors with a fixed ttl, and
runs CleanupExpired before each Gather.

Relates to prometheus#1983

Signed-off-by: Julien Pinsonneau <jpinsonn@redhat.com>
Made-with: Cursor
Copy link
Copy Markdown
Member

@kakkoyun kakkoyun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR. This is close to the finish line.

Please see my comments.

Comment thread prometheus/ttl_registry_test.go Outdated
Comment thread prometheus/vec_test.go
Comment thread prometheus/vec.go
Move TTL logic to ttlMetricMap so metricMap stays unchanged for
default Vecs. Wrap TTL tests with synctest instead of real sleeps.

Signed-off-by: Julien Pinsonneau <jpinsonn@redhat.com>
Made-with: Cursor
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an opt-in TTL mechanism for *Vec metrics to automatically omit and optionally delete stale label sets, aimed at reducing unbounded growth for high-cardinality / ephemeral labels while preserving backwards compatibility for existing New*Vec constructors.

Changes:

  • Add NewMetricVecWithTTL plus CleanupExpired and per-child lastAccessed tracking to support TTL-based expiration.
  • Add TTLRegistry, a dedicated registry with New*Vec constructors that enable TTL and run CleanupExpired before each Gather.
  • Refactor CounterVec, GaugeVec, and HistogramVec constructors to share internal new*VecWithTTL helpers, and add test coverage for TTL behavior.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
prometheus/vec.go Adds TTL-enabled MetricVec construction, routes core vec operations through TTL map when enabled, and exposes CleanupExpired.
prometheus/ttl_vec.go Implements TTL-backed metric storage with per-child lastAccessed, TTL-aware Collect, and cleanupExpired.
prometheus/ttl_registry.go Introduces TTLRegistry that auto-registers TTL vecs and runs cleanup before Gather.
prometheus/counter.go Refactors vec creation into newCounterVecWithTTL and wires TTL registry support.
prometheus/gauge.go Refactors vec creation into newGaugeVecWithTTL and wires TTL registry support.
prometheus/histogram.go Refactors vec creation into newHistogramVecWithTTL and wires TTL registry support.
prometheus/vec_test.go Adds TTL behavior tests for Counter/Gauge/Histogram vecs and helper for counting collected metrics.
prometheus/ttl_registry_test.go Adds tests ensuring NewTTLRegistry validation and that Gather triggers cleanup.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread prometheus/vec.go Outdated
Comment thread prometheus/ttl_vec.go
Comment thread prometheus/ttl_registry.go
Handle ttl<=0 in NewMetricVecWithTTL, nil slice tails in
cleanupExpired for GC, and untrack Vecs on TTLRegistry.Unregister.

Signed-off-by: Julien Pinsonneau <jpinsonn@redhat.com>
Made-with: Cursor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants