@@ -3202,12 +3202,12 @@ func TestUpdateMetrics(t *testing.T) {
3202
3202
ring_member_ownership_percent{member="B",name="test"} 0.5000000002328306
3203
3203
# HELP ring_members Number of members in the ring
3204
3204
# TYPE ring_members gauge
3205
- ring_members{name="test",state="ACTIVE"} 2
3206
- ring_members{name="test",state="JOINING"} 0
3207
- ring_members{name="test",state="LEAVING"} 0
3208
- ring_members{name="test",state="PENDING"} 0
3209
- ring_members{name="test",state="READONLY"} 0
3210
- ring_members{name="test",state="Unhealthy"} 0
3205
+ ring_members{name="test",state="ACTIVE",zone="" } 2
3206
+ ring_members{name="test",state="JOINING",zone="" } 0
3207
+ ring_members{name="test",state="LEAVING",zone="" } 0
3208
+ ring_members{name="test",state="PENDING",zone="" } 0
3209
+ ring_members{name="test",state="READONLY",zone="" } 0
3210
+ ring_members{name="test",state="Unhealthy",zone="" } 0
3211
3211
# HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3212
3212
# TYPE ring_oldest_member_timestamp gauge
3213
3213
ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3230,12 +3230,12 @@ func TestUpdateMetrics(t *testing.T) {
3230
3230
Expected : `
3231
3231
# HELP ring_members Number of members in the ring
3232
3232
# TYPE ring_members gauge
3233
- ring_members{name="test",state="ACTIVE"} 2
3234
- ring_members{name="test",state="JOINING"} 0
3235
- ring_members{name="test",state="LEAVING"} 0
3236
- ring_members{name="test",state="PENDING"} 0
3237
- ring_members{name="test",state="READONLY"} 0
3238
- ring_members{name="test",state="Unhealthy"} 0
3233
+ ring_members{name="test",state="ACTIVE",zone="" } 2
3234
+ ring_members{name="test",state="JOINING",zone="" } 0
3235
+ ring_members{name="test",state="LEAVING",zone="" } 0
3236
+ ring_members{name="test",state="PENDING",zone="" } 0
3237
+ ring_members{name="test",state="READONLY",zone="" } 0
3238
+ ring_members{name="test",state="Unhealthy",zone="" } 0
3239
3239
# HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3240
3240
# TYPE ring_oldest_member_timestamp gauge
3241
3241
ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3310,12 +3310,12 @@ func TestUpdateMetricsWithRemoval(t *testing.T) {
3310
3310
ring_member_ownership_percent{member="B",name="test"} 0.5000000002328306
3311
3311
# HELP ring_members Number of members in the ring
3312
3312
# TYPE ring_members gauge
3313
- ring_members{name="test",state="ACTIVE"} 2
3314
- ring_members{name="test",state="JOINING"} 0
3315
- ring_members{name="test",state="LEAVING"} 0
3316
- ring_members{name="test",state="PENDING"} 0
3317
- ring_members{name="test",state="READONLY"} 0
3318
- ring_members{name="test",state="Unhealthy"} 0
3313
+ ring_members{name="test",state="ACTIVE",zone="" } 2
3314
+ ring_members{name="test",state="JOINING",zone="" } 0
3315
+ ring_members{name="test",state="LEAVING",zone="" } 0
3316
+ ring_members{name="test",state="PENDING",zone="" } 0
3317
+ ring_members{name="test",state="READONLY",zone="" } 0
3318
+ ring_members{name="test",state="Unhealthy",zone="" } 0
3319
3319
# HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3320
3320
# TYPE ring_oldest_member_timestamp gauge
3321
3321
ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3347,12 +3347,130 @@ func TestUpdateMetricsWithRemoval(t *testing.T) {
3347
3347
ring_member_ownership_percent{member="A",name="test"} 1
3348
3348
# HELP ring_members Number of members in the ring
3349
3349
# TYPE ring_members gauge
3350
- ring_members{name="test",state="ACTIVE"} 1
3351
- ring_members{name="test",state="JOINING"} 0
3352
- ring_members{name="test",state="LEAVING"} 0
3353
- ring_members{name="test",state="PENDING"} 0
3354
- ring_members{name="test",state="READONLY"} 0
3355
- ring_members{name="test",state="Unhealthy"} 0
3350
+ ring_members{name="test",state="ACTIVE",zone=""} 1
3351
+ ring_members{name="test",state="JOINING",zone=""} 0
3352
+ ring_members{name="test",state="LEAVING",zone=""} 0
3353
+ ring_members{name="test",state="PENDING",zone=""} 0
3354
+ ring_members{name="test",state="READONLY",zone=""} 0
3355
+ ring_members{name="test",state="Unhealthy",zone=""} 0
3356
+ # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3357
+ # TYPE ring_oldest_member_timestamp gauge
3358
+ ring_oldest_member_timestamp{name="test",state="ACTIVE"} 22
3359
+ ring_oldest_member_timestamp{name="test",state="JOINING"} 0
3360
+ ring_oldest_member_timestamp{name="test",state="LEAVING"} 0
3361
+ ring_oldest_member_timestamp{name="test",state="PENDING"} 0
3362
+ ring_oldest_member_timestamp{name="test",state="READONLY"} 0
3363
+ ring_oldest_member_timestamp{name="test",state="Unhealthy"} 0
3364
+ # HELP ring_tokens_owned The number of tokens in the ring owned by the member
3365
+ # TYPE ring_tokens_owned gauge
3366
+ ring_tokens_owned{member="A",name="test"} 2
3367
+ # HELP ring_tokens_total Number of tokens in the ring
3368
+ # TYPE ring_tokens_total gauge
3369
+ ring_tokens_total{name="test"} 2
3370
+ ` ))
3371
+ assert .NoError (t , err )
3372
+ }
3373
+
3374
+ func TestUpdateMetricsWithZone (t * testing.T ) {
3375
+ cfg := Config {
3376
+ KVStore : kv.Config {},
3377
+ HeartbeatTimeout : 0 , // get healthy stats
3378
+ ReplicationFactor : 3 ,
3379
+ ZoneAwarenessEnabled : true ,
3380
+ DetailedMetricsEnabled : true ,
3381
+ }
3382
+
3383
+ registry := prometheus .NewRegistry ()
3384
+
3385
+ // create the ring to set up metrics, but do not start
3386
+ ring , err := NewWithStoreClientAndStrategy (cfg , testRingName , testRingKey , & MockClient {}, NewDefaultReplicationStrategy (), registry , log .NewNopLogger ())
3387
+ require .NoError (t , err )
3388
+
3389
+ ringDesc := Desc {
3390
+ Ingesters : map [string ]InstanceDesc {
3391
+ "A" : {Addr : "127.0.0.1" , Timestamp : 22 , Zone : "zone1" , Tokens : []uint32 {math .MaxUint32 / 6 , (math .MaxUint32 / 6 ) * 4 }},
3392
+ "B" : {Addr : "127.0.0.2" , Timestamp : 11 , Zone : "zone2" , Tokens : []uint32 {(math .MaxUint32 / 6 ) * 2 , (math .MaxUint32 / 6 ) * 5 }},
3393
+ "C" : {Addr : "127.0.0.3" , Timestamp : 33 , Zone : "zone3" , Tokens : []uint32 {(math .MaxUint32 / 6 ) * 3 , math .MaxUint32 }},
3394
+ },
3395
+ }
3396
+ ring .updateRingState (& ringDesc )
3397
+
3398
+ err = testutil .GatherAndCompare (registry , bytes .NewBufferString (`
3399
+ # HELP ring_member_ownership_percent The percent ownership of the ring by member
3400
+ # TYPE ring_member_ownership_percent gauge
3401
+ ring_member_ownership_percent{member="A",name="test"} 0.3333333332557231
3402
+ ring_member_ownership_percent{member="B",name="test"} 0.3333333330228925
3403
+ ring_member_ownership_percent{member="C",name="test"} 0.3333333337213844
3404
+ # HELP ring_members Number of members in the ring
3405
+ # TYPE ring_members gauge
3406
+ ring_members{name="test",state="ACTIVE",zone="zone1"} 1
3407
+ ring_members{name="test",state="ACTIVE",zone="zone2"} 1
3408
+ ring_members{name="test",state="ACTIVE",zone="zone3"} 1
3409
+ ring_members{name="test",state="JOINING",zone="zone1"} 0
3410
+ ring_members{name="test",state="JOINING",zone="zone2"} 0
3411
+ ring_members{name="test",state="JOINING",zone="zone3"} 0
3412
+ ring_members{name="test",state="LEAVING",zone="zone1"} 0
3413
+ ring_members{name="test",state="LEAVING",zone="zone2"} 0
3414
+ ring_members{name="test",state="LEAVING",zone="zone3"} 0
3415
+ ring_members{name="test",state="PENDING",zone="zone1"} 0
3416
+ ring_members{name="test",state="PENDING",zone="zone2"} 0
3417
+ ring_members{name="test",state="PENDING",zone="zone3"} 0
3418
+ ring_members{name="test",state="READONLY",zone="zone1"} 0
3419
+ ring_members{name="test",state="READONLY",zone="zone2"} 0
3420
+ ring_members{name="test",state="READONLY",zone="zone3"} 0
3421
+ ring_members{name="test",state="Unhealthy",zone="zone1"} 0
3422
+ ring_members{name="test",state="Unhealthy",zone="zone2"} 0
3423
+ ring_members{name="test",state="Unhealthy",zone="zone3"} 0
3424
+ # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3425
+ # TYPE ring_oldest_member_timestamp gauge
3426
+ ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
3427
+ ring_oldest_member_timestamp{name="test",state="JOINING"} 0
3428
+ ring_oldest_member_timestamp{name="test",state="LEAVING"} 0
3429
+ ring_oldest_member_timestamp{name="test",state="PENDING"} 0
3430
+ ring_oldest_member_timestamp{name="test",state="READONLY"} 0
3431
+ ring_oldest_member_timestamp{name="test",state="Unhealthy"} 0
3432
+ # HELP ring_tokens_owned The number of tokens in the ring owned by the member
3433
+ # TYPE ring_tokens_owned gauge
3434
+ ring_tokens_owned{member="A",name="test"} 2
3435
+ ring_tokens_owned{member="B",name="test"} 2
3436
+ ring_tokens_owned{member="C",name="test"} 2
3437
+ # HELP ring_tokens_total Number of tokens in the ring
3438
+ # TYPE ring_tokens_total gauge
3439
+ ring_tokens_total{name="test"} 6
3440
+ ` ))
3441
+ require .NoError (t , err )
3442
+
3443
+ ringDescNew := Desc {
3444
+ Ingesters : map [string ]InstanceDesc {
3445
+ "A" : {Addr : "127.0.0.1" , Timestamp : 22 , Zone : "zone1" , Tokens : []uint32 {math .MaxUint32 / 6 , (math .MaxUint32 / 6 ) * 4 }},
3446
+ },
3447
+ }
3448
+ ring .updateRingState (& ringDescNew )
3449
+
3450
+ err = testutil .GatherAndCompare (registry , bytes .NewBufferString (`
3451
+ # HELP ring_member_ownership_percent The percent ownership of the ring by member
3452
+ # TYPE ring_member_ownership_percent gauge
3453
+ ring_member_ownership_percent{member="A",name="test"} 1
3454
+ # HELP ring_members Number of members in the ring
3455
+ # TYPE ring_members gauge
3456
+ ring_members{name="test",state="ACTIVE",zone="zone1"} 1
3457
+ ring_members{name="test",state="ACTIVE",zone="zone2"} 0
3458
+ ring_members{name="test",state="ACTIVE",zone="zone3"} 0
3459
+ ring_members{name="test",state="JOINING",zone="zone1"} 0
3460
+ ring_members{name="test",state="JOINING",zone="zone2"} 0
3461
+ ring_members{name="test",state="JOINING",zone="zone3"} 0
3462
+ ring_members{name="test",state="LEAVING",zone="zone1"} 0
3463
+ ring_members{name="test",state="LEAVING",zone="zone2"} 0
3464
+ ring_members{name="test",state="LEAVING",zone="zone3"} 0
3465
+ ring_members{name="test",state="PENDING",zone="zone1"} 0
3466
+ ring_members{name="test",state="PENDING",zone="zone2"} 0
3467
+ ring_members{name="test",state="PENDING",zone="zone3"} 0
3468
+ ring_members{name="test",state="READONLY",zone="zone1"} 0
3469
+ ring_members{name="test",state="READONLY",zone="zone2"} 0
3470
+ ring_members{name="test",state="READONLY",zone="zone3"} 0
3471
+ ring_members{name="test",state="Unhealthy",zone="zone1"} 0
3472
+ ring_members{name="test",state="Unhealthy",zone="zone2"} 0
3473
+ ring_members{name="test",state="Unhealthy",zone="zone3"} 0
3356
3474
# HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
3357
3475
# TYPE ring_oldest_member_timestamp gauge
3358
3476
ring_oldest_member_timestamp{name="test",state="ACTIVE"} 22
0 commit comments