Skip to main content
RunBook Academy

CephLIII · Cluster HealthCluster Health

What HEALTH_OK does not tell you

Intermediate⏱ ~16 minceph

What you'll learn

  • Enumerate what HEALTH_OK does not cover
  • Identify risks invisible to health checks
  • Build monitoring that covers the gaps
  • Verify cluster health beyond the health output

Prerequisites

None — start here.

Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18

Not yet marked complete on this device.

Why this matters in production

HEALTH_OK means no check is firing. Every serious cluster problem passes through a period where nothing is firing yet, and several important risks never fire a check at all.

What it does not cover

RiskWhy no check fires
Capacity filling steadilyno check until nearfull
Latency degradingno health check measures latency
One OSD an order of magnitude slowerperformance is not a health check
A pool with min_size 1configuration is not evaluated
A CRUSH rule that does not match the physical topologyCeph cannot know the topology
Only three hosts for a size-3 poolplacement is satisfied
No off-cluster backupsoutside Ceph’s knowledge
A bond running on one memberbelow Ceph’s layer
Monitors all in one rackCeph does not model racks it was not told about

Every row is a real risk and none produces a warning.

The gaps that matter most

Capacity trajectory. HEALTH_OK at 78% full and rising 2% a week is three weeks from a warning and five from an incident.

ceph df
ceph osd df | awk '{print $17}' | sort -n | tail -3

Latency outliers. An OSD at ten times the median makes the cluster feel broken and fires no check.

ceph osd perf | sort -k2 -n | tail -5

Configuration risk.

ceph osd pool ls detail | grep -E 'min_size 1|size 2'
ceph osd crush rule dump | jq -r '.[] | "\(.rule_name) \(.steps[1].type // "?")"'
ceph osd tree | grep -c host

Redundancy that has never been tested. A cluster that has never lost a host does not know whether it survives losing one.

Building the gap coverage

# capacity trajectory — record and trend
ceph df --format json | jq -r '.stats.total_used_raw_ratio'

# latency distribution
ceph osd perf --format json | \
  jq -r '.osdstats.osd_perf_infos[] | "\(.id) \(.perf_stats.commit_latency_ms)"'

# configuration audit
ceph osd pool ls detail
ceph config dump | grep -v '^WHO'
ceph auth ls | grep -B2 'allow \*'

These belong on a schedule, not in the health output — Ceph does not consider them health questions and it is right not to.

Quiz

Knowledge check · 4 questions

  1. Q1. A cluster reports HEALTH_OK at 82% capacity with one OSD at ten times the median latency. Why is nothing firing?

  2. Q2. A pool configured with min_size 1 is a deliberate and correct choice for some workloads.

  3. Q3. Build monitoring that covers what health checks do not.

    A cluster has reported HEALTH_OK continuously for six months. A capacity review finds it at 84% and rising, with one OSD at fifteen times the median latency and two pools configured with size 2.

  4. Q4. Why is the absence of configuration warnings in Ceph intentional rather than a gap?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Treat HEALTH_OK as one input rather than as an answer; capacity trajectory, latency distribution, and configuration risk are all invisible to it and all real. Schedule the configuration audit rather than relying on periodic reviews, since the conditions it covers do not announce themselves.

Cross-course references

  • Kubernetes: all pods Running says nothing about resource headroom or configuration risk
  • Linux: a green status page and a healthy system are related but distinct claims