diff --git a/mvcc/metrics.go b/mvcc/metrics.go index 32464374683..b46fd782ee4 100644 --- a/mvcc/metrics.go +++ b/mvcc/metrics.go @@ -238,6 +238,14 @@ var ( // overridden by mvcc initialization reportCompactRevMu sync.RWMutex reportCompactRev = func() float64 { return 0 } + + totalPutSizeGauge = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: "etcd_debugging", + Subsystem: "mvcc", + Name: "total_put_size_in_bytes", + Help: "The total size of put kv pairs seen by this member.", + }) ) func init() { @@ -262,6 +270,7 @@ func init() { prometheus.MustRegister(hashRevDurations) prometheus.MustRegister(currentRev) prometheus.MustRegister(compactRev) + prometheus.MustRegister(totalPutSizeGauge) } // ReportEventReceived reports that an event is received. diff --git a/mvcc/metrics_txn.go b/mvcc/metrics_txn.go index 911d64875d7..a305aa53180 100644 --- a/mvcc/metrics_txn.go +++ b/mvcc/metrics_txn.go @@ -23,14 +23,15 @@ type metricsTxnWrite struct { ranges uint puts uint deletes uint + putSize int64 } func newMetricsTxnRead(tr TxnRead) TxnRead { - return &metricsTxnWrite{&txnReadWrite{tr}, 0, 0, 0} + return &metricsTxnWrite{&txnReadWrite{tr}, 0, 0, 0, 0} } func newMetricsTxnWrite(tw TxnWrite) TxnWrite { - return &metricsTxnWrite{tw, 0, 0, 0} + return &metricsTxnWrite{tw, 0, 0, 0, 0} } func (tw *metricsTxnWrite) Range(key, end []byte, ro RangeOptions) (*RangeResult, error) { @@ -45,6 +46,8 @@ func (tw *metricsTxnWrite) DeleteRange(key, end []byte) (n, rev int64) { func (tw *metricsTxnWrite) Put(key, value []byte, lease lease.LeaseID) (rev int64) { tw.puts++ + size := int64(len(key) + len(value)) + tw.putSize += size return tw.TxnWrite.Put(key, value, lease) } @@ -55,5 +58,6 @@ func (tw *metricsTxnWrite) End() { } rangeCounter.Add(float64(tw.ranges)) putCounter.Add(float64(tw.puts)) + totalPutSizeGauge.Add(float64(tw.putSize)) deleteCounter.Add(float64(tw.deletes)) }