@@ -2,31 +2,48 @@ package lbc
2
2
3
3
import (
4
4
"context"
5
+ awssdk "github.com/aws/aws-sdk-go-v2/aws"
6
+ rgtsdk "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
7
+ rgttypes "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi/types"
5
8
"github.com/prometheus/client_golang/prometheus"
6
9
corev1 "k8s.io/api/core/v1"
7
10
networkingv1 "k8s.io/api/networking/v1"
8
11
elbv2api "sigs.k8s.io/aws-load-balancer-controller/apis/elbv2/v1beta1"
12
+ "sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
9
13
"strings"
10
14
11
15
"sigs.k8s.io/controller-runtime/pkg/client"
12
16
"time"
13
17
)
14
18
15
- const networkLoadBalancerStr = "nlb"
19
+ const (
20
+ networkLoadBalancerStr = "nlb"
21
+ resourceTypeALB = "elasticloadbalancing:loadbalancer/app"
22
+ resourceTypeNLB = "elasticloadbalancing:loadbalancer/net"
23
+ )
16
24
17
25
type MetricCollector interface {
18
26
// ObservePodReadinessGateReady this metric is useful to determine how fast pods are becoming ready in the load balancer.
19
27
// Due to some architectural constraints, we can only emit this metric for pods that are using readiness gates.
20
28
ObservePodReadinessGateReady (namespace string , tgbName string , duration time.Duration )
21
29
22
- // UpdateMetrics fetches and updates all relevant metrics.
30
+ // UpdateManagedK8sResourceMetrics fetches and updates managed k8s resources metrics.
23
31
UpdateManagedK8sResourceMetrics (ctx context.Context ) error
32
+
33
+ // UpdateManagedALBMetrics updates managed ALB count metrics
34
+ UpdateManagedALBMetrics (ctx context.Context ) error
35
+
36
+ //UpdateManagedNLBMetrics updates managed NLB count metrics
37
+ UpdateManagedNLBMetrics (ctx context.Context ) error
24
38
}
25
39
26
40
type collector struct {
27
41
instruments * instruments
28
42
runtimeClient client.Client
43
+ rgt services.RGT
29
44
finalizerKeyWord string
45
+ clusterTagKey string
46
+ clusterTagVal string
30
47
}
31
48
32
49
type noOpCollector struct {}
@@ -38,7 +55,15 @@ func (n *noOpCollector) UpdateManagedK8sResourceMetrics(_ context.Context) error
38
55
return nil
39
56
}
40
57
41
- func NewCollector (registerer prometheus.Registerer , runtimeClient client.Client , finalizerKeyWord string ) MetricCollector {
58
+ func (n * noOpCollector ) UpdateManagedALBMetrics (_ context.Context ) error {
59
+ return nil
60
+ }
61
+
62
+ func (n * noOpCollector ) UpdateManagedNLBMetrics (_ context.Context ) error {
63
+ return nil
64
+ }
65
+
66
+ func NewCollector (registerer prometheus.Registerer , runtimeClient client.Client , rgt services.RGT , finalizerKeyWord string , clusterTagKey string , clusterTagVal string ) MetricCollector {
42
67
if registerer == nil || runtimeClient == nil {
43
68
return & noOpCollector {}
44
69
}
@@ -47,7 +72,10 @@ func NewCollector(registerer prometheus.Registerer, runtimeClient client.Client,
47
72
return & collector {
48
73
instruments : instruments ,
49
74
runtimeClient : runtimeClient ,
75
+ rgt : rgt ,
50
76
finalizerKeyWord : finalizerKeyWord ,
77
+ clusterTagKey : clusterTagKey ,
78
+ clusterTagVal : clusterTagVal ,
51
79
}
52
80
}
53
81
@@ -77,7 +105,7 @@ func (c *collector) UpdateManagedK8sResourceMetrics(ctx context.Context) error {
77
105
}
78
106
}
79
107
}
80
- c .instruments .ingressCount .Set (float64 (ingressCount ))
108
+ c .instruments .managedIngressCount .Set (float64 (ingressCount ))
81
109
82
110
// Fetch service count
83
111
serviceList := & corev1.ServiceList {}
@@ -98,7 +126,7 @@ func (c *collector) UpdateManagedK8sResourceMetrics(ctx context.Context) error {
98
126
serviceCount ++
99
127
}
100
128
}
101
- c .instruments .serviceCount .Set (float64 (serviceCount ))
129
+ c .instruments .managedServiceCount .Set (float64 (serviceCount ))
102
130
103
131
// Fetch TargetGroupBinding count
104
132
tgbList := & elbv2api.TargetGroupBindingList {}
@@ -114,7 +142,42 @@ func (c *collector) UpdateManagedK8sResourceMetrics(ctx context.Context) error {
114
142
}
115
143
}
116
144
}
117
- c .instruments .tgbCount .Set (float64 (tgbCount ))
145
+ c .instruments .managedTGBCount .Set (float64 (tgbCount ))
146
+
147
+ return nil
148
+ }
149
+
150
+ func (c * collector ) UpdateManagedALBMetrics (ctx context.Context ) error {
151
+ count , err := c .getManagedAWSResourceMetrics (ctx , resourceTypeALB )
152
+ if err != nil {
153
+ return err
154
+ }
155
+ c .instruments .managedALBCount .Set (float64 (count ))
156
+ return nil
157
+ }
118
158
159
+ func (c * collector ) UpdateManagedNLBMetrics (ctx context.Context ) error {
160
+ count , err := c .getManagedAWSResourceMetrics (ctx , resourceTypeNLB )
161
+ if err != nil {
162
+ return err
163
+ }
164
+ c .instruments .managedNLBCount .Set (float64 (count ))
119
165
return nil
120
166
}
167
+
168
+ func (c * collector ) getManagedAWSResourceMetrics (ctx context.Context , resourceType string ) (count int , err error ) {
169
+ req := & rgtsdk.GetResourcesInput {
170
+ ResourceTypeFilters : []string {resourceType },
171
+ TagFilters : []rgttypes.TagFilter {
172
+ {
173
+ Key : awssdk .String (c .clusterTagKey ),
174
+ Values : []string {c .clusterTagVal },
175
+ },
176
+ },
177
+ }
178
+ resources , err := c .rgt .GetResourcesAsList (ctx , req )
179
+ if err != nil {
180
+ return 0 , err
181
+ }
182
+ return len (resources ), nil
183
+ }
0 commit comments