app/vmstorage: add vm_rows_added_to_storage_total metric, which shows the total number of rows added to storage since app start

This commit is contained in:
Aliaksandr Valialkin 2020-10-09 13:35:48 +03:00
parent 4b1c401790
commit d2e917d1cb
2 changed files with 8 additions and 0 deletions

View File

@ -371,6 +371,9 @@ func registerStorageMetrics(strg *storage.Storage) {
return float64(idbm().SizeBytes) 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 { metrics.NewGauge(`vm_deduplicated_samples_total{type="merge"}`, func() float64 {
return float64(m().DedupsDuringMerge) return float64(m().DedupsDuringMerge)
}) })

View File

@ -333,6 +333,7 @@ func (s *Storage) idb() *indexDB {
// Metrics contains essential metrics for the Storage. // Metrics contains essential metrics for the Storage.
type Metrics struct { type Metrics struct {
RowsAddedTotal uint64
DedupsDuringMerge uint64 DedupsDuringMerge uint64
TooSmallTimestampRows uint64 TooSmallTimestampRows uint64
@ -401,6 +402,7 @@ func (m *Metrics) Reset() {
// UpdateMetrics updates m with metrics from s. // UpdateMetrics updates m with metrics from s.
func (s *Storage) UpdateMetrics(m *Metrics) { func (s *Storage) UpdateMetrics(m *Metrics) {
m.RowsAddedTotal = atomic.LoadUint64(&rowsAddedTotal)
m.DedupsDuringMerge = atomic.LoadUint64(&dedupsDuringMerge) m.DedupsDuringMerge = atomic.LoadUint64(&dedupsDuringMerge)
m.TooSmallTimestampRows += atomic.LoadUint64(&s.tooSmallTimestampRows) m.TooSmallTimestampRows += atomic.LoadUint64(&s.tooSmallTimestampRows)
@ -1127,11 +1129,14 @@ func (s *Storage) ForceMergePartitions(partitionNamePrefix string) error {
return s.tb.ForceMergePartitions(partitionNamePrefix) return s.tb.ForceMergePartitions(partitionNamePrefix)
} }
var rowsAddedTotal uint64
// AddRows adds the given mrs to s. // AddRows adds the given mrs to s.
func (s *Storage) AddRows(mrs []MetricRow, precisionBits uint8) error { func (s *Storage) AddRows(mrs []MetricRow, precisionBits uint8) error {
if len(mrs) == 0 { if len(mrs) == 0 {
return nil return nil
} }
atomic.AddUint64(&rowsAddedTotal, uint64(len(mrs)))
// Limit the number of concurrent goroutines that may add rows to the storage. // 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 // This should prevent from out of memory errors and CPU trashing when too many