Skip to content

Commit 2466943

Browse files
committed
Rename labels and unify createHPASpecTargetMetric and createHPASpecTargetObjectMetric
1 parent 8269109 commit 2466943

File tree

2 files changed

+52
-65
lines changed

2 files changed

+52
-65
lines changed

internal/store/horizontalpodautoscaler.go

Lines changed: 45 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ var (
5151
descHorizontalPodAutoscalerLabelsDefaultLabels = []string{"namespace", "horizontalpodautoscaler"}
5252

5353
targetMetricLabels = []string{"metric_name", "metric_target_type"}
54-
containerMetricLabels = []string{"metric_name", "metric_target_type", "container"}
55-
objectMetricLabels = []string{"metric_name", "metric_target_type", "full_target_name"}
54+
containerMetricLabels = []string{"metric_name", "metric_target_type", "container_name"}
55+
objectMetricLabels = []string{"metric_name", "metric_target_type", "target_name"}
5656
)
5757

5858
func hpaMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
@@ -62,10 +62,10 @@ func hpaMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generat
6262
createHPASpecMaxReplicas(),
6363
createHPASpecMinReplicas(),
6464
createHPASpecTargetContainerMetric(),
65-
createHPASpecTargetObjectMetric(),
6665
createHPAStatusTargetContainerMetric(),
6766
createHPAStatusTargetObjectMetric(),
68-
createHPASpecTargetMetric(),
67+
createHPASpecTargetMetric(true),
68+
createHPASpecTargetMetric(false),
6969
createHPAStatusTargetMetric(),
7070
createHPAStatusCurrentReplicas(),
7171
createHPAStatusDesiredReplicas(),
@@ -236,59 +236,16 @@ func createHPASpecTargetContainerMetric() generator.FamilyGenerator {
236236
)
237237
}
238238

239-
func createHPASpecTargetObjectMetric() generator.FamilyGenerator {
240-
return *generator.NewFamilyGeneratorWithStability(
241-
"kube_horizontalpodautoscaler_spec_target_object_metric",
242-
"The object metric specifications used by this autoscaler when calculating the desired replica count.",
243-
metric.Gauge,
244-
basemetrics.ALPHA,
245-
"",
246-
wrapHPAFunc(func(a *autoscaling.HorizontalPodAutoscaler) *metric.Family {
247-
ms := make([]*metric.Metric, 0, len(a.Spec.Metrics))
248-
for _, m := range a.Spec.Metrics {
249-
var metricName string
250-
var metricTarget autoscaling.MetricTarget
251-
var fullTargetName string
252-
// The variable maps the type of metric to the corresponding value
253-
metricMap := make(map[metricTargetType]float64)
254-
255-
switch m.Type {
256-
case autoscaling.ObjectMetricSourceType:
257-
metricName = m.Object.Metric.Name
258-
metricTarget = m.Object.Target
259-
fullTargetName = m.Object.DescribedObject.Name
260-
default:
261-
// Skip unsupported metric type
262-
continue
263-
}
264-
265-
if metricTarget.Value != nil {
266-
metricMap[value] = convertValueToFloat64(metricTarget.Value)
267-
}
268-
if metricTarget.AverageValue != nil {
269-
metricMap[average] = convertValueToFloat64(metricTarget.AverageValue)
270-
}
271-
if metricTarget.AverageUtilization != nil {
272-
metricMap[utilization] = float64(*metricTarget.AverageUtilization)
273-
}
274-
275-
for metricTypeIndex, metricValue := range metricMap {
276-
ms = append(ms, &metric.Metric{
277-
LabelKeys: objectMetricLabels,
278-
LabelValues: []string{metricName, metricTypeIndex.String(), fullTargetName},
279-
Value: metricValue,
280-
})
281-
}
282-
}
283-
return &metric.Family{Metrics: ms}
284-
}),
285-
)
286-
}
287-
288-
func createHPASpecTargetMetric() generator.FamilyGenerator {
239+
func createHPASpecTargetMetric(CollectContainerResourceMetricSourceType bool) generator.FamilyGenerator {
240+
metricName := "kube_horizontalpodautoscaler_spec_target_metric"
241+
metricDescription := "The metric specifications used by this autoscaler when calculating the desired replica count."
242+
if CollectContainerResourceMetricSourceType {
243+
metricName = "kube_horizontalpodautoscaler_spec_target_object_metric"
244+
metricDescription = "The object metric specifications used by this autoscaler when calculating the desired replica count."
245+
}
289246
return *generator.NewFamilyGeneratorWithStability(
290-
"kube_horizontalpodautoscaler_spec_target_metric",
291-
"The metric specifications used by this autoscaler when calculating the desired replica count.",
247+
metricName,
248+
metricDescription,
292249
metric.Gauge,
293250
basemetrics.ALPHA,
294251
"",
@@ -299,17 +256,38 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
299256
var metricTarget autoscaling.MetricTarget
300257
// The variable maps the type of metric to the corresponding value
301258
metricMap := make(map[metricTargetType]float64)
259+
var fullTargetName string
302260

303261
switch m.Type {
304262
case autoscaling.PodsMetricSourceType:
263+
if CollectContainerResourceMetricSourceType {
264+
// skip this metric if collecting container resource metric source type
265+
continue
266+
}
305267
metricName = m.Pods.Metric.Name
306268
metricTarget = m.Pods.Target
307269
case autoscaling.ResourceMetricSourceType:
270+
if CollectContainerResourceMetricSourceType {
271+
// skip this metric if collecting container resource metric source type
272+
continue
273+
}
308274
metricName = string(m.Resource.Name)
309275
metricTarget = m.Resource.Target
310276
case autoscaling.ExternalMetricSourceType:
277+
if CollectContainerResourceMetricSourceType {
278+
// skip this metric if collecting container resource metric source type
279+
continue
280+
}
311281
metricName = m.External.Metric.Name
312282
metricTarget = m.External.Target
283+
case autoscaling.ObjectMetricSourceType:
284+
if !CollectContainerResourceMetricSourceType {
285+
// skip this metric if not collecting container resource metric source type
286+
continue
287+
}
288+
metricName = m.Object.Metric.Name
289+
metricTarget = m.Object.Target
290+
fullTargetName = m.Object.DescribedObject.Name
313291
default:
314292
// Skip unsupported metric type
315293
continue
@@ -326,9 +304,18 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
326304
}
327305

328306
for metricTypeIndex, metricValue := range metricMap {
307+
308+
labelValues := []string{metricName, metricTypeIndex.String()}
309+
metricLabels := targetMetricLabels
310+
311+
// use correct labels and values when collecting container resource metrics
312+
if m.Type == autoscaling.ObjectMetricSourceType && CollectContainerResourceMetricSourceType {
313+
labelValues = append(labelValues, fullTargetName)
314+
metricLabels = objectMetricLabels
315+
}
329316
ms = append(ms, &metric.Metric{
330-
LabelKeys: targetMetricLabels,
331-
LabelValues: []string{metricName, metricTypeIndex.String()},
317+
LabelKeys: metricLabels,
318+
LabelValues: labelValues,
332319
Value: metricValue,
333320
})
334321
}

internal/store/horizontalpodautoscaler_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func TestHPAStore(t *testing.T) {
226226
kube_horizontalpodautoscaler_spec_min_replicas{horizontalpodautoscaler="hpa1",namespace="ns1"} 2
227227
kube_horizontalpodautoscaler_spec_target_metric{horizontalpodautoscaler="hpa1",metric_name="events",metric_target_type="average",namespace="ns1"} 30
228228
kube_horizontalpodautoscaler_spec_target_metric{horizontalpodautoscaler="hpa1",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 80
229-
kube_horizontalpodautoscaler_spec_target_container_metric{horizontalpodautoscaler="hpa1",metric_name="cpu",metric_target_type="utilization",namespace="ns1",container="container1"} 80
229+
kube_horizontalpodautoscaler_spec_target_container_metric{horizontalpodautoscaler="hpa1",metric_name="cpu",metric_target_type="utilization",namespace="ns1",container_name="container1"} 80
230230
kube_horizontalpodautoscaler_spec_target_metric{horizontalpodautoscaler="hpa1",metric_name="memory",metric_target_type="average",namespace="ns1"} 819200
231231
kube_horizontalpodautoscaler_spec_target_metric{horizontalpodautoscaler="hpa1",metric_name="memory",metric_target_type="utilization",namespace="ns1"} 80
232232
kube_horizontalpodautoscaler_spec_target_metric{horizontalpodautoscaler="hpa1",metric_name="sqs_jobs",metric_target_type="value",namespace="ns1"} 30
@@ -235,10 +235,10 @@ func TestHPAStore(t *testing.T) {
235235
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa1",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 80
236236
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa1",metric_name="memory",metric_target_type="average",namespace="ns1"} 2.6335914666e+07
237237
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa1",metric_name="memory",metric_target_type="utilization",namespace="ns1"} 80
238-
kube_horizontalpodautoscaler_spec_target_object_metric{full_target_name="",horizontalpodautoscaler="hpa1",metric_name="hits",metric_target_type="average",namespace="ns1"} 12
239-
kube_horizontalpodautoscaler_spec_target_object_metric{full_target_name="",horizontalpodautoscaler="hpa1",metric_name="hits",metric_target_type="value",namespace="ns1"} 10
240-
kube_horizontalpodautoscaler_spec_target_object_metric{full_target_name="connections",horizontalpodautoscaler="hpa1",metric_name="connections",metric_target_type="average",namespace="ns1"} 0.7
241-
kube_horizontalpodautoscaler_spec_target_object_metric{full_target_name="connections",horizontalpodautoscaler="hpa1",metric_name="connections",metric_target_type="value",namespace="ns1"} 0.5
238+
kube_horizontalpodautoscaler_spec_target_object_metric{target_name="",horizontalpodautoscaler="hpa1",metric_name="hits",metric_target_type="average",namespace="ns1"} 12
239+
kube_horizontalpodautoscaler_spec_target_object_metric{target_name="",horizontalpodautoscaler="hpa1",metric_name="hits",metric_target_type="value",namespace="ns1"} 10
240+
kube_horizontalpodautoscaler_spec_target_object_metric{target_name="connections",horizontalpodautoscaler="hpa1",metric_name="connections",metric_target_type="average",namespace="ns1"} 0.7
241+
kube_horizontalpodautoscaler_spec_target_object_metric{target_name="connections",horizontalpodautoscaler="hpa1",metric_name="connections",metric_target_type="value",namespace="ns1"} 0.5
242242
kube_horizontalpodautoscaler_status_condition{condition="AbleToScale",horizontalpodautoscaler="hpa1",namespace="ns1",status="false"} 0
243243
kube_horizontalpodautoscaler_status_condition{condition="AbleToScale",horizontalpodautoscaler="hpa1",namespace="ns1",status="true"} 1
244244
kube_horizontalpodautoscaler_status_condition{condition="AbleToScale",horizontalpodautoscaler="hpa1",namespace="ns1",status="unknown"} 0
@@ -412,8 +412,8 @@ func TestHPAStore(t *testing.T) {
412412
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="memory",metric_target_type="average",namespace="ns1"} 8.47775744e+08
413413
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="memory",metric_target_type="utilization",namespace="ns1"} 28
414414
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 6
415-
kube_horizontalpodautoscaler_status_target_container_metric{container="container1",horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="average",namespace="ns1"} 0.08
416-
kube_horizontalpodautoscaler_status_target_container_metric{container="container1",horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 10
415+
kube_horizontalpodautoscaler_status_target_container_metric{container_name="container1",horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="average",namespace="ns1"} 0.08
416+
kube_horizontalpodautoscaler_status_target_container_metric{container_name="container1",horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 10
417417
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="cpu",metric_target_type="average",namespace="ns1"} 0.062
418418
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="traefik_backend_requests_per_second",metric_target_type="value",namespace="ns1"} 0
419419
kube_horizontalpodautoscaler_status_target_metric{horizontalpodautoscaler="hpa2",metric_name="traefik_backend_requests_per_second",metric_target_type="average",namespace="ns1"} 2.9

0 commit comments

Comments
 (0)