Skip to content

Commit 59571c6

Browse files
committed
add external_ip label to kube_node_info metric
1 parent 98b38ba commit 59571c6

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

docs/node-metrics.md

+1-1
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_node_annotations | Gauge | Kubernetes annotations converted to Prometheus labels controlled via [--metric-annotations-allowlist](./cli-arguments.md) | | `node`=&lt;node-address&gt; <br> `annotation_NODE_ANNOTATION`=&lt;NODE_ANNOTATION&gt; | EXPERIMENTAL |
6-
| kube_node_info | Gauge | Information about a cluster node | | `node`=&lt;node-address&gt; <br> `kernel_version`=&lt;kernel-version&gt; <br> `os_image`=&lt;os-image-name&gt; <br> `container_runtime_version`=&lt;container-runtime-and-version-combination&gt; <br> `kubelet_version`=&lt;kubelet-version&gt; <br> `kubeproxy_version`=&lt;kubeproxy-version&gt; <br> `pod_cidr`=&lt;pod-cidr&gt; <br> `provider_id`=&lt;provider-id&gt; <br> `system_uuid`=&lt;system-uuid&gt; <br> `internal_ip`=&lt;internal-ip&gt; | STABLE |
6+
| kube_node_info | Gauge | Information about a cluster node | | `node`=&lt;node-address&gt; <br> `kernel_version`=&lt;kernel-version&gt; <br> `os_image`=&lt;os-image-name&gt; <br> `container_runtime_version`=&lt;container-runtime-and-version-combination&gt; <br> `kubelet_version`=&lt;kubelet-version&gt; <br> `kubeproxy_version`=&lt;kubeproxy-version&gt; <br> `pod_cidr`=&lt;pod-cidr&gt; <br> `provider_id`=&lt;provider-id&gt; <br> `system_uuid`=&lt;system-uuid&gt; <br> `internal_ip`=&lt;internal-ip&gt; <br> `external_ip`=&lt;external-ip&gt; | STABLE |
77
| kube_node_labels | Gauge | Kubernetes labels converted to Prometheus labels controlled via [--metric-labels-allowlist](./cli-arguments.md) | | `node`=&lt;node-address&gt; <br> `label_NODE_LABEL`=&lt;NODE_LABEL&gt; | STABLE |
88
| kube_node_role | Gauge | The role of a cluster node | | `node`=&lt;node-address&gt; <br> `role`=&lt;NODE_ROLE&gt; | EXPERIMENTAL |
99
| kube_node_spec_unschedulable | Gauge | Whether a node can schedule new pods | | `node`=&lt;node-address&gt; | STABLE |

internal/store/node.go

+9
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,15 @@ func createNodeInfoFamilyGenerator() generator.FamilyGenerator {
143143
labelKeys = append(labelKeys, "internal_ip")
144144
labelValues = append(labelValues, internalIP)
145145

146+
externalIP := ""
147+
for _, address := range n.Status.Addresses {
148+
if address.Type == "ExternalIP" {
149+
externalIP = address.Address
150+
}
151+
}
152+
labelKeys = append(labelKeys, "external_ip")
153+
labelValues = append(labelValues, externalIP)
154+
146155
return &metric.Family{
147156
Metrics: []*metric.Metric{
148157
{

internal/store/node_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ func TestNodeStore(t *testing.T) {
4646
},
4747
Addresses: []v1.NodeAddress{
4848
{Type: "InternalIP", Address: "1.2.3.4"},
49+
{Type: "ExternalIP", Address: "5.6.7.8"},
50+
4951
},
5052
},
5153
Spec: v1.NodeSpec{
@@ -60,7 +62,7 @@ func TestNodeStore(t *testing.T) {
6062
# TYPE kube_node_info gauge
6163
# TYPE kube_node_labels gauge
6264
# TYPE kube_node_spec_unschedulable gauge
63-
kube_node_info{container_runtime_version="rkt",kernel_version="kernel",kubelet_version="kubelet",kubeproxy_version="kubeproxy",node="127.0.0.1",os_image="osimage",pod_cidr="172.24.10.0/24",provider_id="provider://i-uniqueid",internal_ip="1.2.3.4",system_uuid="6a934e21-5207-4a84-baea-3a952d926c80"} 1
65+
kube_node_info{container_runtime_version="rkt",kernel_version="kernel",kubelet_version="kubelet",kubeproxy_version="kubeproxy",node="127.0.0.1",os_image="osimage",pod_cidr="172.24.10.0/24",provider_id="provider://i-uniqueid",internal_ip="1.2.3.4",external_ip="5.6.7.8",system_uuid="6a934e21-5207-4a84-baea-3a952d926c80"} 1
6466
kube_node_spec_unschedulable{node="127.0.0.1"} 0
6567
`,
6668
MetricNames: []string{"kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info"},
@@ -75,7 +77,7 @@ func TestNodeStore(t *testing.T) {
7577
Want: `
7678
# HELP kube_node_info [STABLE] Information about a cluster node.
7779
# TYPE kube_node_info gauge
78-
kube_node_info{container_runtime_version="",kernel_version="",kubelet_version="",kubeproxy_version="",node="",os_image="",pod_cidr="",provider_id="",internal_ip="",system_uuid=""} 1
80+
kube_node_info{container_runtime_version="",kernel_version="",kubelet_version="",kubeproxy_version="",node="",os_image="",pod_cidr="",provider_id="",internal_ip="",external_ip="",system_uuid=""} 1
7981
`,
8082
MetricNames: []string{"kube_node_info"},
8183
},
@@ -105,6 +107,7 @@ func TestNodeStore(t *testing.T) {
105107
},
106108
Addresses: []v1.NodeAddress{
107109
{Type: "InternalIP", Address: "1.2.3.4"},
110+
{Type: "ExternalIP", Address: "5.6.7.8"},
108111
},
109112
Capacity: v1.ResourceList{
110113
v1.ResourceCPU: resource.MustParse("4.3"),
@@ -140,7 +143,7 @@ func TestNodeStore(t *testing.T) {
140143
# TYPE kube_node_status_allocatable gauge
141144
# TYPE kube_node_status_capacity gauge
142145
kube_node_created{node="127.0.0.1"} 1.5e+09
143-
kube_node_info{container_runtime_version="rkt",kernel_version="kernel",kubelet_version="kubelet",kubeproxy_version="kubeproxy",node="127.0.0.1",os_image="osimage",pod_cidr="172.24.10.0/24",provider_id="provider://i-randomidentifier",internal_ip="1.2.3.4",system_uuid="6a934e21-5207-4a84-baea-3a952d926c80"} 1
146+
kube_node_info{container_runtime_version="rkt",kernel_version="kernel",kubelet_version="kubelet",kubeproxy_version="kubeproxy",node="127.0.0.1",os_image="osimage",pod_cidr="172.24.10.0/24",provider_id="provider://i-randomidentifier",internal_ip="1.2.3.4",external_ip="5.6.7.8",system_uuid="6a934e21-5207-4a84-baea-3a952d926c80"} 1
144147
kube_node_role{node="127.0.0.1",role="master"} 1
145148
kube_node_spec_unschedulable{node="127.0.0.1"} 1
146149
kube_node_status_allocatable{node="127.0.0.1",resource="cpu",unit="core"} 3

0 commit comments

Comments
 (0)