Browse Source

Merge pull request #649 from kubecost/bolt/omit-empty-labels

Omit Empty Label/Annotation Metrics
Matt Bolt 5 năm trước cách đây
mục cha
commit
94023d3b8a
2 tập tin đã thay đổi với 38 bổ sung33 xóa
  1. 20 10
      pkg/costmodel/metrics.go
  2. 18 23
      pkg/prom/metrics.go

+ 20 - 10
pkg/costmodel/metrics.go

@@ -43,8 +43,10 @@ func (sc StatefulsetCollector) Collect(ch chan<- prometheus.Metric) {
 	ds := sc.KubeClusterCache.GetAllStatefulSets()
 	for _, statefulset := range ds {
 		labels, values := prom.KubeLabelsToLabels(statefulset.Spec.Selector.MatchLabels)
-		m := newStatefulsetMetric(statefulset.GetName(), statefulset.GetNamespace(), "statefulSet_match_labels", labels, values)
-		ch <- m
+		if len(labels) > 0 {
+			m := newStatefulsetMetric(statefulset.GetName(), statefulset.GetNamespace(), "statefulSet_match_labels", labels, values)
+			ch <- m
+		}
 	}
 }
 
@@ -129,8 +131,10 @@ func (sc DeploymentCollector) Collect(ch chan<- prometheus.Metric) {
 	ds := sc.KubeClusterCache.GetAllDeployments()
 	for _, deployment := range ds {
 		labels, values := prom.KubeLabelsToLabels(deployment.Spec.Selector.MatchLabels)
-		m := newDeploymentMetric(deployment.GetName(), deployment.GetNamespace(), "deployment_match_labels", labels, values)
-		ch <- m
+		if len(labels) > 0 {
+			m := newDeploymentMetric(deployment.GetName(), deployment.GetNamespace(), "deployment_match_labels", labels, values)
+			ch <- m
+		}
 	}
 }
 
@@ -215,8 +219,10 @@ func (sc ServiceCollector) Collect(ch chan<- prometheus.Metric) {
 	svcs := sc.KubeClusterCache.GetAllServices()
 	for _, svc := range svcs {
 		labels, values := prom.KubeLabelsToLabels(svc.Spec.Selector)
-		m := newServiceMetric(svc.GetName(), svc.GetNamespace(), "service_selector_labels", labels, values)
-		ch <- m
+		if len(labels) > 0 {
+			m := newServiceMetric(svc.GetName(), svc.GetNamespace(), "service_selector_labels", labels, values)
+			ch <- m
+		}
 	}
 }
 
@@ -301,8 +307,10 @@ func (nsac NamespaceAnnotationCollector) Collect(ch chan<- prometheus.Metric) {
 	namespaces := nsac.KubeClusterCache.GetAllNamespaces()
 	for _, namespace := range namespaces {
 		labels, values := prom.KubeAnnotationsToLabels(namespace.Annotations)
-		m := newNamespaceAnnotationsMetric(namespace.GetName(), "kube_namespace_annotations", labels, values)
-		ch <- m
+		if len(labels) > 0 {
+			m := newNamespaceAnnotationsMetric(namespace.GetName(), "kube_namespace_annotations", labels, values)
+			ch <- m
+		}
 	}
 }
 
@@ -381,8 +389,10 @@ func (pac PodAnnotationCollector) Collect(ch chan<- prometheus.Metric) {
 	pods := pac.KubeClusterCache.GetAllPods()
 	for _, pod := range pods {
 		labels, values := prom.KubeAnnotationsToLabels(pod.Annotations)
-		m := newPodAnnotationMetric(pod.GetNamespace(), pod.GetName(), "kube_pod_annotations", labels, values)
-		ch <- m
+		if len(labels) > 0 {
+			m := newPodAnnotationMetric(pod.GetNamespace(), pod.GetName(), "kube_pod_annotations", labels, values)
+			ch <- m
+		}
 	}
 }
 

+ 18 - 23
pkg/prom/metrics.go

@@ -72,36 +72,31 @@ func LabelNamesFrom(labels map[string]string) []string {
 	return keys
 }
 
-// Converts kubernetes labels into prometheus labels.
-func KubeLabelsToLabels(labels map[string]string) ([]string, []string) {
-	labelKeys := make([]string, 0, len(labels))
-	for k := range labels {
-		labelKeys = append(labelKeys, k)
+// Prepends a qualifier string to the keys provided in the m map and returns the new keys and values.
+func KubePrependQualifierToLabels(m map[string]string, qualifier string) ([]string, []string) {
+	keys := make([]string, 0, len(m))
+	for k := range m {
+		keys = append(keys, k)
 	}
-	sort.Strings(labelKeys)
+	sort.Strings(keys)
 
-	labelValues := make([]string, 0, len(labels))
-	for i, k := range labelKeys {
-		labelKeys[i] = "label_" + SanitizeLabelName(k)
-		labelValues = append(labelValues, labels[k])
+	values := make([]string, 0, len(m))
+	for i, k := range keys {
+		keys[i] = qualifier + SanitizeLabelName(k)
+		values = append(values, m[k])
 	}
-	return labelKeys, labelValues
+
+	return keys, values
+}
+
+// Converts kubernetes labels into prometheus labels.
+func KubeLabelsToLabels(labels map[string]string) ([]string, []string) {
+	return KubePrependQualifierToLabels(labels, "label_")
 }
 
 // Converts kubernetes annotations into prometheus labels.
 func KubeAnnotationsToLabels(labels map[string]string) ([]string, []string) {
-	labelKeys := make([]string, 0, len(labels))
-	for k := range labels {
-		labelKeys = append(labelKeys, k)
-	}
-	sort.Strings(labelKeys)
-
-	labelValues := make([]string, 0, len(labels))
-	for i, k := range labelKeys {
-		labelKeys[i] = "annotation_" + SanitizeLabelName(k)
-		labelValues = append(labelValues, labels[k])
-	}
-	return labelKeys, labelValues
+	return KubePrependQualifierToLabels(labels, "annotation_")
 }
 
 // Replaces all illegal prometheus label characters with _