Skip to content

Commit 282ceef

Browse files
authored
Merge pull request kubernetes#94288 from LogicalShark/apiserver-selfreq
API server self request metric
2 parents 90be932 + 6f85e5c commit 282ceef

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ go_library(
1616
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
1717
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
1818
"//staging/src/k8s.io/apiserver/pkg/audit:go_default_library",
19+
"//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library",
1920
"//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
2021
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
2122
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"k8s.io/apimachinery/pkg/types"
3333
utilsets "k8s.io/apimachinery/pkg/util/sets"
3434
"k8s.io/apiserver/pkg/audit"
35+
"k8s.io/apiserver/pkg/authentication/user"
3536
"k8s.io/apiserver/pkg/endpoints/request"
3637
"k8s.io/apiserver/pkg/features"
3738
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -185,6 +186,16 @@ var (
185186
},
186187
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component", "code"},
187188
)
189+
190+
apiSelfRequestCounter = compbasemetrics.NewCounterVec(
191+
&compbasemetrics.CounterOpts{
192+
Name: "apiserver_selfrequest_total",
193+
Help: "Counter of apiserver self-requests broken out for each verb, API resource and subresource.",
194+
StabilityLevel: compbasemetrics.ALPHA,
195+
},
196+
[]string{"verb", "resource", "subresource"},
197+
)
198+
188199
kubectlExeRegexp = regexp.MustCompile(`^.*((?i:kubectl\.exe))`)
189200

190201
metrics = []resettableCollector{
@@ -201,6 +212,7 @@ var (
201212
currentInflightRequests,
202213
currentInqueueRequests,
203214
requestTerminationsTotal,
215+
apiSelfRequestCounter,
204216
}
205217

206218
// these are the known (e.g. whitelisted/known) content types which we will report for
@@ -351,6 +363,11 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour
351363
elapsedSeconds := elapsed.Seconds()
352364
cleanContentType := cleanContentType(contentType)
353365
requestCounter.WithLabelValues(reportedVerb, dryRun, group, version, resource, subresource, scope, component, cleanContentType, codeToString(httpCode)).Inc()
366+
// MonitorRequest happens after authentication, so we can trust the username given by the request
367+
info, ok := request.UserFrom(req.Context())
368+
if ok && info.GetName() == user.APIServerUser {
369+
apiSelfRequestCounter.WithLabelValues(reportedVerb, resource, subresource).Inc()
370+
}
354371
if deprecated {
355372
deprecatedRequestGauge.WithLabelValues(group, version, resource, subresource, removedRelease).Set(1)
356373
audit.AddAuditAnnotation(req.Context(), deprecatedAnnotationKey, "true")

0 commit comments

Comments
 (0)