Skip to main content
RunBook Academy

CephLIII · Cluster HealthCluster Health

Reading HEALTH_WARN correctly

Intermediate⏱ ~17 minceph

What you'll learn

  • Categorise warning checks by real urgency
  • Assess scale within a warning
  • Distinguish transient from persistent warnings
  • Prioritise multiple simultaneous warnings

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

Most of the time a cluster spends outside HEALTH_OK is spent in HEALTH_WARN, and the range within it is enormous. Triage means asking three questions of each warning, not looking up its name.

The three questions

1. Is client I/O affected?

ceph health detail | grep -E 'PG_AVAILABILITY|OSD_FULL|slow ops'
ceph pg dump_stuck inactive

Inactive PGs, full OSDs, and sustained slow ops mean clients are affected. Everything else is background until proven otherwise.

2. What is the scale?

PG_DEGRADED: 12/25104882 objects degraded (0.00005%)
PG_DEGRADED: 8412031/25104882 objects degraded (33.5%)

Same check, entirely different situations. Read the numbers, not the check name.

3. Is it moving?

ceph -s > /tmp/a; sleep 300; ceph -s > /tmp/b; diff /tmp/a /tmp/b

A degraded count falling is recovery working. Unchanged is a stall.

Categorising the common warnings

Client-affecting — respond now

CheckMeans
PG_AVAILABILITYPGs not serving I/O
SLOW_OPSoperations blocked
POOL_FULLwrites refused
MON_CLOCK_SKEWconsensus at risk

Durability-affecting — respond soon

CheckMeans
PG_DEGRADEDreduced redundancy; scale matters
OSD_DOWNcapacity and redundancy reduced
PG_BACKFILL_FULLrecovery blocked by capacity
POOL_NEARFULLapproaching a hard limit

Hygiene — schedule

CheckMeans
PG_NOT_DEEP_SCRUBBEDcorruption detection lagging
PG_NOT_SCRUBBEDas above, shallow
OSD_SCRUB_ERRORSinconsistencies found — investigate
DEVICE_HEALTHa device is predicted to fail
TOO_MANY_PGSconfiguration to review

OSD_SCRUB_ERRORS sits awkwardly: it is hygiene by category and warrants prompt investigation, because it means a scrub found data that disagrees between replicas.

Multiple simultaneous warnings

Order by client impact, then durability, then hygiene — and look for a common cause first:

ceph health detail
[WRN] OSD_DOWN: 1 osds down
[WRN] PG_DEGRADED: Degraded data redundancy: 42131/25104882 objects
[WRN] PG_BACKFILL_FULL: 3 pgs backfill_toofull

Three warnings, one situation: an OSD failed, its PGs degraded, and recovery is blocked by capacity on the destinations. Treating them separately means three investigations of one problem.

Quiz

Knowledge check · 4 questions

  1. Q1. Which question should be asked first of any HEALTH_WARN?

  2. Q2. Three simultaneous health checks usually indicate three separate problems.

  3. Q3. Triage a cluster with several warnings.

    `ceph health detail` reports: PG_NOT_DEEP_SCRUBBED on 340 PGs, PG_DEGRADED at 0.02%, OSD_DOWN with one OSD, and MON_CLOCK_SKEW on one monitor.

  4. Q4. Why does alerting that carries only the check name discard important information?

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

Production discipline

Read the complete health detail output before acting on any single check; one event commonly produces several and recognising the common cause turns three investigations into one. Carry the check message, not just the identifier, into alerts — the figures are what determine the response.

Cross-course references

  • Kubernetes: several conditions on one object frequently share a single underlying cause
  • Linux: correlating alerts before investigating each is general on-call practice