Merge pull request #31783 from dominikschulz/cleanmetrics

Automatic merge from submit-queue (batch tested with PRs 31783, 41988, 42535, 42572, 41870)

Clean user agent to reduce metrics cardinality

**What this PR does / why we need it**:

This PR is an example implementation for my issue #31781.

``` release-note
```

This commit cleans common browser user-agents to reduce the metrics
cardinality in exported prometheus metrics.

Resolves kubernetes/kubernetes#31781
This commit is contained in:
Kubernetes Submit Queue 2017-03-06 11:30:12 -08:00 committed by GitHub
commit 69019e3051
3 changed files with 54 additions and 1 deletions

View File

@ -104,10 +104,17 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction)
if verb == "LIST" && strings.ToLower(request.QueryParameter("watch")) == "true" {
verb = "WATCH"
}
Monitor(&verb, &resource, utilnet.GetHTTPClient(request.Request), rw.Header().Get("Content-Type"), delegate.status, now)
Monitor(&verb, &resource, cleanUserAgent(utilnet.GetHTTPClient(request.Request)), rw.Header().Get("Content-Type"), delegate.status, now)
})
}
func cleanUserAgent(ua string) string {
if strings.HasPrefix(ua, "Mozilla/") {
return "Browser"
}
return ua
}
type responseWriterDelegator struct {
http.ResponseWriter

View File

@ -0,0 +1,39 @@
/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package metrics
import "testing"
func TestCleanUserAgent(t *testing.T) {
for _, tc := range []struct {
In string
Out string
}{
{
In: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
Out: "Browser",
},
{
In: "kubectl/v1.2.4",
Out: "kubectl/v1.2.4",
},
} {
if cleanUserAgent(tc.In) != tc.Out {
t.Errorf("Failed to clean User-Agent: %s", tc.In)
}
}
}

7
vendor/BUILD vendored
View File

@ -16253,6 +16253,13 @@ go_library(
tags = ["automanaged"],
)
go_test(
name = "k8s.io/apiserver/pkg/endpoints/metrics_test",
srcs = ["k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go"],
library = ":k8s.io/apiserver/pkg/endpoints/metrics",
tags = ["automanaged"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),