Merge pull request #113117 from logicalhan/merged-buckets

add support for merging calls to Linear/Exponential Buckets
This commit is contained in:
Kubernetes Prow Robot 2022-10-17 16:59:36 -07:00 committed by GitHub
commit 507cf76570
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 142 additions and 0 deletions

View File

@ -438,6 +438,38 @@ func (c *metricDecoder) decodeBuckets(expr ast.Expr) ([]float64, error) {
func (c *metricDecoder) decodeBucketFunctionCall(v *ast.CallExpr) ([]float64, error, bool) {
se, ok := v.Fun.(*ast.SelectorExpr)
if !ok {
// support merged
if ai, ok := v.Fun.(*ast.Ident); ok && ai.Name == "merge" {
merged := []float64{}
for _, arg := range v.Args {
v2, ok := arg.(*ast.CallExpr)
if !ok {
return nil, newDecodeErrorf(v2, errBuckets), true
}
se, ok = v2.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(v2)
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, newDecodeErrorf(v, errBuckets), true
}
functionName := se.Sel.String()

View File

@ -473,6 +473,21 @@ var (
},
[]string{"container_state"},
)
NetworkProgrammingLatency = metrics.NewHistogram(
&metrics.HistogramOpts{
Subsystem: "kube_proxy",
Name: "network_programming_duration_seconds",
Help: "In Cluster Network Programming Latency in seconds",
Buckets: merge(
metrics.LinearBuckets(0.25, 0.25, 2), // 0.25s, 0.50s
metrics.LinearBuckets(1, 1, 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
@ -503,6 +518,7 @@ func Register(collectors ...metrics.StableCollector) {
legacyregistry.MustRegister(RunningPodCount)
legacyregistry.MustRegister(RunPodSandboxDuration)
legacyregistry.MustRegister(RunPodSandboxErrors)
legacyregistry.MustRegister(NetworkProgrammingLatency)
for _, collector := range collectors {
legacyregistry.CustomMustRegister(collector)
}
@ -547,3 +563,11 @@ func SetNodeName(name types.NodeName) {
func Blah() metrics.ObserverMetric {
return EvictionStatsAge.With(metrics.Labels{"plugins": "ASDf"})
}
func merge(slices ...[]float64) []float64 {
result := make([]float64, 1)
for _, s := range slices {
result = append(result, s...)
}
return result
}

View File

@ -1,3 +1,89 @@
- name: network_programming_duration_seconds
subsystem: kube_proxy
help: In Cluster Network Programming Latency in seconds
type: Histogram
stabilityLevel: BETA
buckets:
- 0.25
- 0.5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 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
subsystem: kubelet
help: Gauge of the TTL (time-to-live) of the Kubelet's client certificate. The value