41 lines
3.4 KiB
Markdown
41 lines
3.4 KiB
Markdown
# PersistentVolumeClaim Metrics
|
|
|
|
| Metric name | Metric type | Description | Unit (where applicable) | Labels/tags | Status |
|
|
| ----------- | ------------- | ----------- | ----------- | ----------- | ----------- |
|
|
| kube_persistentvolumeclaim_annotations | Gauge | | | `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `namespace`=<persistentvolumeclaim-namespace> <br> `annotation_PERSISTENTVOLUMECLAIM_ANNOTATION`=<PERSISTENTVOLUMECLAIM_ANNOATION> | EXPERIMENTAL |
|
|
| kube_persistentvolumeclaim_access_mode | Gauge | | | `access_mode`=<persistentvolumeclaim-access-mode> <br>`namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> | STABLE |
|
|
| kube_persistentvolumeclaim_info | Gauge | | | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `storageclass`=<persistentvolumeclaim-storageclassname><br>`volumename`=<volumename> | STABLE |
|
|
| kube_persistentvolumeclaim_labels | Gauge | | | `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `namespace`=<persistentvolumeclaim-namespace> <br> `label_PERSISTENTVOLUMECLAIM_LABEL`=<PERSISTENTVOLUMECLAIM_LABEL> | STABLE |
|
|
| kube_persistentvolumeclaim_resource_requests_storage_bytes | Gauge | | | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> | STABLE |
|
|
| kube_persistentvolumeclaim_status_condition | Gauge | | | `namespace` =<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `type`=<persistentvolumeclaim-condition-type> <br> `status`=<true\false\unknown> | EXPERIMENTAL |
|
|
| kube_persistentvolumeclaim_status_phase | Gauge | | | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `phase`=<Pending\Bound\Lost> | STABLE |
|
|
| kube_persistentvolumeclaim_created | Gauge | Unix creation timestamp | seconds | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> | EXPERIMENTAL |
|
|
| kube_persistentvolumeclaim_deletion_timestamp | Gauge | Unix deletion timestamp | seconds | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> | EXPERIMENTAL |
|
|
|
|
Note:
|
|
|
|
- An empty string will be used if PVC has no storage class.
|
|
|
|
## Useful metrics queries
|
|
|
|
### How to retrieve non-standard PVC state
|
|
|
|
It is not straightforward to get the PVC states for certain cases like "Terminating" since it is not stored behind a field in the `PersistentVolumeClaim.Status`.
|
|
|
|
So to mimic the [logic](https://github.com/kubernetes/kubernetes/blob/v1.27.2/pkg/printers/internalversion/printers.go#L1883) used by the `kubectl` command line, you will need to compose multiple metrics.
|
|
|
|
Here is an example of a Prometheus rule that can be used to alert on a PVC that has been in the `Terminating` state for more than `5m`.
|
|
|
|
```yaml
|
|
groups:
|
|
- name: PVC state
|
|
rules:
|
|
- alert: PVCBlockedInTerminatingState
|
|
expr: kube_persistentvolumeclaim_deletion_timestamp * on(namespace, persistentvolumeclaim) group_left() (kube_persistentvolumeclaim_status_phase{phase="Bound"} == 1) > 0
|
|
for: 5m
|
|
labels:
|
|
severity: warning
|
|
annotations:
|
|
summary: PVC {{$labels.namespace}}/{{$labels.persistentvolumeclaim}} blocked in Terminating state.
|
|
```
|