Add shard_ordinal label

Facilitates many otherwise impossible promql queries
This commit is contained in:
Mikulas (Mike) Dite 2021-01-18 14:25:56 +00:00
parent 676c7a74d9
commit ba58b77bc8
3 changed files with 13 additions and 5 deletions

View File

@ -20,6 +20,7 @@ import (
"context"
"reflect"
"sort"
"strconv"
"strings"
"github.com/pkg/errors"
@ -104,7 +105,9 @@ func (b *Builder) WithNamespaces(n options.NamespaceList) {
// WithSharding sets the shard and totalShards property of a Builder.
func (b *Builder) WithSharding(shard int32, totalShards int) {
b.shard = shard
b.shardingMetrics.Ordinal.Set(float64(shard))
labels := map[string]string{sharding.LabelOrdinal: strconv.Itoa(int(shard))}
b.shardingMetrics.Ordinal.Reset()
b.shardingMetrics.Ordinal.With(labels).Set(float64(shard))
b.totalShards = totalShards
b.shardingMetrics.Total.Set(float64(totalShards))
}

View File

@ -388,7 +388,7 @@ kube_pod_status_reason{namespace="default",pod="pod0",uid="abc-0",reason="Unexpe
# HELP kube_state_metrics_total_shards Number of total shards this instance is aware of
# TYPE kube_state_metrics_shard_ordinal gauge
# TYPE kube_state_metrics_total_shards gauge
kube_state_metrics_shard_ordinal 0
kube_state_metrics_shard_ordinal{shard_ordinal="0"} 0
kube_state_metrics_total_shards 1
`

View File

@ -21,10 +21,15 @@ import (
"github.com/prometheus/client_golang/prometheus/promauto"
)
const (
// Name of Prometheus metric label to use in conjunction with kube_state_metrics_shard_ordinal.
LabelOrdinal = "shard_ordinal"
)
// Metrics stores the pointers of kube_state_metrics_shard_ordinal
// and kube_state_metrics_total_shards metrics.
type Metrics struct {
Ordinal prometheus.Gauge
Ordinal *prometheus.GaugeVec
Total prometheus.Gauge
}
@ -32,11 +37,11 @@ type Metrics struct {
// and registers sharding configuration metrics. It returns those registered metrics.
func NewShardingMetrics(r prometheus.Registerer) *Metrics {
return &Metrics{
Ordinal: promauto.With(r).NewGauge(
Ordinal: promauto.With(r).NewGaugeVec(
prometheus.GaugeOpts{
Name: "kube_state_metrics_shard_ordinal",
Help: "Current sharding ordinal/index of this instance",
},
}, []string{LabelOrdinal},
),
Total: promauto.With(r).NewGauge(
prometheus.GaugeOpts{