@@ -3202,12 +3202,12 @@ func TestUpdateMetrics(t *testing.T) {
32023202 ring_member_ownership_percent{member="B",name="test"} 0.5000000002328306
32033203 # HELP ring_members Number of members in the ring
32043204 # 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
32113211 # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
32123212 # TYPE ring_oldest_member_timestamp gauge
32133213 ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3230,12 +3230,12 @@ func TestUpdateMetrics(t *testing.T) {
32303230 Expected : `
32313231 # HELP ring_members Number of members in the ring
32323232 # 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
32393239 # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
32403240 # TYPE ring_oldest_member_timestamp gauge
32413241 ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3310,12 +3310,12 @@ func TestUpdateMetricsWithRemoval(t *testing.T) {
33103310 ring_member_ownership_percent{member="B",name="test"} 0.5000000002328306
33113311 # HELP ring_members Number of members in the ring
33123312 # 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
33193319 # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
33203320 # TYPE ring_oldest_member_timestamp gauge
33213321 ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11
@@ -3347,12 +3347,130 @@ func TestUpdateMetricsWithRemoval(t *testing.T) {
33473347 ring_member_ownership_percent{member="A",name="test"} 1
33483348 # HELP ring_members Number of members in the ring
33493349 # 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
33563474 # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring.
33573475 # TYPE ring_oldest_member_timestamp gauge
33583476 ring_oldest_member_timestamp{name="test",state="ACTIVE"} 22
0 commit comments