Commit b5c89a8b authored by Dominik Schulz's avatar Dominik Schulz

Clean user agent

This commit cleans common browser user-agents to reduce the metrics cardinality in exported prometheus metrics.
parent df70b30e
...@@ -104,10 +104,17 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction) ...@@ -104,10 +104,17 @@ func InstrumentRouteFunc(verb, resource string, routeFunc restful.RouteFunction)
if verb == "LIST" && strings.ToLower(request.QueryParameter("watch")) == "true" { if verb == "LIST" && strings.ToLower(request.QueryParameter("watch")) == "true" {
verb = "WATCH" 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 { type responseWriterDelegator struct {
http.ResponseWriter http.ResponseWriter
......
/*
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)
}
}
}
...@@ -16250,6 +16250,13 @@ go_library( ...@@ -16250,6 +16250,13 @@ go_library(
tags = ["automanaged"], 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( filegroup(
name = "package-srcs", name = "package-srcs",
srcs = glob(["**"]), srcs = glob(["**"]),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment