mirror of https://github.com/k3s-io/k3s
Add request count to APICall metric
parent
3e05c8f87f
commit
d77378a688
|
@ -167,6 +167,7 @@ type APICall struct {
|
|||
Resource string `json:"resource"`
|
||||
Verb string `json:"verb"`
|
||||
Latency LatencyMetric `json:"latency"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type APIResponsiveness struct {
|
||||
|
@ -179,9 +180,10 @@ func (a APIResponsiveness) Less(i, j int) bool {
|
|||
return a.APICalls[i].Latency.Perc99 < a.APICalls[j].Latency.Perc99
|
||||
}
|
||||
|
||||
// Set request latency for a particular quantile in the APICall metric entry (creating one if necessary).
|
||||
// 0 <= quantile <=1 (e.g. 0.95 is 95%tile, 0.5 is median)
|
||||
// Only 0.5, 0.9 and 0.99 quantiles are supported.
|
||||
func (a *APIResponsiveness) addMetric(resource, verb string, quantile float64, latency time.Duration) {
|
||||
func (a *APIResponsiveness) addMetricRequestLatency(resource, verb string, quantile float64, latency time.Duration) {
|
||||
for i, apicall := range a.APICalls {
|
||||
if apicall.Resource == resource && apicall.Verb == verb {
|
||||
a.APICalls[i] = setQuantileAPICall(apicall, quantile, latency)
|
||||
|
@ -211,6 +213,18 @@ func setQuantile(metric *LatencyMetric, quantile float64, latency time.Duration)
|
|||
}
|
||||
}
|
||||
|
||||
// Add request count to the APICall metric entry (creating one if necessary).
|
||||
func (a *APIResponsiveness) addMetricRequestCount(resource, verb string, count int) {
|
||||
for i, apicall := range a.APICalls {
|
||||
if apicall.Resource == resource && apicall.Verb == verb {
|
||||
a.APICalls[i].Count += count
|
||||
return
|
||||
}
|
||||
}
|
||||
apicall := APICall{Resource: resource, Verb: verb, Count: count}
|
||||
a.APICalls = append(a.APICalls, apicall)
|
||||
}
|
||||
|
||||
func readLatencyMetrics(c clientset.Interface) (APIResponsiveness, error) {
|
||||
var a APIResponsiveness
|
||||
|
||||
|
@ -231,7 +245,9 @@ func readLatencyMetrics(c clientset.Interface) (APIResponsiveness, error) {
|
|||
for _, sample := range samples {
|
||||
// Example line:
|
||||
// apiserver_request_latencies_summary{resource="namespaces",verb="LIST",quantile="0.99"} 908
|
||||
if sample.Metric[model.MetricNameLabel] != "apiserver_request_latencies_summary" {
|
||||
// apiserver_request_count{resource="pods",verb="LIST",client="kubectl",code="200",contentType="json"} 233
|
||||
if sample.Metric[model.MetricNameLabel] != "apiserver_request_latencies_summary" &&
|
||||
sample.Metric[model.MetricNameLabel] != "apiserver_request_count" {
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -240,12 +256,20 @@ func readLatencyMetrics(c clientset.Interface) (APIResponsiveness, error) {
|
|||
if ignoredResources.Has(resource) || ignoredVerbs.Has(verb) {
|
||||
continue
|
||||
}
|
||||
|
||||
switch sample.Metric[model.MetricNameLabel] {
|
||||
case "apiserver_request_latencies_summary":
|
||||
latency := sample.Value
|
||||
quantile, err := strconv.ParseFloat(string(sample.Metric[model.QuantileLabel]), 64)
|
||||
if err != nil {
|
||||
return a, err
|
||||
}
|
||||
a.addMetric(resource, verb, quantile, time.Duration(int64(latency))*time.Microsecond)
|
||||
a.addMetricRequestLatency(resource, verb, quantile, time.Duration(int64(latency))*time.Microsecond)
|
||||
case "apiserver_request_count":
|
||||
count := sample.Value
|
||||
a.addMetricRequestCount(resource, verb, int(count))
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return a, err
|
||||
|
|
Loading…
Reference in New Issue