Skip to content

Commit

Permalink
add prometheus metric
Browse files Browse the repository at this point in the history
Signed-off-by: Gang Li <[email protected]>
  • Loading branch information
gangli113 committed Feb 20, 2025
1 parent deb9178 commit 2bd2be7
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
15 changes: 12 additions & 3 deletions pkg/featuregate/feature_gate.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"sync"
"sync/atomic"

"github.com/prometheus/client_golang/prometheus"
"github.com/spf13/pflag"
"go.uber.org/zap"
)
Expand Down Expand Up @@ -113,7 +114,7 @@ type MutableFeatureGate interface {
// GetAll returns a copy of the map of known feature names to feature specs.
GetAll() map[Feature]FeatureSpec
// AddMetrics adds feature enablement metrics
AddMetrics()
AddMetrics(gaugeVec *prometheus.GaugeVec)
// OverrideDefault sets a local override for the registered default value of a named
// feature. If the feature has not been previously registered (e.g. by a call to Add), has a
// locked default, or if the gate has already registered itself with a FlagSet, a non-nil
Expand Down Expand Up @@ -363,8 +364,16 @@ func (f *featureGate) AddFlag(fs *flag.FlagSet, flagName string) {
"Options are:\n"+strings.Join(known, "\n"))
}

func (f *featureGate) AddMetrics() {
// TODO(henrybear327): implement this.
func (f *featureGate) AddMetrics(gaugeVec *prometheus.GaugeVec) {
for Feature, FeatureSpec := range f.GetAll() {
var metricVal float64
if f.Enabled(Feature) {
metricVal = 1
} else {
metricVal = 0
}
gaugeVec.With(prometheus.Labels{"name": string(Feature), "stage": string(FeatureSpec.PreRelease)}).Set(metricVal)
}
}

// KnownFeatures returns a slice of strings describing the FeatureGate's known features.
Expand Down
9 changes: 9 additions & 0 deletions server/etcdserver/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,15 @@ var (
},
[]string{"server_id"},
)
etcdServerFeatureEnabled = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "etcd",
Subsystem: "server",
Name: "etcd_server_feature_enabled",
Help: "Whether or not a feature is enabled. 1 is enabled, 0 is not.",
},
[]string{"name", "stage"},
)
fdUsed = prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: "os",
Subsystem: "fd",
Expand Down
2 changes: 2 additions & 0 deletions server/etcdserver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,8 @@ func NewServer(cfg config.ServerConfig) (srv *EtcdServer, err error) {
firstCommitInTerm: notify.NewNotifier(),
clusterVersionChanged: notify.NewNotifier(),
}

cfg.ServerFeatureGate.(featuregate.MutableFeatureGate).AddMetrics(etcdServerFeatureEnabled)
serverID.With(prometheus.Labels{"server_id": b.cluster.nodeID.String()}).Set(1)
srv.cluster.SetVersionChangedNotifier(srv.clusterVersionChanged)

Expand Down

0 comments on commit 2bd2be7

Please sign in to comment.