Clean user agent

This commit cleans common browser user-agents to reduce the metrics
cardinality in exported prometheus metrics.
This commit is contained in:
Dominik Schulz 2017-02-03 20:37:20 +01:00
parent df70b30e59
commit b5c89a8be6
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

@ -16250,6 +16250,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(["**"]),