From 4af189aab9cca61d1a701133596f6f82b1ca0719 Mon Sep 17 00:00:00 2001 From: Maciej Borsz Date: Tue, 23 Jul 2019 12:55:11 +0200 Subject: [PATCH] Add 'apiserver_watch_events_sizes'. That metric can be used to estimate the size of watch events sent out to the clients. --- .../src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go | 1 + .../k8s.io/apiserver/pkg/endpoints/metrics/metrics.go | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go index 5aa9272a3a12..be670fdc280e 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/watch.go @@ -238,6 +238,7 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { // type unknown.Raw = buf.Bytes() event.Object = &unknown + metrics.WatchEventsSizes.WithLabelValues(kind.Group, kind.Version, kind.Kind).Observe(float64(len(unknown.Raw))) *outEvent = metav1.WatchEvent{} diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go index 36b4df510cc5..bec2e3e6b190 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go @@ -148,6 +148,14 @@ var ( }, []string{"group", "version", "kind"}, ) + WatchEventsSizes = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "apiserver_watch_events_sizes", + Help: "Watch event size distribution in bytes", + Buckets: prometheus.ExponentialBuckets(1024, 2.0, 8), // 1K, 2K, 4K, 8K, ..., 128K. + }, + []string{"group", "version", "kind"}, + ) // Because of volatality of the base metric this is pre-aggregated one. Instead of reporing current usage all the time // it reports maximal usage during the last second. currentInflightRequests = prometheus.NewGaugeVec( @@ -171,6 +179,7 @@ var ( DeprecatedDroppedRequests, RegisteredWatchers, WatchEvents, + WatchEventsSizes, currentInflightRequests, } )