Skip to content

Commit

Permalink
add external_ip label to kube_node_info metric
Browse files Browse the repository at this point in the history
  • Loading branch information
stonith committed Nov 29, 2023
1 parent 98b38ba commit 25bdd67
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
2 changes: 1 addition & 1 deletion docs/node-metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
| Metric name | Metric type | Description | Unit (where applicable) | Labels/tags | Status |
| ---------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| 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 |
| 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 |
| 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 |
| 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 |
| kube_node_role | Gauge | The role of a cluster node | | `node`=&lt;node-address&gt; <br> `role`=&lt;NODE_ROLE&gt; | EXPERIMENTAL |
| kube_node_spec_unschedulable | Gauge | Whether a node can schedule new pods | | `node`=&lt;node-address&gt; | STABLE |
Expand Down
9 changes: 9 additions & 0 deletions internal/store/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,15 @@ func createNodeInfoFamilyGenerator() generator.FamilyGenerator {
labelKeys = append(labelKeys, "internal_ip")
labelValues = append(labelValues, internalIP)

externalIP := ""
for _, address := range n.Status.Addresses {
if address.Type == "ExternalIP" {
externalIP = address.Address
}
}
labelKeys = append(labelKeys, "external_ip")
labelValues = append(labelValues, externalIP)

return &metric.Family{
Metrics: []*metric.Metric{
{
Expand Down
8 changes: 5 additions & 3 deletions internal/store/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ func TestNodeStore(t *testing.T) {
},
Addresses: []v1.NodeAddress{
{Type: "InternalIP", Address: "1.2.3.4"},
{Type: "ExternalIP", Address: "5.6.7.8"},
},
},
Spec: v1.NodeSpec{
Expand All @@ -60,7 +61,7 @@ func TestNodeStore(t *testing.T) {
# TYPE kube_node_info gauge
# TYPE kube_node_labels gauge
# TYPE kube_node_spec_unschedulable gauge
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
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
kube_node_spec_unschedulable{node="127.0.0.1"} 0
`,
MetricNames: []string{"kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info"},
Expand All @@ -75,7 +76,7 @@ func TestNodeStore(t *testing.T) {
Want: `
# HELP kube_node_info [STABLE] Information about a cluster node.
# TYPE kube_node_info gauge
kube_node_info{container_runtime_version="",kernel_version="",kubelet_version="",kubeproxy_version="",node="",os_image="",pod_cidr="",provider_id="",internal_ip="",system_uuid=""} 1
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
`,
MetricNames: []string{"kube_node_info"},
},
Expand Down Expand Up @@ -105,6 +106,7 @@ func TestNodeStore(t *testing.T) {
},
Addresses: []v1.NodeAddress{
{Type: "InternalIP", Address: "1.2.3.4"},
{Type: "ExternalIP", Address: "5.6.7.8"},
},
Capacity: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("4.3"),
Expand Down Expand Up @@ -140,7 +142,7 @@ func TestNodeStore(t *testing.T) {
# TYPE kube_node_status_allocatable gauge
# TYPE kube_node_status_capacity gauge
kube_node_created{node="127.0.0.1"} 1.5e+09
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
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
kube_node_role{node="127.0.0.1",role="master"} 1
kube_node_spec_unschedulable{node="127.0.0.1"} 1
kube_node_status_allocatable{node="127.0.0.1",resource="cpu",unit="core"} 3
Expand Down

0 comments on commit 25bdd67

Please sign in to comment.