Skip to content

Commit 0591d0b

Browse files
committed
feat: Add External traffic policy to kube_service_info
1 parent 279f84b commit 0591d0b

File tree

3 files changed

+56
-9
lines changed

3 files changed

+56
-9
lines changed

docs/metrics/service/service-metrics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
| Metric name | Metric type | Description | Unit (where applicable) | Labels/tags | Status |
44
| ----------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
55
| kube_service_annotations | Gauge | Kubernetes annotations converted to Prometheus labels controlled via [--metric-annotations-allowlist](../../developer/cli-arguments.md) | | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `annotation_SERVICE_ANNOTATION`=&lt;SERVICE_ANNOTATION&gt; | EXPERIMENTAL |
6-
| kube_service_info | Gauge | Information about service | | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `cluster_ip`=&lt;service cluster ip&gt; <br> `external_name`=&lt;service external name&gt; <br> `load_balancer_ip`=&lt;service load balancer ip&gt; | STABLE |
6+
| kube_service_info | Gauge | Information about service | | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `cluster_ip`=&lt;service cluster ip&gt; <br> `external_name`=&lt;service external name&gt; <br> `external_traffic_policy`=&lt;service external traffic policy&gt; <br> `load_balancer_ip`=&lt;service load balancer ip&gt; | STABLE |
77
| kube_service_labels | Gauge | Kubernetes labels converted to Prometheus labels controlled via [--metric-labels-allowlist](../../developer/cli-arguments.md) | | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `label_SERVICE_LABEL`=&lt;SERVICE_LABEL&gt; | STABLE |
88
| kube_service_created | Gauge | Unix creation timestamp | seconds | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; | STABLE |
99
| kube_service_spec_type | Gauge | Type about service | | `service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `type`=&lt;ClusterIP\|NodePort\|LoadBalancer\|ExternalName&gt; | STABLE |

internal/store/service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ func serviceMetricFamilies(allowAnnotationsList, allowLabelsList []string) []gen
4949
"",
5050
wrapSvcFunc(func(s *v1.Service) *metric.Family {
5151
m := metric.Metric{
52-
LabelKeys: []string{"cluster_ip", "external_name", "load_balancer_ip"},
53-
LabelValues: []string{s.Spec.ClusterIP, s.Spec.ExternalName, s.Spec.LoadBalancerIP},
52+
LabelKeys: []string{"cluster_ip", "external_name", "load_balancer_ip", "external_traffic_policy"},
53+
LabelValues: []string{s.Spec.ClusterIP, s.Spec.ExternalName, s.Spec.LoadBalancerIP, string(s.Spec.ExternalTrafficPolicy)},
5454
Value: 1,
5555
}
5656
return &metric.Family{Metrics: []*metric.Metric{&m}}

internal/store/service_test.go

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestServiceStore(t *testing.T) {
7474
# TYPE kube_service_labels gauge
7575
# TYPE kube_service_spec_type gauge
7676
kube_service_created{namespace="default",service="test-service1",uid="uid1"} 1.5e+09
77-
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1",uid="uid1"} 1
77+
kube_service_info{cluster_ip="1.2.3.4",external_name="",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service1",uid="uid1"} 1
7878
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP",uid="uid1"} 1
7979
`,
8080
MetricNames: []string{
@@ -104,7 +104,7 @@ func TestServiceStore(t *testing.T) {
104104
},
105105
Want: metadata + `
106106
kube_service_created{namespace="default",service="test-service2",uid="uid2"} 1.5e+09
107-
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2",uid="uid2"} 1
107+
kube_service_info{cluster_ip="1.2.3.5",external_name="",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service2",uid="uid2"} 1
108108
kube_service_spec_type{namespace="default",service="test-service2",uid="uid2",type="NodePort"} 1
109109
`,
110110
},
@@ -127,7 +127,7 @@ func TestServiceStore(t *testing.T) {
127127
},
128128
Want: metadata + `
129129
kube_service_created{namespace="default",service="test-service3",uid="uid3"} 1.5e+09
130-
kube_service_info{cluster_ip="1.2.3.6",external_name="",load_balancer_ip="1.2.3.7",namespace="default",service="test-service3",uid="uid3"} 1
130+
kube_service_info{cluster_ip="1.2.3.6",external_name="",external_traffic_policy="",load_balancer_ip="1.2.3.7",namespace="default",service="test-service3",uid="uid3"} 1
131131
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer",uid="uid3"} 1
132132
`,
133133
},
@@ -149,7 +149,7 @@ func TestServiceStore(t *testing.T) {
149149
},
150150
Want: metadata + `
151151
kube_service_created{namespace="default",service="test-service4",uid="uid4"} 1.5e+09
152-
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4",uid="uid4"} 1
152+
kube_service_info{cluster_ip="",external_name="www.example.com",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service4",uid="uid4"} 1
153153
kube_service_spec_type{namespace="default",service="test-service4",uid="uid4",type="ExternalName"} 1
154154
`,
155155
},
@@ -180,7 +180,7 @@ func TestServiceStore(t *testing.T) {
180180
},
181181
Want: metadata + `
182182
kube_service_created{namespace="default",service="test-service5",uid="uid5"} 1.5e+09
183-
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service5",uid="uid5"} 1
183+
kube_service_info{cluster_ip="",external_name="",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service5",uid="uid5"} 1
184184
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer",uid="uid5"} 1
185185
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5",uid="uid5"} 1
186186
`,
@@ -206,12 +206,59 @@ func TestServiceStore(t *testing.T) {
206206
},
207207
Want: metadata + `
208208
kube_service_created{namespace="default",service="test-service6",uid="uid6"} 1.5e+09
209-
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service6",uid="uid6"} 1
209+
kube_service_info{cluster_ip="",external_name="",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service6",uid="uid6"} 1
210210
kube_service_spec_type{namespace="default",service="test-service6",uid="uid6",type="ClusterIP"} 1
211211
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6",uid="uid6"} 1
212212
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6",uid="uid6"} 1
213213
`,
214214
},
215+
{
216+
Obj: &v1.Service{
217+
ObjectMeta: metav1.ObjectMeta{
218+
Name: "test-service7",
219+
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
220+
Namespace: "default",
221+
UID: "uid7",
222+
Labels: map[string]string{
223+
"app": "example7",
224+
},
225+
},
226+
Spec: v1.ServiceSpec{
227+
ClusterIP: "1.2.3.11",
228+
Type: v1.ServiceTypeClusterIP,
229+
ExternalTrafficPolicy: "Cluster",
230+
},
231+
},
232+
Want: metadata + `
233+
kube_service_created{namespace="default",service="test-service7",uid="uid7"} 1.5e+09
234+
kube_service_info{cluster_ip="1.2.3.11",external_name="",external_traffic_policy="Cluster",load_balancer_ip="",namespace="default",service="test-service7",uid="uid7"} 1
235+
kube_service_spec_type{namespace="default",service="test-service7",uid="uid7",type="ClusterIP"} 1
236+
`,
237+
},
238+
{
239+
Obj: &v1.Service{
240+
ObjectMeta: metav1.ObjectMeta{
241+
Name: "test-service8",
242+
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
243+
Namespace: "default",
244+
UID: "uid8",
245+
Labels: map[string]string{
246+
"app": "example8",
247+
},
248+
},
249+
Spec: v1.ServiceSpec{
250+
ClusterIP: "1.2.3.12",
251+
LoadBalancerIP: "1.2.3.13",
252+
Type: v1.ServiceTypeLoadBalancer,
253+
ExternalTrafficPolicy: "Local",
254+
},
255+
},
256+
Want: metadata + `
257+
kube_service_created{namespace="default",service="test-service8",uid="uid8"} 1.5e+09
258+
kube_service_info{cluster_ip="1.2.3.12",external_name="",external_traffic_policy="Local",load_balancer_ip="1.2.3.13",namespace="default",service="test-service8",uid="uid8"} 1
259+
kube_service_spec_type{namespace="default",service="test-service8",uid="uid8",type="LoadBalancer"} 1
260+
`,
261+
},
215262
}
216263
for i, c := range cases {
217264
c.Func = generator.ComposeMetricGenFuncs(serviceMetricFamilies(nil, nil))

0 commit comments

Comments
 (0)