Skip to content

Commit cce1e33

Browse files
authored
Merge pull request #1146 from povilasv/add-volume-id
add aws/gce volume id to kube_persistentvolume_info
2 parents 0bfc298 + a78b0e7 commit cce1e33

File tree

4 files changed

+71
-5
lines changed

4 files changed

+71
-5
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## MASTER
2+
3+
* [FEATURE] Add ebs_volume_id and gce_persistent_disk_name to kube_persistentvolume_info metric. #1146
4+
15
## v1.9.5 / 2020-02-20
26

37
* [BUGFIX] Switch to using only v1 client of validatingwebhookconfiguration #1052

docs/persistentvolume-metrics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
| kube_persistentvolume_capacity_bytes | Gauge | `persistentvolume`=<pv-name> | STABLE |
66
| kube_persistentvolume_status_phase | Gauge | `persistentvolume`=&lt;pv-name&gt; <br>`phase`=&lt;Bound\|Failed\|Pending\|Available\|Released&gt;| STABLE |
77
| kube_persistentvolume_labels | Gauge | `persistentvolume`=&lt;persistentvolume-name&gt; <br> `label_PERSISTENTVOLUME_LABEL`=&lt;PERSISTENTVOLUME_LABEL&gt; | STABLE |
8-
| kube_persistentvolume_info | Gauge | `persistentvolume`=&lt;pv-name&gt; <br> `storageclass`=&lt;storageclass-name&gt; | STABLE |
8+
| kube_persistentvolume_info | Gauge | `persistentvolume`=&lt;pv-name&gt; <br> `storageclass`=&lt;storageclass-name&gt; <br> `gce_persistent_disk_name`=&lt;pd-name&gt; <br> `ebs_volume_id`=&lt;ebs-volume-id&gt; | STABLE |
99

internal/store/persistentvolume.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,28 @@ var (
102102
Type: metric.Gauge,
103103
Help: "Information about persistentvolume.",
104104
GenerateFunc: wrapPersistentVolumeFunc(func(p *v1.PersistentVolume) *metric.Family {
105+
var gcePDDiskName, ebsVolumeID string
106+
switch {
107+
case p.Spec.PersistentVolumeSource.GCEPersistentDisk != nil:
108+
gcePDDiskName = p.Spec.PersistentVolumeSource.GCEPersistentDisk.PDName
109+
case p.Spec.PersistentVolumeSource.AWSElasticBlockStore != nil:
110+
ebsVolumeID = p.Spec.PersistentVolumeSource.AWSElasticBlockStore.VolumeID
111+
}
112+
105113
return &metric.Family{
106114
Metrics: []*metric.Metric{
107115
{
108-
LabelKeys: []string{"storageclass"},
109-
LabelValues: []string{p.Spec.StorageClassName},
110-
Value: 1,
116+
LabelKeys: []string{
117+
"storageclass",
118+
"gce_persistent_disk_name",
119+
"ebs_volume_id",
120+
},
121+
LabelValues: []string{
122+
p.Spec.StorageClassName,
123+
gcePDDiskName,
124+
ebsVolumeID,
125+
},
126+
Value: 1,
111127
},
112128
},
113129
}

internal/store/persistentvolume_test.go

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,53 @@ func TestPersistentVolumeStore(t *testing.T) {
169169
Want: `
170170
# HELP kube_persistentvolume_info Information about persistentvolume.
171171
# TYPE kube_persistentvolume_info gauge
172-
kube_persistentvolume_info{persistentvolume="test-pv-available",storageclass=""} 1
172+
kube_persistentvolume_info{ebs_volume_id="",gce_persistent_disk_name="",persistentvolume="test-pv-available",storageclass=""} 1
173+
`,
174+
MetricNames: []string{"kube_persistentvolume_info"},
175+
},
176+
{
177+
Obj: &v1.PersistentVolume{
178+
Spec: v1.PersistentVolumeSpec{
179+
PersistentVolumeSource: v1.PersistentVolumeSource{
180+
GCEPersistentDisk: &v1.GCEPersistentDiskVolumeSource{
181+
PDName: "name",
182+
},
183+
},
184+
},
185+
ObjectMeta: metav1.ObjectMeta{
186+
Name: "test-pv-available",
187+
},
188+
Status: v1.PersistentVolumeStatus{
189+
Phase: v1.VolumeAvailable,
190+
},
191+
},
192+
Want: `
193+
# HELP kube_persistentvolume_info Information about persistentvolume.
194+
# TYPE kube_persistentvolume_info gauge
195+
kube_persistentvolume_info{ebs_volume_id="",gce_persistent_disk_name="name",persistentvolume="test-pv-available",storageclass=""} 1
196+
`,
197+
MetricNames: []string{"kube_persistentvolume_info"},
198+
},
199+
{
200+
Obj: &v1.PersistentVolume{
201+
Spec: v1.PersistentVolumeSpec{
202+
PersistentVolumeSource: v1.PersistentVolumeSource{
203+
AWSElasticBlockStore: &v1.AWSElasticBlockStoreVolumeSource{
204+
VolumeID: "aws://eu-west-1c/vol-012d34d567890123b",
205+
},
206+
},
207+
},
208+
ObjectMeta: metav1.ObjectMeta{
209+
Name: "test-pv-available",
210+
},
211+
Status: v1.PersistentVolumeStatus{
212+
Phase: v1.VolumeAvailable,
213+
},
214+
},
215+
Want: `
216+
# HELP kube_persistentvolume_info Information about persistentvolume.
217+
# TYPE kube_persistentvolume_info gauge
218+
kube_persistentvolume_info{ebs_volume_id="aws://eu-west-1c/vol-012d34d567890123b",gce_persistent_disk_name="",persistentvolume="test-pv-available",storageclass=""} 1
173219
`,
174220
MetricNames: []string{"kube_persistentvolume_info"},
175221
},

0 commit comments

Comments
 (0)