Skip to content

Commit

Permalink
Merge pull request #1687 from liangyuanpeng/support_uid_service
Browse files Browse the repository at this point in the history
Add default label of uid for service
  • Loading branch information
k8s-ci-robot committed Feb 28, 2022
2 parents 5db4c85 + 5453753 commit 6a8c6f8
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 42 deletions.
14 changes: 7 additions & 7 deletions docs/service-metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

| Metric name| Metric type | Description | Unit (where applicable) | Labels/tags | Status |
| ---------- | ----------- | ----------- | ----------------------- | ----------- | ------ |
| 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 |
| 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 |
| 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 |
| kube_service_created | Gauge | Unix creation timestamp | seconds |`service`=&lt;service-name&gt; <br> `namespace`=&lt;service-namespace&gt; | STABLE |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
4 changes: 2 additions & 2 deletions internal/store/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ var (
descServiceAnnotationsHelp = "Kubernetes annotations converted to Prometheus labels."
descServiceLabelsName = "kube_service_labels"
descServiceLabelsHelp = "Kubernetes labels converted to Prometheus labels."
descServiceLabelsDefaultLabels = []string{"namespace", "service"}
descServiceLabelsDefaultLabels = []string{"namespace", "service", "uid"}
)

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

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

return metricFamily
Expand Down
72 changes: 39 additions & 33 deletions internal/store/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service1",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid1",
Labels: map[string]string{
"app": "example1",
},
Expand All @@ -72,11 +73,11 @@ func TestServiceStore(t *testing.T) {
# TYPE kube_service_info gauge
# TYPE kube_service_labels gauge
# TYPE kube_service_spec_type gauge
kube_service_annotations{namespace="default",service="test-service1"} 1
kube_service_created{namespace="default",service="test-service1"} 1.5e+09
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1"} 1
kube_service_labels{namespace="default",service="test-service1"} 1
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP"} 1
kube_service_annotations{namespace="default",service="test-service1",uid="uid1"} 1
kube_service_created{namespace="default",service="test-service1",uid="uid1"} 1.5e+09
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1",uid="uid1"} 1
kube_service_labels{namespace="default",service="test-service1",uid="uid1"} 1
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP",uid="uid1"} 1
`,
MetricNames: []string{
"kube_service_annotations",
Expand All @@ -93,6 +94,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service2",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid2",
Labels: map[string]string{
"app": "example2",
},
Expand All @@ -103,11 +105,11 @@ func TestServiceStore(t *testing.T) {
},
},
Want: metadata + `
kube_service_annotations{namespace="default",service="test-service2"} 1
kube_service_created{namespace="default",service="test-service2"} 1.5e+09
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2"} 1
kube_service_labels{namespace="default",service="test-service2"} 1
kube_service_spec_type{namespace="default",service="test-service2",type="NodePort"} 1
kube_service_annotations{namespace="default",service="test-service2",uid="uid2"} 1
kube_service_created{namespace="default",service="test-service2",uid="uid2"} 1.5e+09
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2",uid="uid2"} 1
kube_service_labels{namespace="default",service="test-service2",uid="uid2"} 1
kube_service_spec_type{namespace="default",service="test-service2",uid="uid2",type="NodePort"} 1
`,
},
{
Expand All @@ -116,6 +118,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service3",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid3",
Labels: map[string]string{
"app": "example3",
},
Expand All @@ -127,11 +130,11 @@ func TestServiceStore(t *testing.T) {
},
},
Want: metadata + `
kube_service_annotations{namespace="default",service="test-service3"} 1
kube_service_created{namespace="default",service="test-service3"} 1.5e+09
kube_service_info{cluster_ip="1.2.3.6",external_name="",load_balancer_ip="1.2.3.7",namespace="default",service="test-service3"} 1
kube_service_labels{namespace="default",service="test-service3"} 1
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer"} 1
kube_service_annotations{namespace="default",service="test-service3",uid="uid3"} 1
kube_service_created{namespace="default",service="test-service3",uid="uid3"} 1.5e+09
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
kube_service_labels{namespace="default",service="test-service3",uid="uid3"} 1
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer",uid="uid3"} 1
`,
},
{
Expand All @@ -140,6 +143,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service4",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid4",
Labels: map[string]string{
"app": "example4",
},
Expand All @@ -150,11 +154,11 @@ func TestServiceStore(t *testing.T) {
},
},
Want: metadata + `
kube_service_annotations{namespace="default",service="test-service4"} 1
kube_service_created{namespace="default",service="test-service4"} 1.5e+09
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4"} 1
kube_service_labels{namespace="default",service="test-service4"} 1
kube_service_spec_type{namespace="default",service="test-service4",type="ExternalName"} 1
kube_service_annotations{namespace="default",service="test-service4",uid="uid4"} 1
kube_service_created{namespace="default",service="test-service4",uid="uid4"} 1.5e+09
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4",uid="uid4"} 1
kube_service_labels{namespace="default",service="test-service4",uid="uid4"} 1
kube_service_spec_type{namespace="default",service="test-service4",uid="uid4",type="ExternalName"} 1
`,
},
{
Expand All @@ -163,6 +167,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service5",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid5",
Labels: map[string]string{
"app": "example5",
},
Expand All @@ -182,12 +187,12 @@ func TestServiceStore(t *testing.T) {
},
},
Want: metadata + `
kube_service_annotations{namespace="default",service="test-service5"} 1
kube_service_created{namespace="default",service="test-service5"} 1.5e+09
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service5"} 1
kube_service_labels{namespace="default",service="test-service5"} 1
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer"} 1
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5"} 1
kube_service_annotations{namespace="default",service="test-service5",uid="uid5"} 1
kube_service_created{namespace="default",service="test-service5",uid="uid5"} 1.5e+09
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service5",uid="uid5"} 1
kube_service_labels{namespace="default",service="test-service5",uid="uid5"} 1
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer",uid="uid5"} 1
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5",uid="uid5"} 1
`,
},
{
Expand All @@ -196,6 +201,7 @@ func TestServiceStore(t *testing.T) {
Name: "test-service6",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Namespace: "default",
UID: "uid6",
Labels: map[string]string{
"app": "example6",
},
Expand All @@ -209,13 +215,13 @@ func TestServiceStore(t *testing.T) {
},
},
Want: metadata + `
kube_service_annotations{namespace="default",service="test-service6"} 1
kube_service_created{namespace="default",service="test-service6"} 1.5e+09
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service6"} 1
kube_service_labels{namespace="default",service="test-service6"} 1
kube_service_spec_type{namespace="default",service="test-service6",type="ClusterIP"} 1
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6"} 1
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6"} 1
kube_service_annotations{namespace="default",service="test-service6",uid="uid6"} 1
kube_service_created{namespace="default",service="test-service6",uid="uid6"} 1.5e+09
kube_service_info{cluster_ip="",external_name="",load_balancer_ip="",namespace="default",service="test-service6",uid="uid6"} 1
kube_service_labels{namespace="default",service="test-service6",uid="uid6"} 1
kube_service_spec_type{namespace="default",service="test-service6",uid="uid6",type="ClusterIP"} 1
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6",uid="uid6"} 1
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6",uid="uid6"} 1
`,
},
}
Expand Down

0 comments on commit 6a8c6f8

Please sign in to comment.