diff --git a/pkg/apiserver/metrics/metrics.go b/pkg/apiserver/metrics/metrics.go index fb7736b0678..dc7fe7009ae 100644 --- a/pkg/apiserver/metrics/metrics.go +++ b/pkg/apiserver/metrics/metrics.go @@ -35,9 +35,9 @@ var ( requestCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "apiserver_request_count", - Help: "Counter of apiserver requests broken out for each verb, API resource, client, and HTTP response code.", + Help: "Counter of apiserver requests broken out for each verb, API resource, client, and HTTP response contentType and code.", }, - []string{"verb", "resource", "client", "code"}, + []string{"verb", "resource", "client", "contentType", "code"}, ) requestLatencies = prometheus.NewHistogramVec( prometheus.HistogramOpts{ @@ -66,9 +66,9 @@ func Register() { prometheus.MustRegister(requestLatenciesSummary) } -func Monitor(verb, resource *string, client string, httpCode int, reqStart time.Time) { +func Monitor(verb, resource *string, client, contentType string, httpCode int, reqStart time.Time) { elapsed := float64((time.Since(reqStart)) / time.Microsecond) - requestCounter.WithLabelValues(*verb, *resource, client, codeToString(httpCode)).Inc() + requestCounter.WithLabelValues(*verb, *resource, client, contentType, codeToString(httpCode)).Inc() requestLatencies.WithLabelValues(*verb, *resource).Observe(elapsed) requestLatenciesSummary.WithLabelValues(*verb, *resource).Observe(elapsed) } @@ -99,7 +99,7 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction) response.ResponseWriter = rw routeFunc(request, response) - Monitor(&verb, &resource, utilnet.GetHTTPClient(request.Request), delegate.status, now) + Monitor(&verb, &resource, utilnet.GetHTTPClient(request.Request), rw.Header().Get("Content-Type"), delegate.status, now) }) } diff --git a/pkg/apiserver/proxy.go b/pkg/apiserver/proxy.go index 5c581032bec..4b3d00d77de 100644 --- a/pkg/apiserver/proxy.go +++ b/pkg/apiserver/proxy.go @@ -57,7 +57,7 @@ func (r *ProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { var apiResource string var httpCode int reqStart := time.Now() - defer metrics.Monitor(&verb, &apiResource, net.GetHTTPClient(req), httpCode, reqStart) + defer metrics.Monitor(&verb, &apiResource, net.GetHTTPClient(req), w.Header().Get("Content-Type"), httpCode, reqStart) requestInfo, err := r.requestInfoResolver.GetRequestInfo(req) if err != nil || !requestInfo.IsResourceRequest { diff --git a/pkg/client/typed/dynamic/client_pool.go b/pkg/client/typed/dynamic/client_pool.go index 4bdd3ecabb7..f7c6505fd77 100644 --- a/pkg/client/typed/dynamic/client_pool.go +++ b/pkg/client/typed/dynamic/client_pool.go @@ -50,8 +50,9 @@ type clientPoolImpl struct { // NewClientPool returns a ClientPool from the specified config func NewClientPool(config *restclient.Config, apiPathResolverFunc APIPathResolverFunc) ClientPool { + confCopy := *config return &clientPoolImpl{ - config: config, + config: &confCopy, clients: map[unversioned.GroupVersion]*Client{}, apiPathResolverFunc: apiPathResolverFunc, } diff --git a/pkg/metrics/api_server_metrics.go b/pkg/metrics/api_server_metrics.go index e905ab4b94c..952572ae697 100644 --- a/pkg/metrics/api_server_metrics.go +++ b/pkg/metrics/api_server_metrics.go @@ -23,7 +23,7 @@ import ( ) var KnownApiServerMetrics = map[string][]string{ - "apiserver_request_count": {"verb", "resource", "client", "code"}, + "apiserver_request_count": {"verb", "resource", "client", "contentType", "code"}, "apiserver_request_latencies_bucket": {"verb", "resource", "le"}, "apiserver_request_latencies_count": {"verb", "resource"}, "apiserver_request_latencies_sum": {"verb", "resource"},