mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Expose --storage.tsdb.retention.time in metric prometheus_tsdb_retention_limit_seconds (#12986)
* Expose --storage.tsdb.retention.time in a metric Signed-off-by: Marcio Caroso <msscaroso@gmail.com> --------- Signed-off-by: Marcio Caroso <msscaroso@gmail.com>
This commit is contained in:
parent
059f7f0738
commit
dff1c395f6
|
@ -248,6 +248,7 @@ type dbMetrics struct {
|
||||||
tombCleanTimer prometheus.Histogram
|
tombCleanTimer prometheus.Histogram
|
||||||
blocksBytes prometheus.Gauge
|
blocksBytes prometheus.Gauge
|
||||||
maxBytes prometheus.Gauge
|
maxBytes prometheus.Gauge
|
||||||
|
retentionDuration prometheus.Gauge
|
||||||
}
|
}
|
||||||
|
|
||||||
func newDBMetrics(db *DB, r prometheus.Registerer) *dbMetrics {
|
func newDBMetrics(db *DB, r prometheus.Registerer) *dbMetrics {
|
||||||
|
@ -321,6 +322,10 @@ func newDBMetrics(db *DB, r prometheus.Registerer) *dbMetrics {
|
||||||
Name: "prometheus_tsdb_retention_limit_bytes",
|
Name: "prometheus_tsdb_retention_limit_bytes",
|
||||||
Help: "Max number of bytes to be retained in the tsdb blocks, configured 0 means disabled",
|
Help: "Max number of bytes to be retained in the tsdb blocks, configured 0 means disabled",
|
||||||
})
|
})
|
||||||
|
m.retentionDuration = prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
|
Name: "prometheus_tsdb_retention_limit_seconds",
|
||||||
|
Help: "How long to retain samples in storage.",
|
||||||
|
})
|
||||||
m.sizeRetentionCount = prometheus.NewCounter(prometheus.CounterOpts{
|
m.sizeRetentionCount = prometheus.NewCounter(prometheus.CounterOpts{
|
||||||
Name: "prometheus_tsdb_size_retentions_total",
|
Name: "prometheus_tsdb_size_retentions_total",
|
||||||
Help: "The number of times that blocks were deleted because the maximum number of bytes was exceeded.",
|
Help: "The number of times that blocks were deleted because the maximum number of bytes was exceeded.",
|
||||||
|
@ -341,6 +346,7 @@ func newDBMetrics(db *DB, r prometheus.Registerer) *dbMetrics {
|
||||||
m.tombCleanTimer,
|
m.tombCleanTimer,
|
||||||
m.blocksBytes,
|
m.blocksBytes,
|
||||||
m.maxBytes,
|
m.maxBytes,
|
||||||
|
m.retentionDuration,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
|
@ -877,6 +883,7 @@ func open(dir string, l log.Logger, r prometheus.Registerer, opts *Options, rngs
|
||||||
maxBytes = 0
|
maxBytes = 0
|
||||||
}
|
}
|
||||||
db.metrics.maxBytes.Set(float64(maxBytes))
|
db.metrics.maxBytes.Set(float64(maxBytes))
|
||||||
|
db.metrics.retentionDuration.Set((time.Duration(opts.RetentionDuration) * time.Millisecond).Seconds())
|
||||||
|
|
||||||
if err := db.reload(); err != nil {
|
if err := db.reload(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -1494,6 +1494,19 @@ func TestTimeRetention(t *testing.T) {
|
||||||
require.Equal(t, expBlocks[len(expBlocks)-1].MaxTime, actBlocks[len(actBlocks)-1].meta.MaxTime)
|
require.Equal(t, expBlocks[len(expBlocks)-1].MaxTime, actBlocks[len(actBlocks)-1].meta.MaxTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRetentionDurationMetric(t *testing.T) {
|
||||||
|
db := openTestDB(t, &Options{
|
||||||
|
RetentionDuration: 1000,
|
||||||
|
}, []int64{100})
|
||||||
|
defer func() {
|
||||||
|
require.NoError(t, db.Close())
|
||||||
|
}()
|
||||||
|
|
||||||
|
expRetentionDuration := 1.0
|
||||||
|
actRetentionDuration := prom_testutil.ToFloat64(db.metrics.retentionDuration)
|
||||||
|
require.Equal(t, expRetentionDuration, actRetentionDuration, "metric retention duration mismatch")
|
||||||
|
}
|
||||||
|
|
||||||
func TestSizeRetention(t *testing.T) {
|
func TestSizeRetention(t *testing.T) {
|
||||||
opts := DefaultOptions()
|
opts := DefaultOptions()
|
||||||
opts.OutOfOrderTimeWindow = 100
|
opts.OutOfOrderTimeWindow = 100
|
||||||
|
|
Loading…
Reference in a new issue