diff --git a/CHANGELOG.md b/CHANGELOG.md
index c0e4d909..b1564172 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## MASTER
+
+* [FEATURE] Add ebs_volume_id and gce_persistent_disk_name to kube_persistentvolume_info metric. #1146
+
## v1.9.5 / 2020-02-20
* [BUGFIX] Switch to using only v1 client of validatingwebhookconfiguration #1052
diff --git a/docs/persistentvolume-metrics.md b/docs/persistentvolume-metrics.md
index 28a9e7ae..0f40ff5c 100644
--- a/docs/persistentvolume-metrics.md
+++ b/docs/persistentvolume-metrics.md
@@ -5,5 +5,5 @@
| kube_persistentvolume_capacity_bytes | Gauge | `persistentvolume`=<pv-name> | STABLE |
| kube_persistentvolume_status_phase | Gauge | `persistentvolume`=<pv-name>
`phase`=<Bound\|Failed\|Pending\|Available\|Released>| STABLE |
| kube_persistentvolume_labels | Gauge | `persistentvolume`=<persistentvolume-name>
`label_PERSISTENTVOLUME_LABEL`=<PERSISTENTVOLUME_LABEL> | STABLE |
-| kube_persistentvolume_info | Gauge | `persistentvolume`=<pv-name>
`storageclass`=<storageclass-name> | STABLE |
+| kube_persistentvolume_info | Gauge | `persistentvolume`=<pv-name>
`storageclass`=<storageclass-name>
`gce_persistent_disk_name`=<pd-name>
`ebs_volume_id`=<ebs-volume-id> | STABLE |
diff --git a/internal/store/persistentvolume.go b/internal/store/persistentvolume.go
index c6d716da..a7b4fe31 100644
--- a/internal/store/persistentvolume.go
+++ b/internal/store/persistentvolume.go
@@ -102,12 +102,28 @@ var (
Type: metric.Gauge,
Help: "Information about persistentvolume.",
GenerateFunc: wrapPersistentVolumeFunc(func(p *v1.PersistentVolume) *metric.Family {
+ var gcePDDiskName, ebsVolumeID string
+ switch {
+ case p.Spec.PersistentVolumeSource.GCEPersistentDisk != nil:
+ gcePDDiskName = p.Spec.PersistentVolumeSource.GCEPersistentDisk.PDName
+ case p.Spec.PersistentVolumeSource.AWSElasticBlockStore != nil:
+ ebsVolumeID = p.Spec.PersistentVolumeSource.AWSElasticBlockStore.VolumeID
+ }
+
return &metric.Family{
Metrics: []*metric.Metric{
{
- LabelKeys: []string{"storageclass"},
- LabelValues: []string{p.Spec.StorageClassName},
- Value: 1,
+ LabelKeys: []string{
+ "storageclass",
+ "gce_persistent_disk_name",
+ "ebs_volume_id",
+ },
+ LabelValues: []string{
+ p.Spec.StorageClassName,
+ gcePDDiskName,
+ ebsVolumeID,
+ },
+ Value: 1,
},
},
}
diff --git a/internal/store/persistentvolume_test.go b/internal/store/persistentvolume_test.go
index 895f8604..e7cb5622 100644
--- a/internal/store/persistentvolume_test.go
+++ b/internal/store/persistentvolume_test.go
@@ -169,7 +169,53 @@ func TestPersistentVolumeStore(t *testing.T) {
Want: `
# HELP kube_persistentvolume_info Information about persistentvolume.
# TYPE kube_persistentvolume_info gauge
- kube_persistentvolume_info{persistentvolume="test-pv-available",storageclass=""} 1
+ kube_persistentvolume_info{ebs_volume_id="",gce_persistent_disk_name="",persistentvolume="test-pv-available",storageclass=""} 1
+ `,
+ MetricNames: []string{"kube_persistentvolume_info"},
+ },
+ {
+ Obj: &v1.PersistentVolume{
+ Spec: v1.PersistentVolumeSpec{
+ PersistentVolumeSource: v1.PersistentVolumeSource{
+ GCEPersistentDisk: &v1.GCEPersistentDiskVolumeSource{
+ PDName: "name",
+ },
+ },
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-pv-available",
+ },
+ Status: v1.PersistentVolumeStatus{
+ Phase: v1.VolumeAvailable,
+ },
+ },
+ Want: `
+ # HELP kube_persistentvolume_info Information about persistentvolume.
+ # TYPE kube_persistentvolume_info gauge
+ kube_persistentvolume_info{ebs_volume_id="",gce_persistent_disk_name="name",persistentvolume="test-pv-available",storageclass=""} 1
+ `,
+ MetricNames: []string{"kube_persistentvolume_info"},
+ },
+ {
+ Obj: &v1.PersistentVolume{
+ Spec: v1.PersistentVolumeSpec{
+ PersistentVolumeSource: v1.PersistentVolumeSource{
+ AWSElasticBlockStore: &v1.AWSElasticBlockStoreVolumeSource{
+ VolumeID: "aws://eu-west-1c/vol-012d34d567890123b",
+ },
+ },
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "test-pv-available",
+ },
+ Status: v1.PersistentVolumeStatus{
+ Phase: v1.VolumeAvailable,
+ },
+ },
+ Want: `
+ # HELP kube_persistentvolume_info Information about persistentvolume.
+ # TYPE kube_persistentvolume_info gauge
+ kube_persistentvolume_info{ebs_volume_id="aws://eu-west-1c/vol-012d34d567890123b",gce_persistent_disk_name="",persistentvolume="test-pv-available",storageclass=""} 1
`,
MetricNames: []string{"kube_persistentvolume_info"},
},