Skip to content

Commit 04ac65b

Browse files
authored
Merge pull request #1652 from adammw/adammw/ingressclass
Add ingressclass to kube_ingress_info metric
2 parents b761b53 + 8608588 commit 04ac65b

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed

docs/ingress-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 | Labels/tags | Status |
44
| ---------- | ----------- | ----------- | ----------- |
55
| kube_ingress_annotations | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; <br> `annotation_INGRESS_ANNOTATION`=&lt;ANNOTATION_LABEL&gt; | EXPERIMENTAL |
6-
| kube_ingress_info | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; | STABLE |
6+
| kube_ingress_info | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; <br> `ingressclass`=&lt;ingress-class&gt; or `_default` if not set | STABLE |
77
| kube_ingress_labels | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; <br> `label_INGRESS_LABEL`=&lt;INGRESS_LABEL&gt; | STABLE |
88
| kube_ingress_created | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; | STABLE |
99
| kube_ingress_metadata_resource_version | Gauge | `ingress`=&lt;ingress-name&gt; <br> `namespace`=&lt;ingress-namespace&gt; | EXPERIMENTAL |

internal/store/ingress.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,21 @@ func ingressMetricFamilies(allowAnnotationsList, allowLabelsList []string) []gen
4646
"Information about ingress.",
4747
metric.Gauge,
4848
"",
49-
wrapIngressFunc(func(s *networkingv1.Ingress) *metric.Family {
49+
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
50+
ingressClassName := "_default"
51+
if i.Spec.IngressClassName != nil {
52+
ingressClassName = *i.Spec.IngressClassName
53+
}
54+
if className, ok := i.Annotations["kubernetes.io/ingress.class"]; ok {
55+
ingressClassName = className
56+
}
57+
5058
return &metric.Family{
5159
Metrics: []*metric.Metric{
5260
{
53-
Value: 1,
61+
LabelKeys: []string{"ingressclass"},
62+
LabelValues: []string{ingressClassName},
63+
Value: 1,
5464
},
5565
}}
5666
}),

internal/store/ingress_test.go

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
func TestIngressStore(t *testing.T) {
2929
startTime := 1501569018
3030
metav1StartTime := metav1.Unix(int64(startTime), 0)
31+
testIngressClass := "test"
3132

3233
// Fixed metadata on type and help text. We prepend this to every expected
3334
// output so we only have to modify a single place when doing adjustments.
@@ -70,7 +71,7 @@ func TestIngressStore(t *testing.T) {
7071
# TYPE kube_ingress_annotations gauge
7172
# TYPE kube_ingress_labels gauge
7273
# TYPE kube_ingress_metadata_resource_version gauge
73-
kube_ingress_info{namespace="ns1",ingress="ingress1"} 1
74+
kube_ingress_info{namespace="ns1",ingress="ingress1",ingressclass="_default"} 1
7475
kube_ingress_metadata_resource_version{namespace="ns1",ingress="ingress1"} 0
7576
kube_ingress_annotations{annotation_app_k8s_io_owner="@foo",namespace="ns1",ingress="ingress1"} 1
7677
kube_ingress_labels{namespace="ns1",ingress="ingress1"} 1
@@ -92,7 +93,7 @@ func TestIngressStore(t *testing.T) {
9293
},
9394
},
9495
Want: metadata + `
95-
kube_ingress_info{namespace="ns2",ingress="ingress2"} 1
96+
kube_ingress_info{namespace="ns2",ingress="ingress2",ingressclass="_default"} 1
9697
kube_ingress_created{namespace="ns2",ingress="ingress2"} 1.501569018e+09
9798
kube_ingress_metadata_resource_version{namespace="ns2",ingress="ingress2"} 123456
9899
kube_ingress_labels{namespace="ns2",ingress="ingress2"} 1
@@ -110,7 +111,7 @@ func TestIngressStore(t *testing.T) {
110111
},
111112
},
112113
Want: metadata + `
113-
kube_ingress_info{namespace="ns3",ingress="ingress3"} 1
114+
kube_ingress_info{namespace="ns3",ingress="ingress3",ingressclass="_default"} 1
114115
kube_ingress_created{namespace="ns3",ingress="ingress3"} 1.501569018e+09
115116
kube_ingress_labels{namespace="ns3",ingress="ingress3"} 1
116117
`,
@@ -154,7 +155,7 @@ func TestIngressStore(t *testing.T) {
154155
},
155156
},
156157
Want: metadata + `
157-
kube_ingress_info{namespace="ns4",ingress="ingress4"} 1
158+
kube_ingress_info{namespace="ns4",ingress="ingress4",ingressclass="_default"} 1
158159
kube_ingress_created{namespace="ns4",ingress="ingress4"} 1.501569018e+09
159160
kube_ingress_labels{namespace="ns4",ingress="ingress4"} 1
160161
kube_ingress_path{namespace="ns4",ingress="ingress4",host="somehost",path="/somepath",service_name="someservice",service_port="1234"} 1
@@ -180,14 +181,54 @@ func TestIngressStore(t *testing.T) {
180181
},
181182
},
182183
Want: metadata + `
183-
kube_ingress_info{namespace="ns5",ingress="ingress5"} 1
184+
kube_ingress_info{namespace="ns5",ingress="ingress5",ingressclass="_default"} 1
184185
kube_ingress_created{namespace="ns5",ingress="ingress5"} 1.501569018e+09
185186
kube_ingress_labels{namespace="ns5",ingress="ingress5"} 1
186187
kube_ingress_tls{namespace="ns5",ingress="ingress5",tls_host="somehost1",secret="somesecret"} 1
187188
kube_ingress_tls{namespace="ns5",ingress="ingress5",tls_host="somehost2",secret="somesecret"} 1
188189
`,
189190
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
190191
},
192+
{
193+
Obj: &networkingv1.Ingress{
194+
ObjectMeta: metav1.ObjectMeta{
195+
Name: "ingress6",
196+
Namespace: "ns6",
197+
CreationTimestamp: metav1StartTime,
198+
ResourceVersion: "123456",
199+
},
200+
Spec: networkingv1.IngressSpec{
201+
IngressClassName: &testIngressClass,
202+
},
203+
},
204+
Want: metadata + `
205+
kube_ingress_info{namespace="ns6",ingress="ingress6",ingressclass="test"} 1
206+
kube_ingress_created{namespace="ns6",ingress="ingress6"} 1.501569018e+09
207+
kube_ingress_metadata_resource_version{namespace="ns6",ingress="ingress6"} 123456
208+
kube_ingress_labels{namespace="ns6",ingress="ingress6"} 1
209+
`,
210+
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
211+
},
212+
{
213+
Obj: &networkingv1.Ingress{
214+
ObjectMeta: metav1.ObjectMeta{
215+
Name: "ingress7",
216+
Namespace: "ns7",
217+
CreationTimestamp: metav1StartTime,
218+
ResourceVersion: "123456",
219+
Annotations: map[string]string{
220+
"kubernetes.io/ingress.class": "test",
221+
},
222+
},
223+
},
224+
Want: metadata + `
225+
kube_ingress_info{namespace="ns7",ingress="ingress7",ingressclass="test"} 1
226+
kube_ingress_created{namespace="ns7",ingress="ingress7"} 1.501569018e+09
227+
kube_ingress_metadata_resource_version{namespace="ns7",ingress="ingress7"} 123456
228+
kube_ingress_labels{namespace="ns7",ingress="ingress7"} 1
229+
`,
230+
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
231+
},
191232
}
192233
for i, c := range cases {
193234
c.Func = generator.ComposeMetricGenFuncs(ingressMetricFamilies(c.AllowAnnotationsList, c.AllowLabelsList))

0 commit comments

Comments
 (0)