From cb4dfe631b15de9264b8a263398aabe6bf27660e Mon Sep 17 00:00:00 2001 From: Chris Marchbanks Date: Mon, 20 May 2019 12:28:44 -0600 Subject: [PATCH] Add metrics for WAL compression Signed-off-by: Chris Marchbanks --- wal/wal.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/wal/wal.go b/wal/wal.go index c108668d..305b90f1 100644 --- a/wal/wal.go +++ b/wal/wal.go @@ -169,12 +169,14 @@ type WAL struct { compress bool snappyBuf []byte - fsyncDuration prometheus.Summary - pageFlushes prometheus.Counter - pageCompletions prometheus.Counter - truncateFail prometheus.Counter - truncateTotal prometheus.Counter - currentSegment prometheus.Gauge + fsyncDuration prometheus.Summary + pageFlushes prometheus.Counter + pageCompletions prometheus.Counter + truncateFail prometheus.Counter + truncateTotal prometheus.Counter + currentSegment prometheus.Gauge + recordRawSize prometheus.Counter + recordCompressedSize prometheus.Counter } // New returns a new WAL over the given directory. @@ -227,8 +229,16 @@ func NewSize(logger log.Logger, reg prometheus.Registerer, dir string, segmentSi Name: "prometheus_tsdb_wal_segment_current", Help: "WAL segment index that TSDB is currently writing to.", }) + w.recordRawSize = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "prometheus_tsdb_wal_raw_record_bytes_total", + Help: "The total number of bytes received by the WAL.", + }) + w.recordCompressedSize = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "prometheus_tsdb_wal_compressed_record_bytes_total", + Help: "The total size of records after having been compressed.", + }) if reg != nil { - reg.MustRegister(w.fsyncDuration, w.pageFlushes, w.pageCompletions, w.truncateFail, w.truncateTotal, w.currentSegment) + reg.MustRegister(w.fsyncDuration, w.pageFlushes, w.pageCompletions, w.truncateFail, w.truncateTotal, w.currentSegment, w.recordRawSize, w.recordCompressedSize) } _, j, err := w.Segments() @@ -560,6 +570,7 @@ func (w *WAL) log(rec []byte, final bool) error { } compressed := false + w.recordRawSize.Add(float64(len(rec))) if w.compress && len(rec) > 0 { // The snappy library uses `len` to calculate if we need a new buffer. // In order to allocate as few buffers as possible make the length @@ -571,6 +582,7 @@ func (w *WAL) log(rec []byte, final bool) error { compressed = true } } + w.recordCompressedSize.Add(float64(len(rec))) // Populate as many pages as necessary to fit the record. // Be careful to always do one pass to ensure we write zero-length records.