-
Notifications
You must be signed in to change notification settings - Fork 557
Expand file tree
/
Copy pathmetrics.go
More file actions
165 lines (156 loc) · 6.45 KB
/
Copy pathmetrics.go
File metadata and controls
165 lines (156 loc) · 6.45 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*
Copyright 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 disruption
import (
opmetrics "github.com/awslabs/operatorpkg/metrics"
"github.com/prometheus/client_golang/prometheus"
crmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
"sigs.k8s.io/karpenter/pkg/metrics"
)
const (
voluntaryDisruptionSubsystem = "voluntary_disruption"
decisionLabel = "decision"
ConsolidationTypeLabel = "consolidation_type"
CandidatesIneligible = "candidates_ineligible"
policyLabel = "policy"
StageLabel = "stage"
StageEvaluate = "evaluate"
StageValidate = "validate"
)
func init() {
ConsolidationTimeoutsTotal.Add(0, map[string]string{ConsolidationTypeLabel: MultiNodeConsolidationType})
ConsolidationTimeoutsTotal.Add(0, map[string]string{ConsolidationTypeLabel: SingleNodeConsolidationType})
}
var (
EvaluationDurationSeconds = opmetrics.NewPrometheusHistogram(
crmetrics.Registry,
prometheus.HistogramOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "decision_evaluation_duration_seconds",
Help: "Duration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.",
Buckets: metrics.DurationBuckets(),
},
[]string{metrics.ReasonLabel, ConsolidationTypeLabel},
)
CandidateEvaluationDurationSeconds = opmetrics.NewPrometheusHistogram(
crmetrics.Registry,
prometheus.HistogramOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "candidate_evaluation_duration_seconds",
Help: "Duration of a single SimulateScheduling call for one candidate or candidate batch. Labeled by disruption reason, consolidation type, and evaluation stage.",
Buckets: metrics.DurationBuckets(),
},
[]string{metrics.ReasonLabel, ConsolidationTypeLabel, StageLabel},
)
DecisionsPerformedTotal = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "decisions_total",
Help: "Number of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.",
},
[]string{decisionLabel, metrics.ReasonLabel, ConsolidationTypeLabel},
)
NodepoolDecisionsPerformed = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "decisions_by_nodepool_total",
Help: "Number of disruption decisions performed by nodepool. Labeled by nodepool name, disruption decision, reason, and consolidation type.",
},
[]string{metrics.NodePoolLabel, decisionLabel, metrics.ReasonLabel, ConsolidationTypeLabel},
)
EligibleNodes = opmetrics.NewPrometheusGauge(
crmetrics.Registry,
prometheus.GaugeOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "eligible_nodes",
Help: "Number of nodes eligible for disruption by Karpenter. Labeled by disruption reason.",
},
[]string{metrics.ReasonLabel},
)
ConsolidationTimeoutsTotal = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "consolidation_timeouts_total",
Help: "Number of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.",
},
[]string{ConsolidationTypeLabel},
)
FailedValidationsTotal = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "failed_validations_total",
Help: "Number of candidates that were selected for disruption but failed validation. Labeled by consolidation type.",
},
[]string{ConsolidationTypeLabel},
)
NodePoolAllowedDisruptions = opmetrics.NewPrometheusGauge(
crmetrics.Registry,
prometheus.GaugeOpts{
Namespace: metrics.Namespace,
Subsystem: metrics.NodePoolSubsystem,
Name: "allowed_disruptions",
Help: "The number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.",
},
[]string{metrics.NodePoolLabel, metrics.ReasonLabel},
)
NodePoolNodesConsumingBudgets = opmetrics.NewPrometheusGauge(
crmetrics.Registry,
prometheus.GaugeOpts{
Namespace: metrics.Namespace,
Subsystem: metrics.NodePoolSubsystem,
Name: "nodes_consuming_budgets",
Help: "The number of nodes consuming the budget of a nodepool at a point in time. Labeled by NodePool.",
},
[]string{metrics.NodePoolLabel, metrics.ReasonLabel},
)
DisruptionQueueFailuresTotal = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Subsystem: voluntaryDisruptionSubsystem,
Name: "queue_failures_total",
Help: "The number of times that an enqueued disruption decision failed. Labeled by disruption method.",
},
[]string{decisionLabel, metrics.ReasonLabel, ConsolidationTypeLabel},
)
ConsolidationScoreHistogram = opmetrics.NewPrometheusHistogram(
crmetrics.Registry,
prometheus.HistogramOpts{
Namespace: metrics.Namespace,
Name: "consolidation_score",
Help: "Score of balanced consolidation moves. Labeled by decision, NodePool, and policy.",
Buckets: []float64{0.1, 0.25, 0.33, 0.5, 1.0, 2.0, 5.0, 10.0},
},
[]string{decisionLabel, metrics.NodePoolLabel, policyLabel},
)
ConsolidationMovesTotal = opmetrics.NewPrometheusCounter(
crmetrics.Registry,
prometheus.CounterOpts{
Namespace: metrics.Namespace,
Name: "consolidation_moves_total",
Help: "Number of balanced consolidation moves. Labeled by decision, NodePool, and policy.",
},
[]string{decisionLabel, metrics.NodePoolLabel, policyLabel},
)
)