diff --git a/app/vmstorage/main.go b/app/vmstorage/main.go index 073daf7d9..438053358 100644 --- a/app/vmstorage/main.go +++ b/app/vmstorage/main.go @@ -441,6 +441,9 @@ func registerStorageMetrics() { return float64(idbm().SizeBytes) }) + metrics.NewGauge(`vm_rows_added_to_storage_total`, func() float64 { + return float64(m().RowsAddedTotal) + }) metrics.NewGauge(`vm_deduplicated_samples_total{type="merge"}`, func() float64 { return float64(m().DedupsDuringMerge) }) diff --git a/lib/storage/storage.go b/lib/storage/storage.go index bbb5da9ae..dae360656 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -318,6 +318,7 @@ func (s *Storage) idb() *indexDB { // Metrics contains essential metrics for the Storage. type Metrics struct { + RowsAddedTotal uint64 DedupsDuringMerge uint64 TooSmallTimestampRows uint64 @@ -386,6 +387,7 @@ func (m *Metrics) Reset() { // UpdateMetrics updates m with metrics from s. func (s *Storage) UpdateMetrics(m *Metrics) { + m.RowsAddedTotal = atomic.LoadUint64(&rowsAddedTotal) m.DedupsDuringMerge = atomic.LoadUint64(&dedupsDuringMerge) m.TooSmallTimestampRows += atomic.LoadUint64(&s.tooSmallTimestampRows) @@ -1051,11 +1053,14 @@ func (s *Storage) ForceMergePartitions(partitionNamePrefix string) error { return s.tb.ForceMergePartitions(partitionNamePrefix) } +var rowsAddedTotal uint64 + // AddRows adds the given mrs to s. func (s *Storage) AddRows(mrs []MetricRow, precisionBits uint8) error { if len(mrs) == 0 { return nil } + atomic.AddUint64(&rowsAddedTotal, uint64(len(mrs))) // Limit the number of concurrent goroutines that may add rows to the storage. // This should prevent from out of memory errors and CPU trashing when too many