From 1a097a924b203c66646df5d02f3f09078ec77531 Mon Sep 17 00:00:00 2001 From: Alan Protasio Date: Fri, 8 Sep 2023 09:31:26 -0700 Subject: [PATCH] Creating new metric around chunks bytespool (#5552) * Creating new metric around chunks bytespool Signed-off-by: Alan Protasio * removing old metrics Signed-off-by: Alan Protasio * changelog Signed-off-by: Alan Protasio --------- Signed-off-by: Alan Protasio --- CHANGELOG.md | 1 + pkg/storegateway/chunk_bytes_pool.go | 21 +++++++++------------ pkg/storegateway/chunk_bytes_pool_test.go | 23 +++++++++++++---------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5918e4df52..429fae9183 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * [CHANGE] Store Gateway: Remove `idle_timeout`, `max_conn_age`, `pool_size`, `min_idle_conns` fields for Redis index cache and caching bucket. #5448 * [CHANGE] Store Gateway: Add flag `-store-gateway.sharding-ring.zone-stable-shuffle-sharding` to enable store gateway to use zone stable shuffle sharding. #5489 * [CHANGE] Bucket Index: Add `series_max_size` and `chunk_max_size` to bucket index. #5489 +* [CHANGE] StoreGateway: Rename `cortex_bucket_store_chunk_pool_returned_bytes_total` and `cortex_bucket_store_chunk_pool_requested_bytes_total` to `cortex_bucket_store_chunk_pool_operation_bytes_total`. #5552 * [CHANGE] Query Frontend/Querier: Make build info API disabled by default and add feature flag `api.build-info-enabled` to enable it. #5533 * [FEATURE] Store Gateway: Add `max_downloaded_bytes_per_request` to limit max bytes to download per store gateway request. * [FEATURE] Added 2 flags `-alertmanager.alertmanager-client.grpc-max-send-msg-size` and ` -alertmanager.alertmanager-client.grpc-max-recv-msg-size` to configure alert manager grpc client message size limits. #5338 diff --git a/pkg/storegateway/chunk_bytes_pool.go b/pkg/storegateway/chunk_bytes_pool.go index fee8ac4026..9972e59c4d 100644 --- a/pkg/storegateway/chunk_bytes_pool.go +++ b/pkg/storegateway/chunk_bytes_pool.go @@ -10,8 +10,7 @@ type chunkBytesPool struct { pool *pool.BucketedBytes // Metrics. - requestedBytes prometheus.Counter - returnedBytes prometheus.Counter + poolByteStats *prometheus.CounterVec } func newChunkBytesPool(minBucketSize, maxBucketSize int, maxChunkPoolBytes uint64, reg prometheus.Registerer) (*chunkBytesPool, error) { @@ -22,14 +21,10 @@ func newChunkBytesPool(minBucketSize, maxBucketSize int, maxChunkPoolBytes uint6 return &chunkBytesPool{ pool: upstream, - requestedBytes: promauto.With(reg).NewCounter(prometheus.CounterOpts{ - Name: "cortex_bucket_store_chunk_pool_requested_bytes_total", - Help: "Total bytes requested to chunk bytes pool.", - }), - returnedBytes: promauto.With(reg).NewCounter(prometheus.CounterOpts{ - Name: "cortex_bucket_store_chunk_pool_returned_bytes_total", - Help: "Total bytes returned by the chunk bytes pool.", - }), + poolByteStats: promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ + Name: "cortex_bucket_store_chunk_pool_operation_bytes_total", + Help: "Total bytes number of bytes pooled by operation.", + }, []string{"operation", "stats"}), }, nil } @@ -39,12 +34,14 @@ func (p *chunkBytesPool) Get(sz int) (*[]byte, error) { return buffer, err } - p.requestedBytes.Add(float64(sz)) - p.returnedBytes.Add(float64(cap(*buffer))) + p.poolByteStats.WithLabelValues("get", "requested").Add(float64(sz)) + p.poolByteStats.WithLabelValues("get", "cap").Add(float64(cap(*buffer))) return buffer, err } func (p *chunkBytesPool) Put(b *[]byte) { + p.poolByteStats.WithLabelValues("put", "len").Add(float64(len(*b))) + p.poolByteStats.WithLabelValues("put", "cap").Add(float64(cap(*b))) p.pool.Put(b) } diff --git a/pkg/storegateway/chunk_bytes_pool_test.go b/pkg/storegateway/chunk_bytes_pool_test.go index 3ddb3380b6..dc8f1e317c 100644 --- a/pkg/storegateway/chunk_bytes_pool_test.go +++ b/pkg/storegateway/chunk_bytes_pool_test.go @@ -19,20 +19,23 @@ func TestChunkBytesPool_Get(t *testing.T) { reg := prometheus.NewPedanticRegistry() p, err := newChunkBytesPool(cortex_tsdb.ChunkPoolDefaultMinBucketSize, cortex_tsdb.ChunkPoolDefaultMaxBucketSize, 0, reg) require.NoError(t, err) - + testBytes := []byte("test") _, err = p.Get(store.EstimatedMaxChunkSize - 1) require.NoError(t, err) - _, err = p.Get(store.EstimatedMaxChunkSize + 1) + b, err := p.Get(store.EstimatedMaxChunkSize + 1) require.NoError(t, err) + *b = append(*b, testBytes...) + + p.Put(b) + assert.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(fmt.Sprintf(` - # HELP cortex_bucket_store_chunk_pool_requested_bytes_total Total bytes requested to chunk bytes pool. - # TYPE cortex_bucket_store_chunk_pool_requested_bytes_total counter - cortex_bucket_store_chunk_pool_requested_bytes_total %d - - # HELP cortex_bucket_store_chunk_pool_returned_bytes_total Total bytes returned by the chunk bytes pool. - # TYPE cortex_bucket_store_chunk_pool_returned_bytes_total counter - cortex_bucket_store_chunk_pool_returned_bytes_total %d - `, store.EstimatedMaxChunkSize*2, store.EstimatedMaxChunkSize*3)))) + # HELP cortex_bucket_store_chunk_pool_operation_bytes_total Total bytes number of bytes pooled by operation. + # TYPE cortex_bucket_store_chunk_pool_operation_bytes_total counter + cortex_bucket_store_chunk_pool_operation_bytes_total{operation="get",stats="cap"} %d + cortex_bucket_store_chunk_pool_operation_bytes_total{operation="get",stats="requested"} %d + cortex_bucket_store_chunk_pool_operation_bytes_total{operation="put",stats="cap"} %d + cortex_bucket_store_chunk_pool_operation_bytes_total{operation="put",stats="len"} %d + `, store.EstimatedMaxChunkSize*3, store.EstimatedMaxChunkSize*2, store.EstimatedMaxChunkSize*2, len(testBytes))))) }