mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 10:20:51 +00:00
Merge pull request #113148 from logicalhan/merge-buckets
move MergeBuckets into component-base so we can properly support it for static-analysis
This commit is contained in:
commit
7dee7c8a6f
@ -43,6 +43,7 @@ allowed_prometheus_importers=(
|
|||||||
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram.go
|
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram.go
|
||||||
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram_test.go
|
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram_test.go
|
||||||
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram_vec.go
|
./staging/src/k8s.io/component-base/metrics/prometheusextension/weighted_histogram_vec.go
|
||||||
|
./staging/src/k8s.io/component-base/metrics/buckets.go
|
||||||
./staging/src/k8s.io/component-base/metrics/collector.go
|
./staging/src/k8s.io/component-base/metrics/collector.go
|
||||||
./staging/src/k8s.io/component-base/metrics/collector_test.go
|
./staging/src/k8s.io/component-base/metrics/collector_test.go
|
||||||
./staging/src/k8s.io/component-base/metrics/counter.go
|
./staging/src/k8s.io/component-base/metrics/counter.go
|
||||||
|
43
staging/src/k8s.io/component-base/metrics/buckets.go
Normal file
43
staging/src/k8s.io/component-base/metrics/buckets.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 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 (
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DefBuckets is a wrapper for prometheus.DefBuckets
|
||||||
|
var DefBuckets = prometheus.DefBuckets
|
||||||
|
|
||||||
|
// LinearBuckets is a wrapper for prometheus.LinearBuckets.
|
||||||
|
func LinearBuckets(start, width float64, count int) []float64 {
|
||||||
|
return prometheus.LinearBuckets(start, width, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExponentialBuckets is a wrapper for prometheus.ExponentialBuckets.
|
||||||
|
func ExponentialBuckets(start, factor float64, count int) []float64 {
|
||||||
|
return prometheus.ExponentialBuckets(start, factor, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MergeBuckets merges buckets together
|
||||||
|
func MergeBuckets(buckets ...[]float64) []float64 {
|
||||||
|
result := make([]float64, 1)
|
||||||
|
for _, s := range buckets {
|
||||||
|
result = append(result, s...)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
@ -23,19 +23,6 @@ import (
|
|||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefBuckets is a wrapper for prometheus.DefBuckets
|
|
||||||
var DefBuckets = prometheus.DefBuckets
|
|
||||||
|
|
||||||
// LinearBuckets is a wrapper for prometheus.LinearBuckets.
|
|
||||||
func LinearBuckets(start, width float64, count int) []float64 {
|
|
||||||
return prometheus.LinearBuckets(start, width, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExponentialBuckets is a wrapper for prometheus.ExponentialBuckets.
|
|
||||||
func ExponentialBuckets(start, factor float64, count int) []float64 {
|
|
||||||
return prometheus.ExponentialBuckets(start, factor, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Histogram is our internal representation for our wrapping struct around prometheus
|
// Histogram is our internal representation for our wrapping struct around prometheus
|
||||||
// histograms. Summary implements both kubeCollector and ObserverMetric
|
// histograms. Summary implements both kubeCollector and ObserverMetric
|
||||||
type Histogram struct {
|
type Histogram struct {
|
||||||
|
@ -480,15 +480,54 @@ func (c *metricDecoder) decodeBucketFunctionCall(v *ast.CallExpr) ([]float64, er
|
|||||||
if functionImport.String() != c.kubeMetricsImportName {
|
if functionImport.String() != c.kubeMetricsImportName {
|
||||||
return nil, newDecodeErrorf(v, errBuckets), true
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
}
|
}
|
||||||
firstArg, secondArg, thirdArg, err := decodeBucketArguments(v)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err, true
|
|
||||||
}
|
|
||||||
switch functionName {
|
switch functionName {
|
||||||
case "LinearBuckets":
|
case "LinearBuckets":
|
||||||
|
firstArg, secondArg, thirdArg, err := decodeBucketArguments(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err, true
|
||||||
|
}
|
||||||
return metrics.LinearBuckets(firstArg, secondArg, thirdArg), nil, true
|
return metrics.LinearBuckets(firstArg, secondArg, thirdArg), nil, true
|
||||||
case "ExponentialBuckets":
|
case "ExponentialBuckets":
|
||||||
|
firstArg, secondArg, thirdArg, err := decodeBucketArguments(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err, true
|
||||||
|
}
|
||||||
return metrics.ExponentialBuckets(firstArg, secondArg, thirdArg), nil, true
|
return metrics.ExponentialBuckets(firstArg, secondArg, thirdArg), nil, true
|
||||||
|
case "MergeBuckets":
|
||||||
|
merged := []float64{}
|
||||||
|
for _, arg := range v.Args {
|
||||||
|
switch argExpr := arg.(type) {
|
||||||
|
case *ast.CompositeLit:
|
||||||
|
fs, err := decodeListOfFloats(argExpr, argExpr.Elts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err, true
|
||||||
|
}
|
||||||
|
merged = append(merged, fs...)
|
||||||
|
case *ast.CallExpr:
|
||||||
|
se, ok = argExpr.Fun.(*ast.SelectorExpr)
|
||||||
|
if ok {
|
||||||
|
functionName := se.Sel.String()
|
||||||
|
functionImport, ok := se.X.(*ast.Ident)
|
||||||
|
if !ok {
|
||||||
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
|
}
|
||||||
|
if functionImport.String() != c.kubeMetricsImportName {
|
||||||
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
|
}
|
||||||
|
firstArg, secondArg, thirdArg, err := decodeBucketArguments(argExpr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err, true
|
||||||
|
}
|
||||||
|
switch functionName {
|
||||||
|
case "LinearBuckets":
|
||||||
|
merged = append(merged, metrics.LinearBuckets(firstArg, secondArg, thirdArg)...)
|
||||||
|
case "ExponentialBuckets":
|
||||||
|
merged = append(merged, metrics.LinearBuckets(firstArg, secondArg, thirdArg)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return merged, nil, true
|
||||||
}
|
}
|
||||||
return nil, nil, false
|
return nil, nil, false
|
||||||
}
|
}
|
||||||
|
@ -488,6 +488,21 @@ var (
|
|||||||
StabilityLevel: metrics.BETA,
|
StabilityLevel: metrics.BETA,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
NetworkProgrammingLatency2 = metrics.NewHistogram(
|
||||||
|
&metrics.HistogramOpts{
|
||||||
|
Subsystem: "kube_proxy",
|
||||||
|
Name: "network_programming_duration_seconds2",
|
||||||
|
Help: "In Cluster Network Programming Latency in seconds",
|
||||||
|
Buckets: metrics.MergeBuckets(
|
||||||
|
metrics.LinearBuckets(0.25, 0.25, 2), // 0.25s, 0.50s
|
||||||
|
[]float64{1, 5, 10, 59}, // 1s, 2s, 3s, ... 59s
|
||||||
|
metrics.LinearBuckets(60, 5, 12), // 60s, 65s, 70s, ... 115s
|
||||||
|
metrics.LinearBuckets(120, 30, 7), // 2min, 2.5min, 3min, ..., 5min
|
||||||
|
),
|
||||||
|
StabilityLevel: metrics.BETA,
|
||||||
|
},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
var registerMetrics sync.Once
|
var registerMetrics sync.Once
|
||||||
|
@ -84,6 +84,37 @@
|
|||||||
- 240
|
- 240
|
||||||
- 270
|
- 270
|
||||||
- 300
|
- 300
|
||||||
|
- name: network_programming_duration_seconds2
|
||||||
|
subsystem: kube_proxy
|
||||||
|
help: In Cluster Network Programming Latency in seconds
|
||||||
|
type: Histogram
|
||||||
|
stabilityLevel: BETA
|
||||||
|
buckets:
|
||||||
|
- 0.25
|
||||||
|
- 0.5
|
||||||
|
- 1
|
||||||
|
- 5
|
||||||
|
- 10
|
||||||
|
- 59
|
||||||
|
- 60
|
||||||
|
- 65
|
||||||
|
- 70
|
||||||
|
- 75
|
||||||
|
- 80
|
||||||
|
- 85
|
||||||
|
- 90
|
||||||
|
- 95
|
||||||
|
- 100
|
||||||
|
- 105
|
||||||
|
- 110
|
||||||
|
- 115
|
||||||
|
- 120
|
||||||
|
- 150
|
||||||
|
- 180
|
||||||
|
- 210
|
||||||
|
- 240
|
||||||
|
- 270
|
||||||
|
- 300
|
||||||
- name: certificate_manager_client_ttl_seconds
|
- name: certificate_manager_client_ttl_seconds
|
||||||
subsystem: kubelet
|
subsystem: kubelet
|
||||||
help: Gauge of the TTL (time-to-live) of the Kubelet's client certificate. The value
|
help: Gauge of the TTL (time-to-live) of the Kubelet's client certificate. The value
|
||||||
|
Loading…
Reference in New Issue
Block a user