Clean user agent

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

Kubernetes-commit: b5c89a8be68e031e12d6750ed6cc470de4cc3fdf
This commit is contained in:
Dominik Schulz 2017-02-03 20:37:20 +01:00 committed by Kubernetes Publisher
parent 7306f452f2
commit 37527becd4
2 changed files with 47 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)
}
}
}