Openshift KPIs
Overview
End-to-end observability for Openshift clusters, covering cluster health, nodes, namespaces, pods, containers, services, jobs, controllers, and storage. These KPIs are normalized for dashboards, SLOs, capacity planning, and automated remediation.
Cluster Health & Global Utilization
| Metric | Description | Type |
|---|---|---|
| kubernetes.health.status | Overall cluster health status | String |
| kubernetes.liveness.probe | Liveness probe status summary | String |
| kubernetes.readiness.probe | Readiness probe status summary | String |
| kubernetes.cpu.percent | Cluster-level CPU utilization | Percent |
| kubernetes.memory.percent | Cluster-level memory utilization | Percent |
| kubernetes.memory.capacity.bytes | Total cluster memory capacity | Bytes |
| kubernetes.memory.available.bytes | Available cluster memory | Bytes |
| kubernetes.master.nodes | Count of master/control-plane nodes | Count |
| kubernetes.worker.nodes | Count of worker nodes | Count |
Nodes – Capacity, Utilization & Roles
| Metric | Description | Type |
|---|---|---|
| kubernetes.nodes | Total nodes in cluster | Count |
| kubernetes.node | Node row (tabular) | String |
| kubernetes.node.ip | Node IP address | String |
| kubernetes.node.status | Node status (Ready/NotReady/etc.) | String |
| kubernetes.node.type | Node type (master/worker/etc.) | String |
| kubernetes.node.creation.time | Node creation time | Timestamp |
| kubernetes.node.pods | Pods scheduled on node | Count |
| kubernetes.node.cpu.allocatable.cores | Allocatable CPU cores | Count |
| kubernetes.node.memory.allocatable.bytes | Allocatable memory | Bytes |
| kubernetes.node.ephemeral.storage.allocatable.bytes | Allocatable ephemeral storage | Bytes |
| kubernetes.node.allocatable.pods | Max allocatable pods | Count |
| kubernetes.node.containers | Containers scheduled on node | Count |
| kubernetes.node.container.runtime.version | Container runtime version | String |
| kubernetes.node.memory.used.bytes | Node memory used | Bytes |
| kubernetes.node.memory.available.bytes | Node memory available | Bytes |
| kubernetes.node.cpu.used.cores | CPU cores currently used | Count |
| kubernetes.node.cpu.limit.percent | CPU limits requested vs allocatable | Percent |
| kubernetes.node.cpu.request.percent | CPU requests vs allocatable | Percent |
| kubernetes.node.memory.limit.percent | Memory limits vs allocatable | Percent |
| kubernetes.node.memory.request.percent | Memory requests vs allocatable | Percent |
| kubernetes.node.cpu.percent | Node CPU utilization | Percent |
| kubernetes.node.memory.percent | Node memory utilization | Percent |
Namespaces – Workload Distribution & Health
| Metric | Description | Type |
|---|---|---|
| kubernetes.namespaces | Total namespaces | Count |
| kubernetes.namespace | Namespace row | String |
| kubernetes.namespace.status | Namespace status | String |
| kubernetes.namespace.pods | Total pods in namespace | Count |
| kubernetes.namespace.running.pods | Running pods | Count |
| kubernetes.namespace.succeeded.pods | Succeeded pods | Count |
| kubernetes.namespace.pending.pods | Pending pods | Count |
| kubernetes.namespace.failed.pods | Failed pods | Count |
| kubernetes.namespace.unknown.pods | Pods in unknown state | Count |
| kubernetes.namespace.creation.time | Namespace creation time | Timestamp |
Pods – Lifecycle & Resource Governance
| Metric | Description | Type |
|---|---|---|
| kubernetes.pods | Total pods in cluster | Count |
| kubernetes.pod | Pod row | String |
| kubernetes.pod.name | Pod name | String |
| kubernetes.pod.namespace | Pod namespace | String |
| kubernetes.pod.containers | Container count in pod | Count |
| kubernetes.pod.status | Pod phase/status | String |
| kubernetes.pod.ip.address | Pod IP address | String |
| kubernetes.pod.type | Pod type (normal/daemonset/job/etc.) | String |
| kubernetes.pod.application | Application label / owner | String |
| kubernetes.pod.restarts | Total restarts across containers | Count |
| kubernetes.pod.creation.time | Pod creation time | Timestamp |
| kubernetes.pod.persistent.volume | Attached persistent volume(s) | String |
| kubernetes.pod.node.name | Node hosting the pod | String |
| kubernetes.pod.cpu.limit.percent | Sum of CPU limits / node allocatable | Percent |
| kubernetes.pod.cpu.request.percent | Sum of CPU requests / node allocatable | Percent |
| kubernetes.pod.memory.limit.percent | Sum of memory limits / node allocatable | Percent |
| kubernetes.pod.memory.request.percent | Sum of memory requests / node allocatable | Percent |
Containers – Scheduling, Status & Utilization
| Metric | Description | Type |
|---|---|---|
| kubernetes.containers | Total containers in cluster | Count |
| kubernetes.container | Container row | String |
| kubernetes.container.name | Container name | String |
| kubernetes.container.node.name | Node hosting the container | String |
| kubernetes.container.image | Container image | String |
| kubernetes.container.status | Container status | String |
| kubernetes.container.creation.time | Container creation time | Timestamp |
| kubernetes.container.pod.name | Parent pod name | String |
| kubernetes.container.restarts | Restart count | Count |
| kubernetes.container.ports | Exposed ports | String |
| kubernetes.container.volume.mounts | Volume mounts | String |
| kubernetes.container.cpu.limit.percent | CPU limit vs node allocatable | Percent |
| kubernetes.container.cpu.request.percent | CPU request vs node allocatable | Percent |
| kubernetes.container.memory.limit.percent | Memory limit vs node allocatable | Percent |
| kubernetes.container.memory.request.percent | Memory request vs node allocatable | Percent |
| kubernetes.container.cpu.percent | Runtime CPU utilization | Percent |
| kubernetes.container.memory.bytes | Runtime memory usage | Bytes |
Services – Exposure & Routing
| Metric | Description | Type |
|---|---|---|
| kubernetes.services | Total services | Count |
| kubernetes.service | Service row | String |
| kubernetes.service.name | Service name | String |
| kubernetes.service.namespace | Service namespace | String |
| kubernetes.service.application | Application / owner | String |
| kubernetes.service.type | Service type (ClusterIP/NodePort…) | String |
| kubernetes.service.cluster.ip.address | Cluster IP | String |
| kubernetes.service.ports | Exposed ports | String |
| kubernetes.service.creation.time | Service creation time | Timestamp |
Cluster Components – Control Plane Health
| Metric | Description | Type |
|---|---|---|
| kubernetes.components | Total control-plane components | Count |
| kubernetes.component | Component row | String |
| kubernetes.component.status | Component status (Healthy/Unhealthy) | String |
| kubernetes.component.message | Health message / reason | String |
Jobs – Batch Workloads
| Metric | Description | Type |
|---|---|---|
| kubernetes.jobs | Total jobs | Count |
| kubernetes.job | Job row | String |
| kubernetes.job.name | Job name | String |
| kubernetes.job.namespace | Job namespace | String |
| kubernetes.job.status | Job status (Active/Succeeded/Failed) | String |
| kubernetes.job.started.time | Job start time | Timestamp |
| kubernetes.job.completion.time | Job completion time | Timestamp |
| kubernetes.job.duration | Job duration | Seconds |
Workload Controllers – DaemonSets, StatefulSets, ReplicaSets, Deployments
DaemonSets
| Metric | Description | Type |
|---|---|---|
| kubernetes.daemon.sets | Total DaemonSets | Count |
| kubernetes.daemon.set | DaemonSet row | String |
| kubernetes.daemon.set.name | DaemonSet name | String |
| kubernetes.daemon.set.namespace | Namespace | String |
| kubernetes.daemon.set.node.selector | Node selector | String |
| kubernetes.daemon.set.creation.time | Creation time | Timestamp |
| kubernetes.daemon.set.ready.replicas | Ready pods | Count |
| kubernetes.daemon.set.desired.replicas | Desired pods | Count |
| kubernetes.daemon.set.available.replicas | Available pods | Count |
| kubernetes.daemon.set.current.replicas | Current pods | Count |
| kubernetes.daemon.set.updated.replicas | Updated pods | Count |
StatefulSets
| Metric | Description | Type |
|---|---|---|
| kubernetes.stateful.sets | Total StatefulSets | Count |
| kubernetes.stateful.set | StatefulSet row | String |
| kubernetes.stateful.set.name | StatefulSet name | String |
| kubernetes.stateful.set.namespace | Namespace | String |
| kubernetes.stateful.set.replicas | Desired replicas | Count |
| kubernetes.stateful.set.ready.replicas | Ready replicas | Count |
| kubernetes.stateful.set.current.replicas | Current replicas | Count |
| kubernetes.stateful.set.updated.replicas | Updated replicas | Count |
| kubernetes.stateful.set.service | Headless/service name | String |
| kubernetes.stateful.set.creation.time | Creation time | Timestamp |
ReplicaSets
| Metric | Description | Type |
|---|---|---|
| kubernetes.replica.sets | Total ReplicaSets | Count |
| kubernetes.replica.set | ReplicaSet row | String |
| kubernetes.replica.set.name | ReplicaSet name | String |
| kubernetes.replica.set.namespace | Namespace | String |
| kubernetes.replica.set.ready.replicas | Ready replicas | Count |
| kubernetes.replica.set.desired.replicas | Desired replicas | Count |
| kubernetes.replica.set.current.replicas | Current replicas | Count |
Deployments
| Metric | Description | Type |
|---|---|---|
| kubernetes.deployments | Total Deployments | Count |
| kubernetes.deployment | Deployment row | String |
| kubernetes.deployment.name | Deployment name | String |
| kubernetes.deployment.namespace | Namespace | String |
| kubernetes.deployment.ready.replicas | Ready replicas | Count |
| kubernetes.deployment.replicas | Desired replicas | Count |
| kubernetes.deployment.available.replicas | Available replicas | Count |
Persistent Volumes (PV)
| Metric | Description | Type |
|---|---|---|
| kubernetes.persistent.volumes | Total PersistentVolumes | Count |
| kubernetes.persistent.volume | PersistentVolume row | String |
| kubernetes.persistent.volume.mode | Volume mode (Filesystem/Block) | String |
| kubernetes.persistent.volume.status | Phase/status | String |
| kubernetes.persistent.volume.access.mode | Access mode (RWO/RWX/ROX) | String |
| kubernetes.persistent.volume.storage.class | StorageClass name | String |
| kubernetes.persistent.volume.bound.claim.name | Bound PVC name | String |
| kubernetes.persistent.volume.bound.claim.namespace | Bound PVC namespace | String |
| kubernetes.persistent.volume.storage.capacity.bytes | Provisioned capacity | Bytes |
| kubernetes.persistent.volume.creation.time | PV creation time | Timestamp |
Persistent Volume Claims
| Metric | Description | Type |
|---|---|---|
| kubernetes.persistent.volume.claims | Total PVCs | Count |
| kubernetes.persistent.volume.claim | PVC row | String |
| kubernetes.persistent.volume.claim.name | PVC name | String |
| kubernetes.persistent.volume.claim.namespace | PVC namespace | String |
| kubernetes.persistent.volume.claim.status | PVC status (Bound/Pending/etc.) | String |
| kubernetes.persistent.volume.claim.access.mode | Access mode | String |
| kubernetes.persistent.volume.claim.storage.capacity.bytes | Bound volume capacity | Bytes |
| kubernetes.persistent.volume.claim.bound.volume | Bound PV name | String |
| kubernetes.persistent.volume.claim.bound.volume.mode | Bound PV mode (Filesystem/Block) | String |
| kubernetes.persistent.volume.claim.storage.class | StorageClass name | String |
| kubernetes.persistent.volume.claim.creation.time | PVC creation time | Timestamp |
| kubernetes.persistent.volume.claim.storage.requested.bytes | Requested storage | Bytes |