From 1c3071ce0c639f3fcc6b3ed25f75c0b84352d30b Mon Sep 17 00:00:00 2001 From: ravisantoshgudimetla Date: Wed, 14 Jul 2021 17:10:21 -0400 Subject: [PATCH] Introduce StatefulSet availableReplicas metric --- docs/statefulset-metrics.md | 1 + internal/store/statefulset.go | 15 +++++++++++++++ internal/store/statefulset_test.go | 13 +++++++++++++ 3 files changed, 29 insertions(+) diff --git a/docs/statefulset-metrics.md b/docs/statefulset-metrics.md index a1ac97196c..aff9327517 100644 --- a/docs/statefulset-metrics.md +++ b/docs/statefulset-metrics.md @@ -5,6 +5,7 @@ | kube_statefulset_status_replicas | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | | kube_statefulset_status_replicas_current | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | | kube_statefulset_status_replicas_ready | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | +| kube_statefulset_status_replicas_available | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | EXPERIMENTAL | | kube_statefulset_status_replicas_updated | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | | kube_statefulset_status_observed_generation | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | | kube_statefulset_replicas | Gauge | `statefulset`=<statefulset-name>
`namespace`=<statefulset-namespace> | STABLE | diff --git a/internal/store/statefulset.go b/internal/store/statefulset.go index 624e5aba96..630b8f8263 100644 --- a/internal/store/statefulset.go +++ b/internal/store/statefulset.go @@ -72,6 +72,21 @@ func statefulSetMetricFamilies(allowLabelsList []string) []generator.FamilyGener } }), ), + *generator.NewFamilyGenerator( + "kube_statefulset_status_replicas_available", + "The number of available replicas per StatefulSet.", + metric.Gauge, + "", + wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family { + return &metric.Family{ + Metrics: []*metric.Metric{ + { + Value: float64(s.Status.AvailableReplicas), + }, + }, + } + }), + ), *generator.NewFamilyGenerator( "kube_statefulset_status_replicas_current", "The number of current replicas per StatefulSet.", diff --git a/internal/store/statefulset_test.go b/internal/store/statefulset_test.go index d9ef6670ee..a7a7b0842e 100644 --- a/internal/store/statefulset_test.go +++ b/internal/store/statefulset_test.go @@ -67,6 +67,7 @@ func TestStatefulSetStore(t *testing.T) { # HELP kube_statefulset_status_current_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas). # HELP kube_statefulset_status_observed_generation The generation observed by the StatefulSet controller. # HELP kube_statefulset_status_replicas The number of replicas per StatefulSet. + # HELP kube_statefulset_status_replicas_available The number of available replicas per StatefulSet. # HELP kube_statefulset_status_replicas_current The number of current replicas per StatefulSet. # HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet. # HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet. @@ -78,6 +79,7 @@ func TestStatefulSetStore(t *testing.T) { # TYPE kube_statefulset_status_current_revision gauge # TYPE kube_statefulset_status_observed_generation gauge # TYPE kube_statefulset_status_replicas gauge + # TYPE kube_statefulset_status_replicas_available gauge # TYPE kube_statefulset_status_replicas_current gauge # TYPE kube_statefulset_status_replicas_ready gauge # TYPE kube_statefulset_status_replicas_updated gauge @@ -86,6 +88,7 @@ func TestStatefulSetStore(t *testing.T) { kube_statefulset_created{namespace="ns1",statefulset="statefulset1"} 1.5e+09 kube_statefulset_status_current_revision{namespace="ns1",revision="cr1",statefulset="statefulset1"} 1 kube_statefulset_status_replicas{namespace="ns1",statefulset="statefulset1"} 2 + kube_statefulset_status_replicas_available{namespace="ns1",statefulset="statefulset1"} 0 kube_statefulset_status_replicas_current{namespace="ns1",statefulset="statefulset1"} 0 kube_statefulset_status_replicas_ready{namespace="ns1",statefulset="statefulset1"} 0 kube_statefulset_status_replicas_updated{namespace="ns1",statefulset="statefulset1"} 0 @@ -101,6 +104,7 @@ func TestStatefulSetStore(t *testing.T) { "kube_statefulset_replicas", "kube_statefulset_status_observed_generation", "kube_statefulset_status_replicas", + "kube_statefulset_status_replicas_available", "kube_statefulset_status_replicas_current", "kube_statefulset_status_replicas_ready", "kube_statefulset_status_replicas_updated", @@ -127,6 +131,7 @@ func TestStatefulSetStore(t *testing.T) { ObservedGeneration: statefulSet2ObservedGeneration, ReadyReplicas: 5, Replicas: 5, + AvailableReplicas: 4, UpdatedReplicas: 3, UpdateRevision: "ur2", CurrentRevision: "cr2", @@ -139,6 +144,7 @@ func TestStatefulSetStore(t *testing.T) { # HELP kube_statefulset_status_current_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas). # HELP kube_statefulset_status_observed_generation The generation observed by the StatefulSet controller. # HELP kube_statefulset_status_replicas The number of replicas per StatefulSet. + # HELP kube_statefulset_status_replicas_available The number of available replicas per StatefulSet. # HELP kube_statefulset_status_replicas_current The number of current replicas per StatefulSet. # HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet. # HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet. @@ -149,12 +155,14 @@ func TestStatefulSetStore(t *testing.T) { # TYPE kube_statefulset_status_current_revision gauge # TYPE kube_statefulset_status_observed_generation gauge # TYPE kube_statefulset_status_replicas gauge + # TYPE kube_statefulset_status_replicas_available gauge # TYPE kube_statefulset_status_replicas_current gauge # TYPE kube_statefulset_status_replicas_ready gauge # TYPE kube_statefulset_status_replicas_updated gauge # TYPE kube_statefulset_status_update_revision gauge kube_statefulset_status_update_revision{namespace="ns2",revision="ur2",statefulset="statefulset2"} 1 kube_statefulset_status_replicas{namespace="ns2",statefulset="statefulset2"} 5 + kube_statefulset_status_replicas_available{namespace="ns2",statefulset="statefulset2"} 4 kube_statefulset_status_replicas_current{namespace="ns2",statefulset="statefulset2"} 2 kube_statefulset_status_replicas_ready{namespace="ns2",statefulset="statefulset2"} 5 kube_statefulset_status_replicas_updated{namespace="ns2",statefulset="statefulset2"} 3 @@ -170,6 +178,7 @@ func TestStatefulSetStore(t *testing.T) { "kube_statefulset_replicas", "kube_statefulset_status_observed_generation", "kube_statefulset_status_replicas", + "kube_statefulset_status_replicas_available", "kube_statefulset_status_replicas_current", "kube_statefulset_status_replicas_ready", "kube_statefulset_status_replicas_updated", @@ -204,6 +213,7 @@ func TestStatefulSetStore(t *testing.T) { # HELP kube_statefulset_replicas Number of desired pods for a StatefulSet. # HELP kube_statefulset_status_current_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas). # HELP kube_statefulset_status_replicas The number of replicas per StatefulSet. + # HELP kube_statefulset_status_replicas_available The number of available replicas per StatefulSet. # HELP kube_statefulset_status_replicas_current The number of current replicas per StatefulSet. # HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet. # HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet. @@ -213,12 +223,14 @@ func TestStatefulSetStore(t *testing.T) { # TYPE kube_statefulset_replicas gauge # TYPE kube_statefulset_status_current_revision gauge # TYPE kube_statefulset_status_replicas gauge + # TYPE kube_statefulset_status_replicas_available gauge # TYPE kube_statefulset_status_replicas_current gauge # TYPE kube_statefulset_status_replicas_ready gauge # TYPE kube_statefulset_status_replicas_updated gauge # TYPE kube_statefulset_status_update_revision gauge kube_statefulset_status_update_revision{namespace="ns3",revision="ur3",statefulset="statefulset3"} 1 kube_statefulset_status_replicas{namespace="ns3",statefulset="statefulset3"} 7 + kube_statefulset_status_replicas_available{namespace="ns3",statefulset="statefulset3"} 0 kube_statefulset_status_replicas_current{namespace="ns3",statefulset="statefulset3"} 0 kube_statefulset_status_replicas_ready{namespace="ns3",statefulset="statefulset3"} 0 kube_statefulset_status_replicas_updated{namespace="ns3",statefulset="statefulset3"} 0 @@ -232,6 +244,7 @@ func TestStatefulSetStore(t *testing.T) { "kube_statefulset_metadata_generation", "kube_statefulset_replicas", "kube_statefulset_status_replicas", + "kube_statefulset_status_replicas_available", "kube_statefulset_status_replicas_current", "kube_statefulset_status_replicas_ready", "kube_statefulset_status_replicas_updated",