podlabelmetrics.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package metrics
  2. import (
  3. "github.com/opencost/opencost/core/pkg/util/promutil"
  4. "github.com/opencost/opencost/pkg/clustercache"
  5. "github.com/prometheus/client_golang/prometheus"
  6. )
  7. //--------------------------------------------------------------------------
  8. // KubePodLabelsCollector
  9. //--------------------------------------------------------------------------
  10. // KubePodLabelsCollector is a prometheus collector that emits pod labels only
  11. type KubePodLabelsCollector struct {
  12. KubeClusterCache clustercache.ClusterCache
  13. metricsConfig MetricsConfig
  14. }
  15. // Describe sends the super-set of all possible descriptors of pod labels only
  16. // collected by this Collector.
  17. func (kpmc KubePodLabelsCollector) Describe(ch chan<- *prometheus.Desc) {
  18. disabledMetrics := kpmc.metricsConfig.GetDisabledMetricsMap()
  19. if _, disabled := disabledMetrics["kube_pod_labels"]; !disabled {
  20. ch <- prometheus.NewDesc("kube_pod_labels", "All labels for each pod prefixed with label_", []string{}, nil)
  21. }
  22. if _, disabled := disabledMetrics["kube_pod_owner"]; !disabled {
  23. ch <- prometheus.NewDesc("kube_pod_owner", "Information about the Pod's owner", []string{}, nil)
  24. }
  25. }
  26. // Collect is called by the Prometheus registry when collecting metrics.
  27. func (kpmc KubePodLabelsCollector) Collect(ch chan<- prometheus.Metric) {
  28. pods := kpmc.KubeClusterCache.GetAllPods()
  29. disabledMetrics := kpmc.metricsConfig.GetDisabledMetricsMap()
  30. for _, pod := range pods {
  31. podName := pod.GetName()
  32. podNS := pod.GetNamespace()
  33. podUID := string(pod.GetUID())
  34. // Pod Labels
  35. if _, disabled := disabledMetrics["kube_pod_labels"]; !disabled {
  36. labelNames, labelValues := promutil.KubePrependQualifierToLabels(promutil.SanitizeLabels(pod.GetLabels()), "label_")
  37. ch <- newKubePodLabelsMetric("kube_pod_labels", podNS, podName, podUID, labelNames, labelValues)
  38. }
  39. // Owner References
  40. if _, disabled := disabledMetrics["kube_pod_owner"]; !disabled {
  41. for _, owner := range pod.OwnerReferences {
  42. ch <- newKubePodOwnerMetric("kube_pod_owner", podNS, podName, owner.Name, owner.Kind, owner.Controller != nil)
  43. }
  44. }
  45. }
  46. }