Skip to content

Commit 3bf7450

Browse files
authored
Merge pull request #142 from zoues/dev
add OwnerReference in kube_pod_info
2 parents dd6dffb + 0bacb5d commit 3bf7450

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

Documentation/pod-metrics.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| Metric name| Metric type | Labels/tags |
44
| ---------- | ----------- | ----------- |
5-
| kube_pod_info | Gauge | `pod`=&lt;pod-name&gt; <br> `namespace`=&lt;pod-namespace&gt; <br> `host_ip`=&lt;host-ip&gt; <br> `pod_ip`=&lt;pod-ip&gt; <br> `start_time`=&lt;date-time since kubelet acknowledged pod&gt; <br> `node`=&lt;node-name&gt;<br> `created_by`=&lt;created_by&gt; |
5+
| kube_pod_info | Gauge | `pod`=&lt;pod-name&gt; <br> `namespace`=&lt;pod-namespace&gt; <br> `host_ip`=&lt;host-ip&gt; <br> `pod_ip`=&lt;pod-ip&gt; <br> `start_time`=&lt;date-time since kubelet acknowledged pod&gt; <br> `node`=&lt;node-name&gt;<br> `created_by`=&lt;created_by&gt;<br> `owner_kind`=&lt;owner kind&gt; <br> `owner_name`=&lt;owner name&gt; <br> `owner_is_controller`=&lt;whether owner is controller&gt; |
66
| kube_pod_labels | Gauge | `pod`=&lt;pod-name&gt; <br> `namespace`=&lt;pod-namespace&gt; <br> `label_POD_LABEL`=&lt;POD_LABEL&gt; |
77
| kube_pod_status_phase | Gauge | `pod`=&lt;pod-name&gt; <br> `namespace`=&lt;pod-namespace&gt; <br> `phase`=&lt;Pending\|Running\|Succeeded\|Failed\|Unknown&gt; |
88
| kube_pod_status_ready | Gauge | `pod`=&lt;pod-name&gt; <br> `namespace`=&lt;pod-namespace&gt; <br> `condition`=&lt;true\|false\|unknown&gt; |

collectors/pod.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"encoding/json"
2121
"fmt"
2222
"regexp"
23+
"strconv"
2324

2425
"github.com/golang/glog"
2526
"github.com/prometheus/client_golang/prometheus"
@@ -39,9 +40,8 @@ var (
3940
descPodInfo = prometheus.NewDesc(
4041
"kube_pod_info",
4142
"Information about pod.",
42-
[]string{"namespace", "pod", "host_ip", "pod_ip", "node", "created_by"}, nil,
43+
[]string{"namespace", "pod", "host_ip", "pod_ip", "node", "created_by", "owner_kind", "owner_name", "owner_is_controller"}, nil,
4344
)
44-
4545
descPodLabels = prometheus.NewDesc(
4646
descPodLabelsName,
4747
descPodLabelsHelp,
@@ -238,8 +238,15 @@ func (pc *podCollector) collectPod(ch chan<- prometheus.Metric, p v1.Pod) {
238238
addCounter := func(desc *prometheus.Desc, v float64, lv ...string) {
239239
addConstMetric(desc, prometheus.CounterValue, v, lv...)
240240
}
241+
owners := p.GetOwnerReferences()
242+
if len(owners) == 0 {
243+
addGauge(descPodInfo, 1, p.Status.HostIP, p.Status.PodIP, nodeName, extractCreatedBy(p.Annotations), "<none>", "<none>", "<none>")
244+
} else {
245+
for _, owner := range owners {
246+
addGauge(descPodInfo, 1, p.Status.HostIP, p.Status.PodIP, nodeName, extractCreatedBy(p.Annotations), owner.Kind, owner.Name, strconv.FormatBool(*owner.Controller))
247+
}
248+
}
241249

242-
addGauge(descPodInfo, 1, p.Status.HostIP, p.Status.PodIP, nodeName, extractCreatedBy(p.Annotations))
243250
labelKeys, labelValues := kubeLabelsToPrometheusLabels(p.Labels)
244251
addGauge(podLabelsDesc(labelKeys), 1, labelValues...)
245252
addGauge(descPodStatusPhase, 1, string(p.Status.Phase))

collectors/pod_test.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func (ds mockPodStore) List() (pods []v1.Pod, err error) {
3434
func TestPodCollector(t *testing.T) {
3535
// Fixed metadata on type and help text. We prepend this to every expected
3636
// output so we only have to modify a single place when doing adjustments.
37+
var test = true
3738
const metadata = `
3839
# HELP kube_pod_container_info Information about a container in a pod.
3940
# TYPE kube_pod_container_info gauge
@@ -271,6 +272,13 @@ func TestPodCollector(t *testing.T) {
271272
ObjectMeta: v1.ObjectMeta{
272273
Name: "pod2",
273274
Namespace: "ns2",
275+
OwnerReferences: []v1.OwnerReference{
276+
{
277+
Kind: "ReplicaSet",
278+
Name: "rs-name",
279+
Controller: &test,
280+
},
281+
},
274282
},
275283
Spec: v1.PodSpec{
276284
NodeName: "node2",
@@ -282,8 +290,8 @@ func TestPodCollector(t *testing.T) {
282290
},
283291
},
284292
want: metadata + `
285-
kube_pod_info{created_by="<none>",host_ip="1.1.1.1",namespace="ns1",pod="pod1",node="node1",pod_ip="1.2.3.4"} 1
286-
kube_pod_info{created_by="<none>",host_ip="1.1.1.1",namespace="ns2",pod="pod2",node="node2",pod_ip="2.3.4.5"} 1
293+
kube_pod_info{created_by="<none>",host_ip="1.1.1.1",namespace="ns1",pod="pod1",node="node1",pod_ip="1.2.3.4",owner_kind="<none>",owner_name="<none>",owner_is_controller="<none>"} 1
294+
kube_pod_info{created_by="<none>",host_ip="1.1.1.1",namespace="ns2",pod="pod2",node="node2",pod_ip="2.3.4.5",owner_kind="ReplicaSet",owner_name="rs-name",owner_is_controller="true"} 1
287295
`,
288296
metrics: []string{"kube_pod_info"},
289297
}, {

0 commit comments

Comments
 (0)