Skip to content

Commit d86823d

Browse files
stttssoltysh
authored andcommitted
UPSTREAM: <carry>: apiserver: add system_client=kube-{apiserver,cm,s} to apiserver_request_total
UPSTREAM: <carry>: apiserver: add cluster-policy-controller to system client in apiserver_request_total openshift-rebase(v1.24):source=7fd9897d2cb
1 parent d69d054 commit d86823d

File tree

5 files changed

+34
-27
lines changed

5 files changed

+34
-27
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"k8s.io/apimachinery/pkg/types"
3131
utilsets "k8s.io/apimachinery/pkg/util/sets"
3232
"k8s.io/apiserver/pkg/audit"
33-
"k8s.io/apiserver/pkg/authentication/user"
3433
"k8s.io/apiserver/pkg/endpoints/request"
3534
"k8s.io/apiserver/pkg/endpoints/responsewriter"
3635
"k8s.io/apiserver/pkg/features"
@@ -77,7 +76,7 @@ var (
7776
Help: "Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.",
7877
StabilityLevel: compbasemetrics.STABLE,
7978
},
80-
[]string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component", "code"},
79+
[]string{"verb", "dry_run", "group", "version", "resource", "subresource", "scope", "component", "code", "system_client"},
8180
)
8281
longRunningRequestsGauge = compbasemetrics.NewGaugeVec(
8382
&compbasemetrics.GaugeOpts{
@@ -418,9 +417,9 @@ func RecordDroppedRequest(req *http.Request, requestInfo *request.RequestInfo, c
418417
reportedVerb := cleanVerb(CanonicalVerb(strings.ToUpper(req.Method), scope), getVerbIfWatch(req), req)
419418

420419
if requestInfo.IsResourceRequest {
421-
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, codeToString(http.StatusTooManyRequests)).Inc()
420+
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, requestInfo.APIGroup, requestInfo.APIVersion, requestInfo.Resource, requestInfo.Subresource, scope, component, codeToString(http.StatusTooManyRequests), "").Inc()
422421
} else {
423-
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, "", "", "", requestInfo.Subresource, scope, component, codeToString(http.StatusTooManyRequests)).Inc()
422+
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, "", "", "", requestInfo.Subresource, scope, component, codeToString(http.StatusTooManyRequests), "").Inc()
424423
}
425424
}
426425

@@ -483,12 +482,19 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour
483482

484483
dryRun := cleanDryRun(req.URL)
485484
elapsedSeconds := elapsed.Seconds()
486-
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, group, version, resource, subresource, scope, component, codeToString(httpCode)).Inc()
487-
// MonitorRequest happens after authentication, so we can trust the username given by the request
488-
info, ok := request.UserFrom(req.Context())
489-
if ok && info.GetName() == user.APIServerUser {
490-
apiSelfRequestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, resource, subresource).Inc()
485+
486+
systemClient := ""
487+
if uas := strings.SplitN(req.UserAgent(), "/", 2); len(uas) > 1 {
488+
switch uas[0] {
489+
case "kube-apiserver":
490+
apiSelfRequestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, resource, subresource).Inc()
491+
fallthrough
492+
case "kube-controller-manager", "kube-scheduler", "cluster-policy-controller":
493+
systemClient = uas[0]
494+
}
491495
}
496+
requestCounter.WithContext(req.Context()).WithLabelValues(reportedVerb, dryRun, group, version, resource, subresource, scope, component, codeToString(httpCode), systemClient).Inc()
497+
492498
if deprecated {
493499
deprecatedRequestGauge.WithContext(req.Context()).WithLabelValues(group, version, resource, subresource, removedRelease).Set(1)
494500
audit.AddAuditAnnotation(req.Context(), deprecatedAnnotationKey, "true")

staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ func TestRecordDroppedRequests(t *testing.T) {
311311
want: `
312312
# HELP apiserver_request_total [STABLE] Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.
313313
# TYPE apiserver_request_total counter
314-
apiserver_request_total{code="429",component="apiserver",dry_run="",group="",resource="pods",scope="cluster",subresource="",verb="LIST",version="v1"} 1
314+
apiserver_request_total{code="429",component="apiserver",dry_run="",group="",resource="pods",scope="cluster",subresource="",system_client="",verb="LIST",version="v1"} 1
315315
`,
316316
},
317317
{
@@ -333,7 +333,7 @@ func TestRecordDroppedRequests(t *testing.T) {
333333
want: `
334334
# HELP apiserver_request_total [STABLE] Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.
335335
# TYPE apiserver_request_total counter
336-
apiserver_request_total{code="429",component="apiserver",dry_run="",group="",resource="pods",scope="resource",subresource="",verb="POST",version="v1"} 1
336+
apiserver_request_total{code="429",component="apiserver",dry_run="",group="",resource="pods",scope="resource",subresource="",system_client="",verb="POST",version="v1"} 1
337337
`,
338338
},
339339
{
@@ -358,7 +358,7 @@ func TestRecordDroppedRequests(t *testing.T) {
358358
want: `
359359
# HELP apiserver_request_total [STABLE] Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.
360360
# TYPE apiserver_request_total counter
361-
apiserver_request_total{code="429",component="apiserver",dry_run="All",group="batch",resource="jobs",scope="resource",subresource="status",verb="PATCH",version="v1"} 1
361+
apiserver_request_total{code="429",component="apiserver",dry_run="All",group="batch",resource="jobs",scope="resource",subresource="status",system_client="",verb="PATCH",version="v1"} 1
362362
`,
363363
},
364364
}

staging/src/k8s.io/apiserver/pkg/server/healthz/healthz_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,9 @@ func TestMetrics(t *testing.T) {
255255
expected := strings.NewReader(`
256256
# HELP apiserver_request_total [STABLE] Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.
257257
# TYPE apiserver_request_total counter
258-
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/healthz",verb="GET",version=""} 1
259-
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/livez",verb="GET",version=""} 1
260-
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/readyz",verb="GET",version=""} 1
258+
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/healthz",system_client="",verb="GET",version=""} 1
259+
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/livez",system_client="",verb="GET",version=""} 1
260+
apiserver_request_total{code="200",component="",dry_run="",group="",resource="",scope="",subresource="/readyz",system_client="",verb="GET",version=""} 1
261261
`)
262262
if err := testutil.GatherAndCompare(legacyregistry.DefaultGatherer, expected, "apiserver_request_total"); err != nil {
263263
t.Error(err)

test/instrumentation/testdata/stable-metrics-list.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@
266266
- resource
267267
- scope
268268
- subresource
269+
- system_client
269270
- verb
270271
- version
271272
- name: apiserver_requested_deprecated_apis

test/integration/metrics/metrics_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -282,42 +282,42 @@ func TestAPIServerMetricsPods(t *testing.T) {
282282
executor: func() {
283283
callOrDie(c.Create(context.TODO(), makePod("foo"), metav1.CreateOptions{}))
284284
},
285-
want: `apiserver_request_total{code="201", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", verb="POST", version="v1"}`,
285+
want: `apiserver_request_total{code="201", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", system_client="", verb="POST", version="v1"}`,
286286
},
287287
{
288288
name: "update pod",
289289
executor: func() {
290290
callOrDie(c.Update(context.TODO(), makePod("bar"), metav1.UpdateOptions{}))
291291
},
292-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", verb="PUT", version="v1"}`,
292+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", system_client="", verb="PUT", version="v1"}`,
293293
},
294294
{
295295
name: "update pod status",
296296
executor: func() {
297297
callOrDie(c.UpdateStatus(context.TODO(), makePod("bar"), metav1.UpdateOptions{}))
298298
},
299-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="status", verb="PUT", version="v1"}`,
299+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="status", system_client="", verb="PUT", version="v1"}`,
300300
},
301301
{
302302
name: "get pod",
303303
executor: func() {
304304
callOrDie(c.Get(context.TODO(), "foo", metav1.GetOptions{}))
305305
},
306-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", verb="GET", version="v1"}`,
306+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", system_client="", verb="GET", version="v1"}`,
307307
},
308308
{
309309
name: "list pod",
310310
executor: func() {
311311
callOrDie(c.List(context.TODO(), metav1.ListOptions{}))
312312
},
313-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="namespace", subresource="", verb="LIST", version="v1"}`,
313+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="namespace", subresource="", system_client="", verb="LIST", version="v1"}`,
314314
},
315315
{
316316
name: "delete pod",
317317
executor: func() {
318318
callOrDie(nil, c.Delete(context.TODO(), "foo", metav1.DeleteOptions{}))
319319
},
320-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", verb="DELETE", version="v1"}`,
320+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="pods", scope="resource", subresource="", system_client="", verb="DELETE", version="v1"}`,
321321
},
322322
} {
323323
t.Run(tc.name, func(t *testing.T) {
@@ -390,42 +390,42 @@ func TestAPIServerMetricsNamespaces(t *testing.T) {
390390
executor: func() {
391391
callOrDie(c.Create(context.TODO(), makeNamespace("foo"), metav1.CreateOptions{}))
392392
},
393-
want: `apiserver_request_total{code="201", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", verb="POST", version="v1"}`,
393+
want: `apiserver_request_total{code="201", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", system_client="", verb="POST", version="v1"}`,
394394
},
395395
{
396396
name: "update namespace",
397397
executor: func() {
398398
callOrDie(c.Update(context.TODO(), makeNamespace("bar"), metav1.UpdateOptions{}))
399399
},
400-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", verb="PUT", version="v1"}`,
400+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", system_client="", verb="PUT", version="v1"}`,
401401
},
402402
{
403403
name: "update namespace status",
404404
executor: func() {
405405
callOrDie(c.UpdateStatus(context.TODO(), makeNamespace("bar"), metav1.UpdateOptions{}))
406406
},
407-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="status", verb="PUT", version="v1"}`,
407+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="status", system_client="", verb="PUT", version="v1"}`,
408408
},
409409
{
410410
name: "get namespace",
411411
executor: func() {
412412
callOrDie(c.Get(context.TODO(), "foo", metav1.GetOptions{}))
413413
},
414-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", verb="GET", version="v1"}`,
414+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", system_client="", verb="GET", version="v1"}`,
415415
},
416416
{
417417
name: "list namespace",
418418
executor: func() {
419419
callOrDie(c.List(context.TODO(), metav1.ListOptions{}))
420420
},
421-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="cluster", subresource="", verb="LIST", version="v1"}`,
421+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="cluster", subresource="", system_client="", verb="LIST", version="v1"}`,
422422
},
423423
{
424424
name: "delete namespace",
425425
executor: func() {
426426
callOrDie(nil, c.Delete(context.TODO(), "foo", metav1.DeleteOptions{}))
427427
},
428-
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", verb="DELETE", version="v1"}`,
428+
want: `apiserver_request_total{code="200", component="apiserver", dry_run="", group="", resource="namespaces", scope="resource", subresource="", system_client="", verb="DELETE", version="v1"}`,
429429
},
430430
} {
431431
t.Run(tc.name, func(t *testing.T) {

0 commit comments

Comments
 (0)