mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Change endpoints metrics to conform guideline
This commit is contained in:
parent
47938c3733
commit
88c4b64400
@ -48,6 +48,13 @@ var (
|
|||||||
// TODO(a-robinson): Add unit tests for the handling of these metrics once
|
// TODO(a-robinson): Add unit tests for the handling of these metrics once
|
||||||
// the upstream library supports it.
|
// the upstream library supports it.
|
||||||
requestCounter = prometheus.NewCounterVec(
|
requestCounter = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: "apiserver_request_total",
|
||||||
|
Help: "Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.",
|
||||||
|
},
|
||||||
|
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component", "client", "contentType", "code"},
|
||||||
|
)
|
||||||
|
deprecatedRequestCounter = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "apiserver_request_count",
|
Name: "apiserver_request_count",
|
||||||
Help: "Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.",
|
Help: "Counter of apiserver requests broken out for each verb, group, version, resource, scope, component, client, and HTTP response contentType and code.",
|
||||||
@ -62,6 +69,25 @@ var (
|
|||||||
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
||||||
)
|
)
|
||||||
requestLatencies = prometheus.NewHistogramVec(
|
requestLatencies = prometheus.NewHistogramVec(
|
||||||
|
prometheus.HistogramOpts{
|
||||||
|
Name: "apiserver_request_latency_seconds",
|
||||||
|
Help: "Response latency distribution in seconds for each verb, group, version, resource, subresource, scope and component.",
|
||||||
|
// Use buckets ranging from 125 ms to 8 seconds.
|
||||||
|
Buckets: prometheus.ExponentialBuckets(0.125, 2.0, 7),
|
||||||
|
},
|
||||||
|
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
||||||
|
)
|
||||||
|
requestLatenciesSummary = prometheus.NewSummaryVec(
|
||||||
|
prometheus.SummaryOpts{
|
||||||
|
Name: "apiserver_request_latency_seconds_summary",
|
||||||
|
Help: "Response latency summary in seconds for each verb, group, version, resource, subresource, scope and component.",
|
||||||
|
// Make the sliding window of 5h.
|
||||||
|
// TODO: The value for this should be based on our SLI definition (medium term).
|
||||||
|
MaxAge: 5 * time.Hour,
|
||||||
|
},
|
||||||
|
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
||||||
|
)
|
||||||
|
deprecatedRequestLatencies = prometheus.NewHistogramVec(
|
||||||
prometheus.HistogramOpts{
|
prometheus.HistogramOpts{
|
||||||
Name: "apiserver_request_latencies",
|
Name: "apiserver_request_latencies",
|
||||||
Help: "Response latency distribution in microseconds for each verb, group, version, resource, subresource, scope and component.",
|
Help: "Response latency distribution in microseconds for each verb, group, version, resource, subresource, scope and component.",
|
||||||
@ -70,7 +96,7 @@ var (
|
|||||||
},
|
},
|
||||||
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
[]string{"verb", "group", "version", "resource", "subresource", "scope", "component"},
|
||||||
)
|
)
|
||||||
requestLatenciesSummary = prometheus.NewSummaryVec(
|
deprecatedRequestLatenciesSummary = prometheus.NewSummaryVec(
|
||||||
prometheus.SummaryOpts{
|
prometheus.SummaryOpts{
|
||||||
Name: "apiserver_request_latencies_summary",
|
Name: "apiserver_request_latencies_summary",
|
||||||
Help: "Response latency summary in microseconds for each verb, group, version, resource, subresource, scope and component.",
|
Help: "Response latency summary in microseconds for each verb, group, version, resource, subresource, scope and component.",
|
||||||
@ -91,6 +117,13 @@ var (
|
|||||||
)
|
)
|
||||||
// DroppedRequests is a number of requests dropped with 'Try again later' response"
|
// DroppedRequests is a number of requests dropped with 'Try again later' response"
|
||||||
DroppedRequests = prometheus.NewCounterVec(
|
DroppedRequests = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Name: "apiserver_dropped_requests_total",
|
||||||
|
Help: "Number of requests dropped with 'Try again later' response",
|
||||||
|
},
|
||||||
|
[]string{"requestKind"},
|
||||||
|
)
|
||||||
|
DeprecatedDroppedRequests = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "apiserver_dropped_requests",
|
Name: "apiserver_dropped_requests",
|
||||||
Help: "Number of requests dropped with 'Try again later' response",
|
Help: "Number of requests dropped with 'Try again later' response",
|
||||||
@ -118,11 +151,15 @@ var (
|
|||||||
|
|
||||||
metrics = []resettableCollector{
|
metrics = []resettableCollector{
|
||||||
requestCounter,
|
requestCounter,
|
||||||
|
deprecatedRequestCounter,
|
||||||
longRunningRequestGauge,
|
longRunningRequestGauge,
|
||||||
requestLatencies,
|
requestLatencies,
|
||||||
requestLatenciesSummary,
|
requestLatenciesSummary,
|
||||||
|
deprecatedRequestLatencies,
|
||||||
|
deprecatedRequestLatenciesSummary,
|
||||||
responseSizes,
|
responseSizes,
|
||||||
DroppedRequests,
|
DroppedRequests,
|
||||||
|
DeprecatedDroppedRequests,
|
||||||
RegisteredWatchers,
|
RegisteredWatchers,
|
||||||
currentInflightRequests,
|
currentInflightRequests,
|
||||||
}
|
}
|
||||||
@ -198,9 +235,13 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour
|
|||||||
reportedVerb := cleanVerb(verb, req)
|
reportedVerb := cleanVerb(verb, req)
|
||||||
client := cleanUserAgent(utilnet.GetHTTPClient(req))
|
client := cleanUserAgent(utilnet.GetHTTPClient(req))
|
||||||
elapsedMicroseconds := float64(elapsed / time.Microsecond)
|
elapsedMicroseconds := float64(elapsed / time.Microsecond)
|
||||||
|
elapsedSeconds := elapsed.Seconds()
|
||||||
requestCounter.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component, client, contentType, codeToString(httpCode)).Inc()
|
requestCounter.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component, client, contentType, codeToString(httpCode)).Inc()
|
||||||
requestLatencies.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
|
deprecatedRequestCounter.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component, client, contentType, codeToString(httpCode)).Inc()
|
||||||
requestLatenciesSummary.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
|
requestLatencies.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedSeconds)
|
||||||
|
deprecatedRequestLatencies.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
|
||||||
|
requestLatenciesSummary.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedSeconds)
|
||||||
|
deprecatedRequestLatenciesSummary.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
|
||||||
// We are only interested in response sizes of read requests.
|
// We are only interested in response sizes of read requests.
|
||||||
if verb == "GET" || verb == "LIST" {
|
if verb == "GET" || verb == "LIST" {
|
||||||
responseSizes.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(float64(respSize))
|
responseSizes.WithLabelValues(reportedVerb, group, version, resource, subresource, scope, component).Observe(float64(respSize))
|
||||||
|
@ -163,8 +163,10 @@ func WithMaxInFlightLimit(
|
|||||||
// We need to split this data between buckets used for throttling.
|
// We need to split this data between buckets used for throttling.
|
||||||
if isMutatingRequest {
|
if isMutatingRequest {
|
||||||
metrics.DroppedRequests.WithLabelValues(metrics.MutatingKind).Inc()
|
metrics.DroppedRequests.WithLabelValues(metrics.MutatingKind).Inc()
|
||||||
|
metrics.DeprecatedDroppedRequests.WithLabelValues(metrics.MutatingKind).Inc()
|
||||||
} else {
|
} else {
|
||||||
metrics.DroppedRequests.WithLabelValues(metrics.ReadOnlyKind).Inc()
|
metrics.DroppedRequests.WithLabelValues(metrics.ReadOnlyKind).Inc()
|
||||||
|
metrics.DeprecatedDroppedRequests.WithLabelValues(metrics.ReadOnlyKind).Inc()
|
||||||
}
|
}
|
||||||
// at this point we're about to return a 429, BUT not all actors should be rate limited. A system:master is so powerful
|
// at this point we're about to return a 429, BUT not all actors should be rate limited. A system:master is so powerful
|
||||||
// that they should always get an answer. It's a super-admin or a loopback connection.
|
// that they should always get an answer. It's a super-admin or a loopback connection.
|
||||||
|
Loading…
Reference in New Issue
Block a user