Skip to content

Commit ed36a62

Browse files
authored
Make cortex_bucket_store_blocks_loaded metric per user (#4918)
* make cortex_bucket_store_blocks_loaded metric per user Signed-off-by: Ben Ye <[email protected]> * fix integration test Signed-off-by: Ben Ye <[email protected]> * update changelog Signed-off-by: Ben Ye <[email protected]> * fix test Signed-off-by: Ben Ye <[email protected]> * update changelog Signed-off-by: Ben Ye <[email protected]> Signed-off-by: Ben Ye <[email protected]>
1 parent dd46578 commit ed36a62

File tree

6 files changed

+19
-19
lines changed

6 files changed

+19
-19
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
* [CHANGE] Removes `-ingester.stream-chunks-when-using-blocks` experimental flag and stream chunks by default when `querier.ingester-streaming` is enabled. #4864
4444
* [CHANGE] Compactor: Added `cortex_compactor_runs_interrupted_total` to separate compaction interruptions from failures
4545
* [CHANGE] Enable PromQL `@` modifier, negative offset always. #4927
46+
* [CHANGE] Store-gateway: Add user label to `cortex_bucket_store_blocks_loaded` metric. #4918
4647
* [ENHANCEMENT] AlertManager: Retrying AlertManager Get Requests (Get Alertmanager status, Get Alertmanager Receivers) on next replica on error #4840
4748
* [ENHANCEMENT] Querier/Ruler: Retry store-gateway in case of unexpected failure, instead of failing the query. #4532 #4839
4849
* [ENHANCEMENT] Ring: DoBatch prioritize 4xx errors when failing. #4783

integration/getting_started_with_gossiped_ring_test.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ func TestGettingStartedWithGossipedRing(t *testing.T) {
110110
require.Equal(t, model.ValVector, result.Type())
111111
assert.Equal(t, expectedVector, result.(model.Vector))
112112

113-
// Before flushing the blocks we expect no store-gateway has loaded any block.
114-
require.NoError(t, cortex1.WaitSumMetrics(e2e.Equals(0), "cortex_bucket_store_blocks_loaded"))
115-
require.NoError(t, cortex2.WaitSumMetrics(e2e.Equals(0), "cortex_bucket_store_blocks_loaded"))
116-
117113
// Flush blocks from ingesters to the store.
118114
for _, instance := range []*e2ecortex.CortexService{cortex1, cortex2} {
119115
res, err = e2e.GetRequest("http://" + instance.HTTPEndpoint() + "/flush")
@@ -124,8 +120,8 @@ func TestGettingStartedWithGossipedRing(t *testing.T) {
124120
// Given store-gateway blocks sharding is enabled with the default replication factor of 3,
125121
// and ingestion replication factor is 1, we do expect the series has been ingested by 1
126122
// single ingester and so we have 1 block shipped from ingesters and loaded by both store-gateways.
127-
require.NoError(t, cortex1.WaitSumMetrics(e2e.Equals(1), "cortex_bucket_store_blocks_loaded"))
128-
require.NoError(t, cortex2.WaitSumMetrics(e2e.Equals(1), "cortex_bucket_store_blocks_loaded"))
123+
require.NoError(t, cortex1.WaitSumMetricsWithOptions(e2e.Equals(1), []string{"cortex_bucket_store_blocks_loaded"}, e2e.WaitMissingMetrics))
124+
require.NoError(t, cortex2.WaitSumMetricsWithOptions(e2e.Equals(1), []string{"cortex_bucket_store_blocks_loaded"}, e2e.WaitMissingMetrics))
129125

130126
// Make sure that no DNS failures occurred.
131127
// No actual DNS lookups are necessarily performed, so we can't really assert on that.

integration/querier_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,9 @@ func TestQuerierWithBlocksStorageRunningInMicroservicesMode(t *testing.T) {
186186
// we don't known which store-gateway instance will synch the blocks, so we need to wait on
187187
// metrics extracted from all instances.
188188
if testCfg.blocksShardingStrategy != "" {
189-
require.NoError(t, storeGateways.WaitSumMetrics(e2e.Equals(2), "cortex_bucket_store_blocks_loaded"))
189+
// If shuffle sharding is enabled and we have tenant shard size set to 1,
190+
// then the metric only appears in one store gateway instance.
191+
require.NoError(t, storeGateways.WaitSumMetricsWithOptions(e2e.Equals(2), []string{"cortex_bucket_store_blocks_loaded"}, e2e.SkipMissingMetrics))
190192
} else {
191193
require.NoError(t, storeGateways.WaitSumMetrics(e2e.Equals(float64(2*storeGateways.NumInstances())), "cortex_bucket_store_blocks_loaded"))
192194
}

pkg/storegateway/bucket_store_metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func NewBucketStoreMetrics() *BucketStoreMetrics {
6767
blocksLoaded: prometheus.NewDesc(
6868
"cortex_bucket_store_blocks_loaded",
6969
"Number of currently loaded blocks.",
70-
nil, nil),
70+
[]string{"user"}, nil),
7171
seriesDataTouched: prometheus.NewDesc(
7272
"cortex_bucket_store_series_data_touched",
7373
"How many items of a data type in a block were touched for a single series request.",
@@ -212,7 +212,7 @@ func (m *BucketStoreMetrics) Collect(out chan<- prometheus.Metric) {
212212
data.SendSumOfCounters(out, m.blockDrops, "thanos_bucket_store_block_drops_total")
213213
data.SendSumOfCounters(out, m.blockDropFailures, "thanos_bucket_store_block_drop_failures_total")
214214

215-
data.SendSumOfGauges(out, m.blocksLoaded, "thanos_bucket_store_blocks_loaded")
215+
data.SendSumOfGaugesPerUser(out, m.blocksLoaded, "thanos_bucket_store_blocks_loaded")
216216

217217
data.SendSumOfSummariesWithLabels(out, m.seriesDataTouched, "thanos_bucket_store_series_data_touched", "data_type")
218218
data.SendSumOfSummariesWithLabels(out, m.seriesDataFetched, "thanos_bucket_store_series_data_fetched", "data_type")

pkg/storegateway/bucket_store_metrics_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ func TestBucketStoreMetrics(t *testing.T) {
2525
err := testutil.GatherAndCompare(mainReg, bytes.NewBufferString(`
2626
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
2727
# TYPE cortex_bucket_store_blocks_loaded gauge
28-
cortex_bucket_store_blocks_loaded 22519
28+
cortex_bucket_store_blocks_loaded{user="user1"} 5328
29+
cortex_bucket_store_blocks_loaded{user="user2"} 6908
30+
cortex_bucket_store_blocks_loaded{user="user3"} 10283
2931
3032
# HELP cortex_bucket_store_block_loads_total Total number of remote block loading attempts.
3133
# TYPE cortex_bucket_store_block_loads_total counter

pkg/storegateway/bucket_stores_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ func TestBucketStores_InitialSync(t *testing.T) {
9090
assert.NoError(t, testutil.GatherAndCompare(reg, strings.NewReader(`
9191
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
9292
# TYPE cortex_bucket_store_blocks_loaded gauge
93-
cortex_bucket_store_blocks_loaded 2
93+
cortex_bucket_store_blocks_loaded{user="user-1"} 1
94+
cortex_bucket_store_blocks_loaded{user="user-2"} 1
9495
9596
# HELP cortex_bucket_store_block_loads_total Total number of remote block loading attempts.
9697
# TYPE cortex_bucket_store_block_loads_total counter
@@ -158,7 +159,7 @@ func TestBucketStores_InitialSyncShouldRetryOnFailure(t *testing.T) {
158159
159160
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
160161
# TYPE cortex_bucket_store_blocks_loaded gauge
161-
cortex_bucket_store_blocks_loaded 1
162+
cortex_bucket_store_blocks_loaded{user="user-1"} 1
162163
163164
# HELP cortex_bucket_store_block_loads_total Total number of remote block loading attempts.
164165
# TYPE cortex_bucket_store_block_loads_total counter
@@ -219,7 +220,7 @@ func TestBucketStores_SyncBlocks(t *testing.T) {
219220
assert.NoError(t, testutil.GatherAndCompare(reg, strings.NewReader(`
220221
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
221222
# TYPE cortex_bucket_store_blocks_loaded gauge
222-
cortex_bucket_store_blocks_loaded 2
223+
cortex_bucket_store_blocks_loaded{user="user-1"} 2
223224
224225
# HELP cortex_bucket_store_block_loads_total Total number of remote block loading attempts.
225226
# TYPE cortex_bucket_store_block_loads_total counter
@@ -486,7 +487,8 @@ func TestBucketStores_deleteLocalFilesForExcludedTenants(t *testing.T) {
486487
cortex_bucket_store_block_loads_total 2
487488
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
488489
# TYPE cortex_bucket_store_blocks_loaded gauge
489-
cortex_bucket_store_blocks_loaded 2
490+
cortex_bucket_store_blocks_loaded{user="user-1"} 1
491+
cortex_bucket_store_blocks_loaded{user="user-2"} 1
490492
`), metricNames...))
491493

492494
// Single user left in shard.
@@ -503,7 +505,7 @@ func TestBucketStores_deleteLocalFilesForExcludedTenants(t *testing.T) {
503505
cortex_bucket_store_block_loads_total 2
504506
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
505507
# TYPE cortex_bucket_store_blocks_loaded gauge
506-
cortex_bucket_store_blocks_loaded 1
508+
cortex_bucket_store_blocks_loaded{user="user-1"} 1
507509
`), metricNames...))
508510

509511
// No users left in this shard.
@@ -518,9 +520,6 @@ func TestBucketStores_deleteLocalFilesForExcludedTenants(t *testing.T) {
518520
# HELP cortex_bucket_store_block_loads_total Total number of remote block loading attempts.
519521
# TYPE cortex_bucket_store_block_loads_total counter
520522
cortex_bucket_store_block_loads_total 2
521-
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
522-
# TYPE cortex_bucket_store_blocks_loaded gauge
523-
cortex_bucket_store_blocks_loaded 0
524523
`), metricNames...))
525524

526525
// We can always get user back.
@@ -537,7 +536,7 @@ func TestBucketStores_deleteLocalFilesForExcludedTenants(t *testing.T) {
537536
cortex_bucket_store_block_loads_total 3
538537
# HELP cortex_bucket_store_blocks_loaded Number of currently loaded blocks.
539538
# TYPE cortex_bucket_store_blocks_loaded gauge
540-
cortex_bucket_store_blocks_loaded 1
539+
cortex_bucket_store_blocks_loaded{user="user-1"} 1
541540
`), metricNames...))
542541
}
543542

0 commit comments

Comments
 (0)