diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index db69094dae..5d7b628b06 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -36,6 +36,7 @@ go_library( "//pkg/proxy/healthcheck:go_default_library", "//pkg/proxy/iptables:go_default_library", "//pkg/proxy/ipvs:go_default_library", + "//pkg/proxy/metrics:go_default_library", "//pkg/proxy/userspace:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/dbus:go_default_library", diff --git a/cmd/kube-proxy/app/server_others.go b/cmd/kube-proxy/app/server_others.go index 479d2adb4c..a40d45ed67 100644 --- a/cmd/kube-proxy/app/server_others.go +++ b/cmd/kube-proxy/app/server_others.go @@ -39,6 +39,7 @@ import ( "k8s.io/kubernetes/pkg/proxy/healthcheck" "k8s.io/kubernetes/pkg/proxy/iptables" "k8s.io/kubernetes/pkg/proxy/ipvs" + "k8s.io/kubernetes/pkg/proxy/metrics" "k8s.io/kubernetes/pkg/proxy/userspace" "k8s.io/kubernetes/pkg/util/configz" utildbus "k8s.io/kubernetes/pkg/util/dbus" @@ -143,7 +144,6 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx if err != nil { return nil, fmt.Errorf("unable to create proxier: %v", err) } - iptables.RegisterMetrics() proxier = proxierIPTables serviceEventHandler = proxierIPTables endpointsEventHandler = proxierIPTables @@ -218,6 +218,8 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx iptInterface.AddReloadFunc(proxier.Sync) + metrics.RegisterMetrics() + return &ProxyServer{ Client: client, EventClient: eventClient, diff --git a/pkg/proxy/BUILD b/pkg/proxy/BUILD index a0b80defb6..41924d590e 100644 --- a/pkg/proxy/BUILD +++ b/pkg/proxy/BUILD @@ -30,6 +30,7 @@ filegroup( "//pkg/proxy/healthcheck:all-srcs", "//pkg/proxy/iptables:all-srcs", "//pkg/proxy/ipvs:all-srcs", + "//pkg/proxy/metrics:all-srcs", "//pkg/proxy/userspace:all-srcs", "//pkg/proxy/util:all-srcs", "//pkg/proxy/winkernel:all-srcs", diff --git a/pkg/proxy/iptables/BUILD b/pkg/proxy/iptables/BUILD index ed39d5e5ce..cc0ef13039 100644 --- a/pkg/proxy/iptables/BUILD +++ b/pkg/proxy/iptables/BUILD @@ -9,7 +9,6 @@ load( go_library( name = "go_default_library", srcs = [ - "metrics.go", "proxier.go", ], importpath = "k8s.io/kubernetes/pkg/proxy/iptables", @@ -20,13 +19,13 @@ go_library( "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", + "//pkg/proxy/metrics:go_default_library", "//pkg/proxy/util:go_default_library", "//pkg/util/async:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/sysctl:go_default_library", "//pkg/util/version:go_default_library", "//vendor/github.com/golang/glog:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 23920a55cb..56ef7cb6bb 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -47,6 +47,7 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" + "k8s.io/kubernetes/pkg/proxy/metrics" utilproxy "k8s.io/kubernetes/pkg/proxy/util" "k8s.io/kubernetes/pkg/util/async" utiliptables "k8s.io/kubernetes/pkg/util/iptables" @@ -954,7 +955,7 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { - SyncProxyRulesLatency.Observe(sinceInMicroseconds(start)) + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) glog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints diff --git a/pkg/proxy/ipvs/BUILD b/pkg/proxy/ipvs/BUILD index 18c63568d5..95e8c9fe8b 100644 --- a/pkg/proxy/ipvs/BUILD +++ b/pkg/proxy/ipvs/BUILD @@ -50,6 +50,7 @@ go_library( "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", + "//pkg/proxy/metrics:go_default_library", "//pkg/proxy/util:go_default_library", "//pkg/util/async:go_default_library", "//pkg/util/iptables:go_default_library", diff --git a/pkg/proxy/ipvs/proxier.go b/pkg/proxy/ipvs/proxier.go index 60a04eb133..1d3da2f1f7 100644 --- a/pkg/proxy/ipvs/proxier.go +++ b/pkg/proxy/ipvs/proxier.go @@ -46,6 +46,7 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" + "k8s.io/kubernetes/pkg/proxy/metrics" utilproxy "k8s.io/kubernetes/pkg/proxy/util" "k8s.io/kubernetes/pkg/util/async" utiliptables "k8s.io/kubernetes/pkg/util/iptables" @@ -868,6 +869,7 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) glog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints diff --git a/pkg/proxy/metrics/BUILD b/pkg/proxy/metrics/BUILD new file mode 100644 index 0000000000..f316691515 --- /dev/null +++ b/pkg/proxy/metrics/BUILD @@ -0,0 +1,23 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_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"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/proxy/iptables/metrics.go b/pkg/proxy/metrics/metrics.go similarity index 80% rename from pkg/proxy/iptables/metrics.go rename to pkg/proxy/metrics/metrics.go index fabe6a5956..d442f2da32 100644 --- a/pkg/proxy/iptables/metrics.go +++ b/pkg/proxy/metrics/metrics.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package iptables +package metrics import ( "sync" @@ -26,6 +26,7 @@ import ( const kubeProxySubsystem = "kubeproxy" var ( + // SyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. SyncProxyRulesLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: kubeProxySubsystem, @@ -38,13 +39,14 @@ var ( var registerMetricsOnce sync.Once +// RegisterMetrics registers sync proxy rules latency metrics func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) }) } -// Gets the time since the specified start in microseconds. -func sinceInMicroseconds(start time.Time) float64 { +// SinceInMicroseconds gets the time since the specified start in microseconds. +func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) }