From 19dd12196835fef912fb22bc09cdf20301f1b7cd Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 13 Jul 2020 19:54:09 +0100 Subject: [PATCH] lib/persistentqueue: add `vm_persistentqueue_bytes_pending` metric (#619) Metric `vm_persistentqueue_bytes_pending` is a gauge that shows current amount of bytes in persistentqueue flushed on disk as a difference between write and read offsets. This metric is very similar to `vmagent_remotewrite_pending_data_bytes` except of accounting for bytes in-memory. --- lib/persistentqueue/persistentqueue.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/persistentqueue/persistentqueue.go b/lib/persistentqueue/persistentqueue.go index e0e9b110c1..24e80858a0 100644 --- a/lib/persistentqueue/persistentqueue.go +++ b/lib/persistentqueue/persistentqueue.go @@ -62,6 +62,8 @@ type Queue struct { blocksRead *metrics.Counter bytesRead *metrics.Counter + + bytesPending *metrics.Gauge } // ResetIfEmpty resets q if it is empty. @@ -166,6 +168,9 @@ func tryOpeningQueue(path, name string, chunkFileSize, maxBlockSize, maxPendingB q.bytesWritten = metrics.GetOrCreateCounter(fmt.Sprintf(`vm_persistentqueue_bytes_written_total{path=%q}`, path)) q.blocksRead = metrics.GetOrCreateCounter(fmt.Sprintf(`vm_persistentqueue_blocks_read_total{path=%q}`, path)) q.bytesRead = metrics.GetOrCreateCounter(fmt.Sprintf(`vm_persistentqueue_bytes_read_total{path=%q}`, path)) + q.bytesPending = metrics.GetOrCreateGauge(fmt.Sprintf(`vm_persistentqueue_bytes_pending{path=%q}`, path), func() float64 { + return float64(q.GetPendingBytes()) + }) cleanOnError := func() { if q.reader != nil {