瀏覽代碼

added ingress IP to load balancer prometheus metric

Calvin Wang 5 年之前
父節點
當前提交
2e768464f5
共有 4 個文件被更改,包括 6 次插入4 次删除
  1. 1 0
      go.sum
  2. 1 1
      pkg/costmodel/costmodel.go
  3. 2 1
      pkg/costmodel/metrics.go
  4. 2 2
      pkg/costmodel/router.go

+ 1 - 0
go.sum

@@ -560,6 +560,7 @@ k8s.io/apimachinery v0.0.0-20190913075812-e119e5e154b6/go.mod h1:nL6pwRT8NgfF8TT
 k8s.io/apimachinery v0.18.6 h1:RtFHnfGNfd1N0LeSrKCUznz5xtUP1elRGvHJbL3Ntag=
 k8s.io/apimachinery v0.18.6 h1:RtFHnfGNfd1N0LeSrKCUznz5xtUP1elRGvHJbL3Ntag=
 k8s.io/apimachinery v0.19.0 h1:gjKnAda/HZp5k4xQYjL0K/Yb66IvNqjthCb03QlKpaQ=
 k8s.io/apimachinery v0.19.0 h1:gjKnAda/HZp5k4xQYjL0K/Yb66IvNqjthCb03QlKpaQ=
 k8s.io/apimachinery v0.19.1 h1:cwsxZazM/LA9aUsBaL4bRS5ygoM6bYp8dFk22DSYQa4=
 k8s.io/apimachinery v0.19.1 h1:cwsxZazM/LA9aUsBaL4bRS5ygoM6bYp8dFk22DSYQa4=
+k8s.io/apimachinery v0.19.2 h1:5Gy9vQpAGTKHPVOh5c4plE274X8D/6cuEiTO2zve7tc=
 k8s.io/client-go v0.0.0-20190404172613-2e1a3ed22ac5 h1:BwY2C//EoWktJi74O6R2REBonrhsfhRI0qfVwOjOPp8=
 k8s.io/client-go v0.0.0-20190404172613-2e1a3ed22ac5 h1:BwY2C//EoWktJi74O6R2REBonrhsfhRI0qfVwOjOPp8=
 k8s.io/client-go v0.0.0-20190404172613-2e1a3ed22ac5/go.mod h1:bIEHXHbykaOlj+pgLllzLJ2RPGdzkjtqdk0Il07KPEM=
 k8s.io/client-go v0.0.0-20190404172613-2e1a3ed22ac5/go.mod h1:bIEHXHbykaOlj+pgLllzLJ2RPGdzkjtqdk0Il07KPEM=
 k8s.io/client-go v0.0.0-20190620085101-78d2af792bab h1:E8Fecph0qbNsAbijJJQryKu4Oi9QTp5cVpjTE+nqg6g=
 k8s.io/client-go v0.0.0-20190620085101-78d2af792bab h1:E8Fecph0qbNsAbijJJQryKu4Oi9QTp5cVpjTE+nqg6g=

+ 1 - 1
pkg/costmodel/costmodel.go

@@ -1205,7 +1205,7 @@ func (cm *CostModel) GetLBCost(cp costAnalyzerCloud.Provider) (map[string]*costA
 				return nil, err
 				return nil, err
 			}
 			}
 			newLoadBalancer := *loadBalancer
 			newLoadBalancer := *loadBalancer
-			if len(service.Status.LoadBalancer.Ingress) > 0 { // should actually check if LoadBalancer.Ingress exists
+			if len(service.Status.LoadBalancer.Ingress) > 0 { // assumes passing service.Spec.Type check means service.Status.LoadBalancer.Ingress field exists
 				for _, loadBalancerIngress := range service.Status.LoadBalancer.Ingress {
 				for _, loadBalancerIngress := range service.Status.LoadBalancer.Ingress {
 					newLoadBalancer.IngressIPAddresses = append(newLoadBalancer.IngressIPAddresses, loadBalancerIngress.IP)
 					newLoadBalancer.IngressIPAddresses = append(newLoadBalancer.IngressIPAddresses, loadBalancerIngress.IP)
 				}
 				}

+ 2 - 1
pkg/costmodel/metrics.go

@@ -518,7 +518,8 @@ func StartCostModelMetricRecording(a *Accesses) bool {
 				keyParts := getLabelStringsFromKey(lbKey)
 				keyParts := getLabelStringsFromKey(lbKey)
 				namespace := keyParts[0]
 				namespace := keyParts[0]
 				serviceName := keyParts[1]
 				serviceName := keyParts[1]
-				a.LBCostRecorder.WithLabelValues(namespace, serviceName).Set(lb.Cost)
+				ingressIP := lb.IngressIPAddresses[0] // assumes one ingress IP per load balancer
+				a.LBCostRecorder.WithLabelValues(ingressIP, namespace, serviceName).Set(lb.Cost)
 
 
 				labelKey := getKeyFromLabelStrings(namespace, serviceName)
 				labelKey := getKeyFromLabelStrings(namespace, serviceName)
 				loadBalancerSeen[labelKey] = true
 				loadBalancerSeen[labelKey] = true

+ 2 - 2
pkg/costmodel/router.go

@@ -899,10 +899,10 @@ func Initialize(additionalConfigWatchers ...ConfigWatchers) {
 		Name: "kubecost_cluster_management_cost",
 		Name: "kubecost_cluster_management_cost",
 		Help: "kubecost_cluster_management_cost Hourly cost paid as a cluster management fee.",
 		Help: "kubecost_cluster_management_cost Hourly cost paid as a cluster management fee.",
 	}, []string{"provisioner_name"})
 	}, []string{"provisioner_name"})
-	LBCostRecorder := prometheus.NewGaugeVec(prometheus.GaugeOpts{ // don't know if necessary to differentiate ELB vs. ALB cost
+	LBCostRecorder := prometheus.NewGaugeVec(prometheus.GaugeOpts{ // no differentiation between ELB and ALB right now
 		Name: "kubecost_load_balancer_cost",
 		Name: "kubecost_load_balancer_cost",
 		Help: "kubecost_load_balancer_cost Hourly cost of load balancer",
 		Help: "kubecost_load_balancer_cost Hourly cost of load balancer",
-	}, []string{"namespace", "service_name"}) // will likely need some adjustments. could have multiple IPs per LB, so ignore for now
+	}, []string{"ingress_ip", "namespace", "service_name"}) // assumes one ingress IP per load balancer
 
 
 	prometheus.MustRegister(cpuGv)
 	prometheus.MustRegister(cpuGv)
 	prometheus.MustRegister(ramGv)
 	prometheus.MustRegister(ramGv)