From c06953ae087236dfe45e09a35ae036d080b8d2fa Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Wed, 19 Jul 2017 10:00:57 -0700 Subject: [PATCH] mvcc: Add metric for count of db key revisions compacted. When digging into etcd/boltdb "storage space exceeded" issues, this metric may help answer questions about if/when compactions occured and how much data was freed. --- mvcc/kvstore_compaction.go | 3 +++ mvcc/metrics.go | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/mvcc/kvstore_compaction.go b/mvcc/kvstore_compaction.go index bbd38f547f3..1726490c110 100644 --- a/mvcc/kvstore_compaction.go +++ b/mvcc/kvstore_compaction.go @@ -22,6 +22,8 @@ import ( func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struct{}) bool { totalStart := time.Now() defer dbCompactionTotalDurations.Observe(float64(time.Since(totalStart) / time.Millisecond)) + keyCompactions := 0 + defer func() { dbCompactionKeysCounter.Add(float64(keyCompactions)) }() end := make([]byte, 8) binary.BigEndian.PutUint64(end, uint64(compactMainRev+1)) @@ -40,6 +42,7 @@ func (s *store) scheduleCompaction(compactMainRev int64, keep map[revision]struc rev = bytesToRev(key) if _, ok := keep[rev]; !ok { tx.UnsafeDelete(keyBucketName, key) + keyCompactions++ } } diff --git a/mvcc/metrics.go b/mvcc/metrics.go index a65fe59b996..e44eb12d23f 100644 --- a/mvcc/metrics.go +++ b/mvcc/metrics.go @@ -131,6 +131,14 @@ var ( Buckets: prometheus.ExponentialBuckets(100, 2, 14), }) + dbCompactionKeysCounter = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: "etcd_debugging", + Subsystem: "mvcc", + Name: "db_compaction_keys_total", + Help: "Total number of db keys compacted.", + }) + dbTotalSize = prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Namespace: "etcd_debugging", Subsystem: "mvcc", @@ -162,6 +170,7 @@ func init() { prometheus.MustRegister(indexCompactionPauseDurations) prometheus.MustRegister(dbCompactionPauseDurations) prometheus.MustRegister(dbCompactionTotalDurations) + prometheus.MustRegister(dbCompactionKeysCounter) prometheus.MustRegister(dbTotalSize) }