diff --git a/cmd/kube-proxy/BUILD b/cmd/kube-proxy/BUILD index 29e5743beb1..ed4156c8740 100644 --- a/cmd/kube-proxy/BUILD +++ b/cmd/kube-proxy/BUILD @@ -20,10 +20,9 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kube-proxy", deps = [ "//cmd/kube-proxy/app:go_default_library", - "//pkg/client/metrics/prometheus:go_default_library", - "//pkg/version/prometheus:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/component-base/logs:go_default_library", + "//staging/src/k8s.io/component-base/metrics/prometheus/restclient:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", ], ) diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 9d5525ae3ea..f129a03f886 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -63,9 +63,9 @@ go_library( "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/component-base/config:go_default_library", + "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library", "//staging/src/k8s.io/kube-proxy/config/v1alpha1:go_default_library", "//vendor/github.com/fsnotify/fsnotify:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/klog:go_default_library", diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 6360d968633..235ce5b711e 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -28,6 +28,10 @@ import ( "strings" "time" + "github.com/fsnotify/fsnotify" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + v1 "k8s.io/api/core/v1" v1meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -48,6 +52,8 @@ import ( "k8s.io/client-go/tools/record" cliflag "k8s.io/component-base/cli/flag" componentbaseconfig "k8s.io/component-base/config" + "k8s.io/component-base/metrics/legacyregistry" + "k8s.io/klog" "k8s.io/kube-proxy/config/v1alpha1" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/kubelet/qos" @@ -74,12 +80,6 @@ import ( "k8s.io/kubernetes/pkg/version/verflag" "k8s.io/utils/exec" utilpointer "k8s.io/utils/pointer" - - "github.com/fsnotify/fsnotify" - "github.com/prometheus/client_golang/prometheus" - "github.com/spf13/cobra" - "github.com/spf13/pflag" - "k8s.io/klog" ) const ( @@ -551,7 +551,7 @@ func (s *ProxyServer) Run() error { proxyMux.HandleFunc("/proxyMode", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s", s.ProxyMode) }) - proxyMux.Handle("/metrics", prometheus.Handler()) + proxyMux.Handle("/metrics", legacyregistry.Handler()) if s.EnableProfiling { routes.Profiling{}.Install(proxyMux) } diff --git a/cmd/kube-proxy/proxy.go b/cmd/kube-proxy/proxy.go index b25dea06d27..4b8a52c53c7 100644 --- a/cmd/kube-proxy/proxy.go +++ b/cmd/kube-proxy/proxy.go @@ -26,9 +26,8 @@ import ( cliflag "k8s.io/component-base/cli/flag" "k8s.io/component-base/logs" + _ "k8s.io/component-base/metrics/prometheus/restclient" // for client metric registration "k8s.io/kubernetes/cmd/kube-proxy/app" - _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration - _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration ) func main() { diff --git a/pkg/proxy/metrics/BUILD b/pkg/proxy/metrics/BUILD index f3166915150..32c501a411a 100644 --- a/pkg/proxy/metrics/BUILD +++ b/pkg/proxy/metrics/BUILD @@ -5,7 +5,11 @@ go_library( srcs = ["metrics.go"], importpath = "k8s.io/kubernetes/pkg/proxy/metrics", visibility = ["//visibility:public"], - deps = ["//vendor/github.com/prometheus/client_golang/prometheus:go_default_library"], + deps = [ + "//staging/src/k8s.io/component-base/metrics:go_default_library", + "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", + ], ) filegroup( diff --git a/pkg/proxy/metrics/metrics.go b/pkg/proxy/metrics/metrics.go index b73c740d79c..4a0cc02d905 100644 --- a/pkg/proxy/metrics/metrics.go +++ b/pkg/proxy/metrics/metrics.go @@ -21,38 +21,44 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" + + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" ) const kubeProxySubsystem = "kubeproxy" var ( // SyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. - SyncProxyRulesLatency = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_duration_seconds", - Help: "SyncProxyRules latency in seconds", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + SyncProxyRulesLatency = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_duration_seconds", + Help: "SyncProxyRules latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + StabilityLevel: metrics.ALPHA, }, ) // DeprecatedSyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. - DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_latency_microseconds", - Help: "(Deprecated) SyncProxyRules latency in microseconds", - Buckets: prometheus.ExponentialBuckets(1000, 2, 15), + DeprecatedSyncProxyRulesLatency = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_latency_microseconds", + Help: "(Deprecated) SyncProxyRules latency in microseconds", + Buckets: prometheus.ExponentialBuckets(1000, 2, 15), + StabilityLevel: metrics.ALPHA, }, ) // SyncProxyRulesLastTimestamp is the timestamp proxy rules were last // successfully synced. - SyncProxyRulesLastTimestamp = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_last_timestamp_seconds", - Help: "The last time proxy rules were successfully synced", + SyncProxyRulesLastTimestamp = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_last_timestamp_seconds", + Help: "The last time proxy rules were successfully synced", + StabilityLevel: metrics.ALPHA, }, ) @@ -63,8 +69,8 @@ var ( // Note that the metrics is partially based on the time exported by the endpoints controller on // the master machine. The measurement may be inaccurate if there is a clock drift between the // node and master machine. - NetworkProgrammingLatency = prometheus.NewHistogram( - prometheus.HistogramOpts{ + NetworkProgrammingLatency = metrics.NewHistogram( + &metrics.HistogramOpts{ Subsystem: kubeProxySubsystem, Name: "network_programming_duration_seconds", Help: "In Cluster Network Programming Latency in seconds", @@ -74,56 +80,62 @@ var ( prometheus.LinearBuckets(60, 5, 12), // 60s, 65s, 70s, ... 115s prometheus.LinearBuckets(120, 30, 7), // 2min, 2.5min, 3min, ..., 5min ), + StabilityLevel: metrics.ALPHA, }, ) // EndpointChangesPending is the number of pending endpoint changes that // have not yet been synced to the proxy. - EndpointChangesPending = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_endpoint_changes_pending", - Help: "Pending proxy rules Endpoint changes", + EndpointChangesPending = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_endpoint_changes_pending", + Help: "Pending proxy rules Endpoint changes", + StabilityLevel: metrics.ALPHA, }, ) // EndpointChangesTotal is the number of endpoint changes that the proxy // has seen. - EndpointChangesTotal = prometheus.NewCounter( - prometheus.CounterOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_endpoint_changes_total", - Help: "Cumulative proxy rules Endpoint changes", + EndpointChangesTotal = metrics.NewCounter( + &metrics.CounterOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_endpoint_changes_total", + Help: "Cumulative proxy rules Endpoint changes", + StabilityLevel: metrics.ALPHA, }, ) // ServiceChangesPending is the number of pending service changes that // have not yet been synced to the proxy. - ServiceChangesPending = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_service_changes_pending", - Help: "Pending proxy rules Service changes", + ServiceChangesPending = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_service_changes_pending", + Help: "Pending proxy rules Service changes", + StabilityLevel: metrics.ALPHA, }, ) // ServiceChangesTotal is the number of service changes that the proxy has // seen. - ServiceChangesTotal = prometheus.NewCounter( - prometheus.CounterOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_service_changes_total", - Help: "Cumulative proxy rules Service changes", + ServiceChangesTotal = metrics.NewCounter( + &metrics.CounterOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_service_changes_total", + Help: "Cumulative proxy rules Service changes", + StabilityLevel: metrics.ALPHA, }, ) // IptablesRestoreFailuresTotal is the number of iptables restore failures that the proxy has // seen. - IptablesRestoreFailuresTotal = prometheus.NewCounter( - prometheus.CounterOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_iptables_restore_failures_total", - Help: "Cumulative proxy iptables restore failures", + IptablesRestoreFailuresTotal = metrics.NewCounter( + &metrics.CounterOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_iptables_restore_failures_total", + Help: "Cumulative proxy iptables restore failures", + StabilityLevel: metrics.ALPHA, }, ) ) @@ -133,15 +145,15 @@ var registerMetricsOnce sync.Once // RegisterMetrics registers kube-proxy metrics. func RegisterMetrics() { registerMetricsOnce.Do(func() { - prometheus.MustRegister(SyncProxyRulesLatency) - prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) - prometheus.MustRegister(SyncProxyRulesLastTimestamp) - prometheus.MustRegister(NetworkProgrammingLatency) - prometheus.MustRegister(EndpointChangesPending) - prometheus.MustRegister(EndpointChangesTotal) - prometheus.MustRegister(ServiceChangesPending) - prometheus.MustRegister(ServiceChangesTotal) - prometheus.MustRegister(IptablesRestoreFailuresTotal) + legacyregistry.MustRegister(SyncProxyRulesLatency) + legacyregistry.MustRegister(DeprecatedSyncProxyRulesLatency) + legacyregistry.MustRegister(SyncProxyRulesLastTimestamp) + legacyregistry.MustRegister(NetworkProgrammingLatency) + legacyregistry.MustRegister(EndpointChangesPending) + legacyregistry.MustRegister(EndpointChangesTotal) + legacyregistry.MustRegister(ServiceChangesPending) + legacyregistry.MustRegister(ServiceChangesTotal) + legacyregistry.MustRegister(IptablesRestoreFailuresTotal) }) } diff --git a/pkg/proxy/winkernel/BUILD b/pkg/proxy/winkernel/BUILD index c91644282e7..fa2e60e5c15 100644 --- a/pkg/proxy/winkernel/BUILD +++ b/pkg/proxy/winkernel/BUILD @@ -11,6 +11,8 @@ go_library( importpath = "k8s.io/kubernetes/pkg/proxy/winkernel", visibility = ["//visibility:public"], deps = [ + "//staging/src/k8s.io/component-base/metrics:go_default_library", + "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", ] + select({ "@io_bazel_rules_go//go/platform:windows": [ diff --git a/pkg/proxy/winkernel/metrics.go b/pkg/proxy/winkernel/metrics.go index 729cc5e626f..8f34daeffdd 100644 --- a/pkg/proxy/winkernel/metrics.go +++ b/pkg/proxy/winkernel/metrics.go @@ -21,36 +21,42 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" + + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" ) const kubeProxySubsystem = "kubeproxy" var ( - SyncProxyRulesLatency = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_duration_seconds", - Help: "SyncProxyRules latency in seconds", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + SyncProxyRulesLatency = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_duration_seconds", + Help: "SyncProxyRules latency in seconds", + Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), + StabilityLevel: metrics.ALPHA, }, ) - DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram( - prometheus.HistogramOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_latency_microseconds", - Help: "(Deprecated) SyncProxyRules latency in microseconds", - Buckets: prometheus.ExponentialBuckets(1000, 2, 15), + DeprecatedSyncProxyRulesLatency = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_latency_microseconds", + Help: "(Deprecated) SyncProxyRules latency in microseconds", + Buckets: prometheus.ExponentialBuckets(1000, 2, 15), + StabilityLevel: metrics.ALPHA, }, ) // SyncProxyRulesLastTimestamp is the timestamp proxy rules were last // successfully synced. - SyncProxyRulesLastTimestamp = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_last_timestamp_seconds", - Help: "The last time proxy rules were successfully synced", + SyncProxyRulesLastTimestamp = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: kubeProxySubsystem, + Name: "sync_proxy_rules_last_timestamp_seconds", + Help: "The last time proxy rules were successfully synced", + StabilityLevel: metrics.ALPHA, }, ) ) @@ -59,9 +65,9 @@ var registerMetricsOnce sync.Once func RegisterMetrics() { registerMetricsOnce.Do(func() { - prometheus.MustRegister(SyncProxyRulesLatency) - prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) - prometheus.MustRegister(SyncProxyRulesLastTimestamp) + legacyregistry.MustRegister(SyncProxyRulesLatency) + legacyregistry.MustRegister(DeprecatedSyncProxyRulesLatency) + legacyregistry.MustRegister(SyncProxyRulesLastTimestamp) }) } diff --git a/staging/src/k8s.io/component-base/metrics/wrappers.go b/staging/src/k8s.io/component-base/metrics/wrappers.go index 8d2495eabfd..fa40314dc6e 100644 --- a/staging/src/k8s.io/component-base/metrics/wrappers.go +++ b/staging/src/k8s.io/component-base/metrics/wrappers.go @@ -63,6 +63,7 @@ type GaugeMetric interface { Dec() Add(float64) Write(out *dto.Metric) error + SetToCurrentTime() } // ObserverMetric captures individual observations.