From 68f0e007611b153a3c21c3ae71a1b823a2c28c29 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 9 Oct 2020 13:35:48 +0300 Subject: [PATCH] app/vmstorage: add `vm_rows_added_to_storage_total` metric, which shows the total number of rows added to storage since app start --- app/vmstorage/main.go | 3 +++ lib/storage/storage.go | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/app/vmstorage/main.go b/app/vmstorage/main.go index 073daf7d90..4380533585 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 bbb5da9aeb..dae3606563 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