add persistent volume capacity metric

This commit is contained in:
Raphael Deem 2019-02-15 15:59:01 -08:00
parent 83302c9ed1
commit 8d4984cc1a
3 changed files with 35 additions and 0 deletions

View File

@ -2,6 +2,7 @@
| Metric name| Metric type | Labels/tags | Status |
| ---------- | ----------- | ----------- | ----------- |
| kube_persistentvolume_capacity | Gauge | `persistentvolume`=<pv-name> | STABLE |
| kube_persistentvolume_status_phase | Gauge | `persistentvolume`=&lt;pv-name&gt; <br>`phase`=&lt;Bound\|Failed\|Pending\|Available\|Released&gt;| STABLE |
| kube_persistentvolume_labels | Gauge | `persistentvolume`=&lt;persistentvolume-name&gt; <br> `label_PERSISTENTVOLUME_LABEL`=&lt;PERSISTENTVOLUME_LABEL&gt; | STABLE |
| kube_persistentvolume_info | Gauge | `persistentvolume`=&lt;pv-name&gt; <br> `storageclass`=&lt;storageclass-name&gt; | STABLE |

View File

@ -108,6 +108,21 @@ var (
}
}),
},
{
Name: "kube_persistentvolume_capacity",
Type: metric.MetricTypeGauge,
Help: "persistentvolume capacity in Gigabytes.",
GenerateFunc: wrapPersistentVolumeFunc(func(p *v1.PersistentVolume) *metric.Family {
storage := p.Spec.Capacity[v1.ResourceStorage]
return &metric.Family{
Metrics: []*metric.Metric{
{
Value: float64(storage.Size()),
},
},
}
}),
},
}
)

View File

@ -20,6 +20,7 @@ import (
"testing"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kube-state-metrics/pkg/metric"
)
@ -34,6 +35,8 @@ func TestPersistentVolumeCollector(t *testing.T) {
# TYPE kube_persistentvolume_labels gauge
# HELP kube_persistentvolume_info Information about persistentvolume.
# TYPE kube_persistentvolume_info gauge
# HELP kube_persistentvolume_capacity The size of the persistentvolume in Gigabytes.
# TYPE kube_persistentvolume_capacity gauge
`
cases := []generateMetricsTestCase{
// Verify phase enumerations.
@ -201,6 +204,22 @@ func TestPersistentVolumeCollector(t *testing.T) {
`,
MetricNames: []string{"kube_persistentvolume_labels"},
},
{
Obj: &v1.PersistentVolume{
ObjectMeta: metav1.ObjectMeta{
Name: "test-pv",
},
Spec: v1.PersistentVolumeSpec{
Capacity: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("5Gi"),
},
},
},
Want: `
kube_persistentvolume_capacity{persistentvolume="test-pv"} 5
`,
MetricNames: []string{"kube_persistentvolume_capacity"},
},
}
for i, c := range cases {
c.Func = metric.ComposeMetricGenFuncs(persistentVolumeMetricFamilies)