Skip to content

Commit 6a8c6f8

Browse files
authored
Merge pull request #1687 from liangyuanpeng/support_uid_service
Add default label of uid for service
2 parents 5db4c85 + 5453753 commit 6a8c6f8

File tree

3 files changed

+48
-42
lines changed

3 files changed

+48
-42
lines changed

docs/service-metrics.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
| Metric name| Metric type | Description | Unit (where applicable) | Labels/tags | Status |
44
| ---------- | ----------- | ----------- | ----------------------- | ----------- | ------ |
5-
| kube_service_annotations | Gauge | Kubernetes annotations converted to Prometheus labels | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&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> `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 |
7-
| kube_service_labels | Gauge | Kubernetes labels converted to Prometheus labels | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `label_SERVICE_LABEL`=&lt;SERVICE_LABEL&gt; | STABLE |
8-
| kube_service_created | Gauge | Unix creation timestamp | seconds |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; | STABLE |
9-
| kube_service_spec_type | Gauge | Type about service | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `type`=&lt;ClusterIP\|NodePort\|LoadBalancer\|ExternalName&gt; | STABLE |
10-
| kube_service_spec_external_ip | Gauge | Service external ips. One series for each ip | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `external_ip`=&lt;external-ip&gt; | STABLE |
11-
| kube_service_status_load_balancer_ingress | Gauge | Service load balancer ingress status | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `ip`=&lt;load-balancer-ingress-ip&gt; <br> `hostname`=&lt;load-balancer-ingress-hostname&gt; | STABLE |
5+
| kube_service_annotations | Gauge | Kubernetes annotations converted to Prometheus labels | |`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 |
7+
| kube_service_labels | Gauge | Kubernetes labels converted to Prometheus labels | |`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 |
8+
| 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 |
9+
| 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 |
10+
| kube_service_spec_external_ip | Gauge | Service external ips. One series for each ip | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `external_ip`=&lt;external-ip&gt; | STABLE |
11+
| kube_service_status_load_balancer_ingress | Gauge | Service load balancer ingress status | |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; <br> `uid`=&lt;service-uid&gt; <br> `ip`=&lt;load-balancer-ingress-ip&gt; <br> `hostname`=&lt;load-balancer-ingress-hostname&gt; | STABLE |

internal/store/service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ var (
3535
descServiceAnnotationsHelp = "Kubernetes annotations converted to Prometheus labels."
3636
descServiceLabelsName = "kube_service_labels"
3737
descServiceLabelsHelp = "Kubernetes labels converted to Prometheus labels."
38-
descServiceLabelsDefaultLabels = []string{"namespace", "service"}
38+
descServiceLabelsDefaultLabels = []string{"namespace", "service", "uid"}
3939
)
4040

4141
func serviceMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
@@ -180,7 +180,7 @@ func wrapSvcFunc(f func(*v1.Service) *metric.Family) func(interface{}) *metric.F
180180
metricFamily := f(svc)
181181

182182
for _, m := range metricFamily.Metrics {
183-
m.LabelKeys, m.LabelValues = mergeKeyValues(descServiceLabelsDefaultLabels, []string{svc.Namespace, svc.Name}, m.LabelKeys, m.LabelValues)
183+
m.LabelKeys, m.LabelValues = mergeKeyValues(descServiceLabelsDefaultLabels, []string{svc.Namespace, svc.Name, string(svc.UID)}, m.LabelKeys, m.LabelValues)
184184
}
185185

186186
return metricFamily

internal/store/service_test.go

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func TestServiceStore(t *testing.T) {
5252
Name: "test-service1",
5353
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
5454
Namespace: "default",
55+
UID: "uid1",
5556
Labels: map[string]string{
5657
"app": "example1",
5758
},
@@ -72,11 +73,11 @@ func TestServiceStore(t *testing.T) {
7273
# TYPE kube_service_info gauge
7374
# TYPE kube_service_labels gauge
7475
# TYPE kube_service_spec_type gauge
75-
kube_service_annotations{namespace="default",service="test-service1"} 1
76-
kube_service_created{namespace="default",service="test-service1"} 1.5e+09
77-
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1"} 1
78-
kube_service_labels{namespace="default",service="test-service1"} 1
79-
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP"} 1
76+
kube_service_annotations{namespace="default",service="test-service1",uid="uid1"} 1
77+
kube_service_created{namespace="default",service="test-service1",uid="uid1"} 1.5e+09
78+
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1",uid="uid1"} 1
79+
kube_service_labels{namespace="default",service="test-service1",uid="uid1"} 1
80+
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP",uid="uid1"} 1
8081
`,
8182
MetricNames: []string{
8283
"kube_service_annotations",
@@ -93,6 +94,7 @@ func TestServiceStore(t *testing.T) {
9394
Name: "test-service2",
9495
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
9596
Namespace: "default",
97+
UID: "uid2",
9698
Labels: map[string]string{
9799
"app": "example2",
98100
},
@@ -103,11 +105,11 @@ func TestServiceStore(t *testing.T) {
103105
},
104106
},
105107
Want: metadata + `
106-
kube_service_annotations{namespace="default",service="test-service2"} 1
107-
kube_service_created{namespace="default",service="test-service2"} 1.5e+09
108-
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2"} 1
109-
kube_service_labels{namespace="default",service="test-service2"} 1
110-
kube_service_spec_type{namespace="default",service="test-service2",type="NodePort"} 1
108+
kube_service_annotations{namespace="default",service="test-service2",uid="uid2"} 1
109+
kube_service_created{namespace="default",service="test-service2",uid="uid2"} 1.5e+09
110+
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2",uid="uid2"} 1
111+
kube_service_labels{namespace="default",service="test-service2",uid="uid2"} 1
112+
kube_service_spec_type{namespace="default",service="test-service2",uid="uid2",type="NodePort"} 1
111113
`,
112114
},
113115
{
@@ -116,6 +118,7 @@ func TestServiceStore(t *testing.T) {
116118
Name: "test-service3",
117119
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
118120
Namespace: "default",
121+
UID: "uid3",
119122
Labels: map[string]string{
120123
"app": "example3",
121124
},
@@ -127,11 +130,11 @@ func TestServiceStore(t *testing.T) {
127130
},
128131
},
129132
Want: metadata + `
130-
kube_service_annotations{namespace="default",service="test-service3"} 1
131-
kube_service_created{namespace="default",service="test-service3"} 1.5e+09
132-
kube_service_info{cluster_ip="1.2.3.6",external_name="",load_balancer_ip="1.2.3.7",namespace="default",service="test-service3"} 1
133-
kube_service_labels{namespace="default",service="test-service3"} 1
134-
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer"} 1
133+
kube_service_annotations{namespace="default",service="test-service3",uid="uid3"} 1
134+
kube_service_created{namespace="default",service="test-service3",uid="uid3"} 1.5e+09
135+
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
136+
kube_service_labels{namespace="default",service="test-service3",uid="uid3"} 1
137+
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer",uid="uid3"} 1
135138
`,
136139
},
137140
{
@@ -140,6 +143,7 @@ func TestServiceStore(t *testing.T) {
140143
Name: "test-service4",
141144
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
142145
Namespace: "default",
146+
UID: "uid4",
143147
Labels: map[string]string{
144148
"app": "example4",
145149
},
@@ -150,11 +154,11 @@ func TestServiceStore(t *testing.T) {
150154
},
151155
},
152156
Want: metadata + `
153-
kube_service_annotations{namespace="default",service="test-service4"} 1
154-
kube_service_created{namespace="default",service="test-service4"} 1.5e+09
155-
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4"} 1
156-
kube_service_labels{namespace="default",service="test-service4"} 1
157-
kube_service_spec_type{namespace="default",service="test-service4",type="ExternalName"} 1
157+
kube_service_annotations{namespace="default",service="test-service4",uid="uid4"} 1
158+
kube_service_created{namespace="default",service="test-service4",uid="uid4"} 1.5e+09
159+
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4",uid="uid4"} 1
160+
kube_service_labels{namespace="default",service="test-service4",uid="uid4"} 1
161+
kube_service_spec_type{namespace="default",service="test-service4",uid="uid4",type="ExternalName"} 1
158162
`,
159163
},
160164
{
@@ -163,6 +167,7 @@ func TestServiceStore(t *testing.T) {
163167
Name: "test-service5",
164168
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
165169
Namespace: "default",
170+
UID: "uid5",
166171
Labels: map[string]string{
167172
"app": "example5",
168173
},
@@ -182,12 +187,12 @@ func TestServiceStore(t *testing.T) {
182187
},
183188
},
184189
Want: metadata + `
185-
kube_service_annotations{namespace="default",service="test-service5"} 1
186-
kube_service_created{namespace="default",service="test-service5"} 1.5e+09
187-
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service5"} 1
188-
kube_service_labels{namespace="default",service="test-service5"} 1
189-
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer"} 1
190-
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5"} 1
190+
kube_service_annotations{namespace="default",service="test-service5",uid="uid5"} 1
191+
kube_service_created{namespace="default",service="test-service5",uid="uid5"} 1.5e+09
192+
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service5",uid="uid5"} 1
193+
kube_service_labels{namespace="default",service="test-service5",uid="uid5"} 1
194+
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer",uid="uid5"} 1
195+
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5",uid="uid5"} 1
191196
`,
192197
},
193198
{
@@ -196,6 +201,7 @@ func TestServiceStore(t *testing.T) {
196201
Name: "test-service6",
197202
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
198203
Namespace: "default",
204+
UID: "uid6",
199205
Labels: map[string]string{
200206
"app": "example6",
201207
},
@@ -209,13 +215,13 @@ func TestServiceStore(t *testing.T) {
209215
},
210216
},
211217
Want: metadata + `
212-
kube_service_annotations{namespace="default",service="test-service6"} 1
213-
kube_service_created{namespace="default",service="test-service6"} 1.5e+09
214-
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service6"} 1
215-
kube_service_labels{namespace="default",service="test-service6"} 1
216-
kube_service_spec_type{namespace="default",service="test-service6",type="ClusterIP"} 1
217-
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6"} 1
218-
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6"} 1
218+
kube_service_annotations{namespace="default",service="test-service6",uid="uid6"} 1
219+
kube_service_created{namespace="default",service="test-service6",uid="uid6"} 1.5e+09
220+
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service6",uid="uid6"} 1
221+
kube_service_labels{namespace="default",service="test-service6",uid="uid6"} 1
222+
kube_service_spec_type{namespace="default",service="test-service6",uid="uid6",type="ClusterIP"} 1
223+
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6",uid="uid6"} 1
224+
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6",uid="uid6"} 1
219225
`,
220226
},
221227
}

0 commit comments

Comments
 (0)