Skip to content

Commit 0bc4b19

Browse files
authored
Merge pull request #2252 from stonith/add-externalip-node-info
feat: add kube_node_status_addresses metric
2 parents 8c1153e + 069aeeb commit 0bc4b19

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

docs/node-metrics.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
| kube_node_spec_unschedulable | Gauge | Whether a node can schedule new pods | | `node`=<node-address> | STABLE |
1010
| kube_node_spec_taint | Gauge | The taint of a cluster node. | | `node`=&lt;node-address&gt; <br> `key`=&lt;taint-key&gt; <br> `value=`&lt;taint-value&gt; <br> `effect=`&lt;taint-effect&gt; | STABLE |
1111
| kube_node_status_capacity | Gauge | The total amount of resources available for a node | `cpu`=&lt;core&gt; <br> `ephemeral_storage`=&lt;byte&gt; <br> `pods`=&lt;integer&gt; <br> `attachable_volumes_*`=&lt;byte&gt; <br> `hugepages_*`=&lt;byte&gt; <br> `memory`=&lt;byte&gt; | `node`=&lt;node-address&gt; <br> `resource`=&lt;resource-name&gt; <br> `unit`=&lt;resource-unit&gt; | STABLE |
12+
| kube_node_status_addresses | Gauge | The addresses of a node | | `node`=&lt;node-address&gt; <br> `type`=&lt;address-type&gt; <br> `address`=&lt;address-value&gt; | EXPERIMENTAL |
1213
| kube_node_status_allocatable | Gauge | The amount of resources allocatable for pods (after reserving some for system daemons) | `cpu`=&lt;core&gt; <br> `ephemeral_storage`=&lt;byte&gt; <br> `pods`=&lt;integer&gt; <br> `attachable_volumes_*`=&lt;byte&gt; <br> `hugepages_*`=&lt;byte&gt; <br> `memory`=&lt;byte&gt; | `node`=&lt;node-address&gt; <br> `resource`=&lt;resource-name&gt; <br> `unit`=&lt;resource-unit&gt; | STABLE |
1314
| kube_node_status_condition | Gauge | The condition of a cluster node | | `node`=&lt;node-address&gt; <br> `condition`=&lt;node-condition&gt; <br> `status`=&lt;true\|false\|unknown&gt; | STABLE |
1415
| kube_node_created | Gauge | Unix creation timestamp | seconds | `node`=&lt;node-address&gt; | STABLE |

internal/store/node.go

+25
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func nodeMetricFamilies(allowAnnotationsList, allowLabelsList []string) []genera
5555
createNodeStatusAllocatableFamilyGenerator(),
5656
createNodeStatusCapacityFamilyGenerator(),
5757
createNodeStatusConditionFamilyGenerator(),
58+
createNodeStateAddressFamilyGenerator(),
5859
}
5960
}
6061

@@ -105,6 +106,29 @@ func createNodeCreatedFamilyGenerator() generator.FamilyGenerator {
105106
)
106107
}
107108

109+
func createNodeStateAddressFamilyGenerator() generator.FamilyGenerator {
110+
return *generator.NewFamilyGeneratorWithStability(
111+
"kube_node_status_addresses",
112+
"Node address information.",
113+
metric.Gauge,
114+
basemetrics.ALPHA,
115+
"",
116+
wrapNodeFunc(func(n *v1.Node) *metric.Family {
117+
ms := []*metric.Metric{}
118+
for _, address := range n.Status.Addresses {
119+
ms = append(ms, &metric.Metric{
120+
LabelKeys: []string{"type", "address"},
121+
LabelValues: []string{string(address.Type), address.Address},
122+
Value: 1,
123+
})
124+
}
125+
return &metric.Family{
126+
Metrics: ms,
127+
}
128+
}),
129+
)
130+
}
131+
108132
func createNodeInfoFamilyGenerator() generator.FamilyGenerator {
109133
return *generator.NewFamilyGeneratorWithStability(
110134
"kube_node_info",
@@ -134,6 +158,7 @@ func createNodeInfoFamilyGenerator() generator.FamilyGenerator {
134158
n.Status.NodeInfo.SystemUUID,
135159
}
136160

161+
// TODO: remove internal_ip in v3, replaced by kube_node_status_addresses
137162
internalIP := ""
138163
for _, address := range n.Status.Addresses {
139164
if address.Type == "InternalIP" {

internal/store/node_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,30 @@ func TestNodeStore(t *testing.T) {
274274
`,
275275
MetricNames: []string{"kube_node_spec_taint"},
276276
},
277+
{
278+
Obj: &v1.Node{
279+
ObjectMeta: metav1.ObjectMeta{
280+
Name: "127.0.0.1",
281+
},
282+
Status: v1.NodeStatus{
283+
Addresses: []v1.NodeAddress{
284+
{Type: "InternalIP", Address: "1.2.3.4"},
285+
{Type: "InternalIP", Address: "fc00::"},
286+
{Type: "ExternalIP", Address: "5.6.7.8"},
287+
{Type: "ExternalIP", Address: "2001:db8::"},
288+
},
289+
},
290+
},
291+
Want: `
292+
# HELP kube_node_status_addresses Node address information.
293+
# TYPE kube_node_status_addresses gauge
294+
kube_node_status_addresses{node="127.0.0.1",type="InternalIP",address="1.2.3.4"} 1
295+
kube_node_status_addresses{node="127.0.0.1",type="InternalIP",address="fc00::"} 1
296+
kube_node_status_addresses{node="127.0.0.1",type="ExternalIP",address="5.6.7.8"} 1
297+
kube_node_status_addresses{node="127.0.0.1",type="ExternalIP",address="2001:db8::"} 1
298+
`,
299+
MetricNames: []string{"kube_node_status_addresses"},
300+
},
277301
}
278302
for i, c := range cases {
279303
c.Func = generator.ComposeMetricGenFuncs(nodeMetricFamilies(nil, nil))

0 commit comments

Comments
 (0)