<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ceph Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/ceph/</link><description>Recent content in Ceph Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/ceph/index.xml" rel="self" type="application/rss+xml"/><item><title>Ceph backfill_toofull: recovery blocked because target OSDs are full</title><link>https://www.netdata.cloud/guides/ceph/ceph-backfill-toofull/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-backfill-toofull/</guid><description>&lt;h1 id="ceph-backfill_toofull-recovery-blocked-because-target-osds-are-full">Ceph backfill_toofull: recovery blocked because target OSDs are full&lt;/h1>
&lt;p>A PG in &lt;code>backfill_toofull&lt;/code> is not making progress toward &lt;code>active+clean&lt;/code>. The source OSD has the data, CRUSH has chosen the target, but the target refuses the reservation because it is above &lt;code>backfillfull_ratio&lt;/code>. Client reads and writes still succeed; the redundancy gap is not closing.&lt;/p>
&lt;p>The cluster is usually not at the hard &lt;code>full&lt;/code> ratio (0.95 default). It is at &lt;code>backfillfull&lt;/code> (0.90 default) on one or more individual OSDs, and that is enough to halt recovery for every PG whose up set includes them. Symptoms: HEALTH_WARN (or HEALTH_ERR on older releases), a flat degraded-object count, and recovery bytes/sec near zero.&lt;/p></description></item><item><title>Ceph blocked ops: client I/O stuck behind a single slow OSD</title><link>https://www.netdata.cloud/guides/ceph/ceph-blocked-ops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-blocked-ops/</guid><description>&lt;h1 id="ceph-blocked-ops-client-io-stuck-behind-a-single-slow-osd">Ceph blocked ops: client I/O stuck behind a single slow OSD&lt;/h1>
&lt;p>A client writes an object. The primary OSD forwards sub-ops to its replicas, then waits for every replica to ack before it acks the client. If any one OSD in the acting set stalls, the whole op stalls. After &lt;code>osd_op_complaint_time&lt;/code> (default 30 seconds) the OSD logs a slow op and the monitor raises &lt;code>SLOW_OPS&lt;/code>. Past that boundary the op is effectively blocked, not merely slow. Clients time out and retry, which puts more ops in flight against the same stuck OSD.&lt;/p></description></item><item><title>Ceph BLUEFS_SPILLOVER: RocksDB metadata spilling onto the slow device</title><link>https://www.netdata.cloud/guides/ceph/ceph-bluestore-db-spillover/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-bluestore-db-spillover/</guid><description>&lt;h1 id="ceph-bluefs_spillover-rocksdb-metadata-spilling-onto-the-slow-device">Ceph BLUEFS_SPILLOVER: RocksDB metadata spilling onto the slow device&lt;/h1>
&lt;p>A small subset of OSDs shows periodic commit-latency spikes and slow ops while the rest of the cluster looks healthy. Capacity metrics are normal. SMART is clean. &lt;code>ceph -s&lt;/code> reports &lt;code>HEALTH_WARN&lt;/code>, and &lt;code>ceph health detail&lt;/code> returns something like:&lt;/p>
&lt;pre tabindex="0">&lt;code>BLUEFS_SPILLOVER
 3 OSDs spilled over ~18 GiB metadata from &amp;#39;db&amp;#39; device
 (e.g. osd.12 spilled over 6.1 GiB metadata from &amp;#39;db&amp;#39; device)
&lt;/code>&lt;/pre>&lt;p>BlueStore&amp;rsquo;s RocksDB metadata has outgrown its dedicated fast DB partition (SSD/NVMe) and is spilling onto the slow HDD data partition. Compaction that took milliseconds on flash now takes seconds on spinning disk. Between compaction cycles the OSD looks fine; during compaction it stalls. This is a cliff edge, not gradual degradation: the moment &lt;code>slow_used_bytes&lt;/code> goes nonzero, latency steps up by one to two orders of magnitude on the affected OSDs.&lt;/p></description></item><item><title>Ceph BlueStore allocator fragmentation: rising latency at moderate fullness</title><link>https://www.netdata.cloud/guides/ceph/ceph-bluestore-fragmentation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-bluestore-fragmentation/</guid><description>&lt;h1 id="ceph-bluestore-allocator-fragmentation-rising-latency-at-moderate-fullness">Ceph BlueStore allocator fragmentation: rising latency at moderate fullness&lt;/h1>
&lt;p>Write latency climbs on OSDs that are only moderately full. Capacity dashboards look healthy, the cluster sits well below &lt;code>nearfull&lt;/code>, and SMART is clean. But a subset of OSDs shows rising commit and apply latency, slow ops begin accumulating, and the affected OSDs are the long-lived ones carrying heavy overwrite workloads. This is BlueStore allocator fragmentation: the free-space structure BlueStore walks on every allocation has become shredded into small, non-contiguous free extents, so each new write needs a longer search before a suitable run of blocks is found.&lt;/p></description></item><item><title>Ceph BlueStore RocksDB compaction stalls: periodic latency spikes</title><link>https://www.netdata.cloud/guides/ceph/ceph-bluestore-compaction-stall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-bluestore-compaction-stall/</guid><description>&lt;h1 id="ceph-bluestore-rocksdb-compaction-stalls-periodic-latency-spikes">Ceph BlueStore RocksDB compaction stalls: periodic latency spikes&lt;/h1>
&lt;p>Periodic latency spikes on Ceph OSDs that appear and clear on their own schedule are a signature of BlueStore RocksDB compaction. The cluster reports brief bursts of slow ops on a small set of OSDs, commit latency climbs for seconds to minutes, then returns to baseline without intervention. Health checks may briefly show &lt;code>SLOW_OPS&lt;/code>&lt;!-- TODO: verify whether a distinct BLUESTORE_SLOW_OP_ALERT health check exists on Reef and later, or whether operators only see SLOW_OPS --> before clearing.&lt;/p></description></item><item><title>Ceph capacity death spiral: an OSD fails and recovery has nowhere to go</title><link>https://www.netdata.cloud/guides/ceph/ceph-capacity-death-spiral/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-capacity-death-spiral/</guid><description>&lt;h1 id="ceph-capacity-death-spiral-an-osd-fails-and-recovery-has-nowhere-to-go">Ceph capacity death spiral: an OSD fails and recovery has nowhere to go&lt;/h1>
&lt;p>An OSD fails on a cluster you have been running at 80% or higher. &lt;code>ceph -s&lt;/code> shows recovery starting, then &lt;code>ceph health detail&lt;/code> lists &lt;code>OSD_NEARFULL&lt;/code> and &lt;code>BACKFILL_TOOFULL&lt;/code>. The degraded PG count climbs, then flatlines. Recovery bytes per second sits near zero. Nothing is healing, and you are one more failure away from data loss.&lt;/p>
&lt;p>This is the Ceph capacity death spiral. It is not a single fault: it is the intersection of tight capacity, CRUSH imbalance, and the hard thresholds Ceph uses to protect itself. Recovery needs spare space on the surviving OSDs. When those OSDs are already past the backfillfull ratio (default 0.90), Ceph refuses to push more data onto them, and backfill stalls for every PG that would target them.&lt;/p></description></item><item><title>Ceph CephFS client eviction (EBLACKLISTED): blocklisted clients and failed I/O</title><link>https://www.netdata.cloud/guides/ceph/ceph-mds-client-eviction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mds-client-eviction/</guid><description>&lt;h1 id="ceph-cephfs-client-eviction-eblacklisted-blocklisted-clients-and-failed-io">Ceph CephFS client eviction (EBLACKLISTED): blocklisted clients and failed I/O&lt;/h1>
&lt;p>CephFS clients suddenly see &lt;code>EBLACKLISTED&lt;/code> errors on open file handles. Reads and writes that worked seconds ago fail; new operations against the same mount return the same error code. The MDS has forcibly evicted the client and added its address to the cluster-wide OSD blocklist. Every OSD now refuses traffic from that client address, and the mount is effectively dead until the blocklist is cleared or expires.&lt;/p></description></item><item><title>Ceph client latency vs OSD latency: fast disks, slow clients</title><link>https://www.netdata.cloud/guides/ceph/ceph-client-vs-osd-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-client-vs-osd-latency/</guid><description>&lt;h1 id="ceph-client-latency-vs-osd-latency-fast-disks-slow-clients">Ceph client latency vs OSD latency: fast disks, slow clients&lt;/h1>
&lt;p>You ran &lt;code>ceph osd perf&lt;/code>, the &lt;code>commit_latency&lt;/code> and &lt;code>apply_latency&lt;/code> columns all look healthy, and you declared the cluster fast. Then a client team opens a ticket: writes are taking 50ms, 100ms, sometimes timing out. You re-check &lt;code>ceph osd perf&lt;/code>. Still fast. The OSDs are not the bottleneck, but the clients are still slow.&lt;/p>
&lt;p>&lt;code>ceph osd perf&lt;/code>, the &lt;code>ceph_osd_*_latency_ms&lt;/code> Prometheus metrics, and &lt;code>rbd perf image iostat&lt;/code> all measure time inside the OSD data path. They do not measure the round trip the client experiences. Client-visible latency is the sum of OSD processing, public network RTT, replication round-trips to peer OSDs, CRUSH map recalculation during flapping, and queuing delay on the OSD&amp;rsquo;s public-facing messenger. A cluster can show 2ms commit latency on every OSD while clients see 50ms response times because the public network is saturated, or because public and cluster traffic share one NIC.&lt;/p></description></item><item><title>Ceph deep scrub performance impact: I/O saturation that mimics an incident</title><link>https://www.netdata.cloud/guides/ceph/ceph-deep-scrub-impact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-deep-scrub-impact/</guid><description>&lt;h1 id="ceph-deep-scrub-performance-impact-io-saturation-that-mimics-an-incident">Ceph deep scrub performance impact: I/O saturation that mimics an incident&lt;/h1>
&lt;p>A Ceph cluster suddenly shows elevated apply latency across many OSDs. Slow ops tick up. Client write latency degrades. The dashboard looks like the start of a real incident. But cluster health is HEALTH_OK and all PGs are active+clean. Before you start chasing a failing disk or a network partition, check whether a deep scrub is running.&lt;/p>
&lt;p>Deep scrub reads and checksums every byte of every object in a PG. On HDD-backed OSDs, this is a sequential read pass across the entire device. With default scheduling, it happens to every PG roughly once a week. If the schedule concentrates scrubs onto the same OSDs at the same time, or if your scrub window is narrow, deep scrub will saturate disk I/O and produce symptoms that look identical to a real performance incident.&lt;/p></description></item><item><title>Ceph degraded objects: reduced redundancy and the race against a second failure</title><link>https://www.netdata.cloud/guides/ceph/ceph-degraded-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-degraded-objects/</guid><description>&lt;h1 id="ceph-degraded-objects-reduced-redundancy-and-the-race-against-a-second-failure">Ceph degraded objects: reduced redundancy and the race against a second failure&lt;/h1>
&lt;p>Degraded objects in Ceph are the most direct measure of reduced redundancy: somewhere in the cluster, at least one object has fewer live replicas (or fewer erasure-coded fragments) than its pool requires. The cluster is still serving I/O, but the protection against a follow-on failure has thinned for those objects.&lt;/p>
&lt;p>&lt;code>ceph_num_objects_degraded&lt;/code> is not alarming on its own. Every OSD failure, restart, and CRUSH reweight produces a transient spike that recovery is designed to heal. The real signal is the slope: is the count falling back toward zero, or has it plateaued while the cluster is still degraded?&lt;/p></description></item><item><title>Ceph failed_repair: when ceph pg repair cannot fix the inconsistency</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-failed-repair/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-failed-repair/</guid><description>&lt;h1 id="ceph-failed_repair-when-ceph-pg-repair-cannot-fix-the-inconsistency">Ceph failed_repair: when ceph pg repair cannot fix the inconsistency&lt;/h1>
&lt;p>A &lt;code>failed_repair&lt;/code> PG state means Ceph attempted to repair a data inconsistency that scrub or deep-scrub detected, and could not. The PG is now &lt;code>active+clean+inconsistent+failed_repair&lt;/code>, the cluster is at HEALTH_WARN (typically via the &lt;code>OSD_SCRUB_ERRORS&lt;/code> health check), and the inconsistency will not heal on its own. Reads still succeed from consistent replicas, but the cluster has stopped trying to fix the divergence until you intervene.&lt;/p></description></item><item><title>Ceph FS_DEGRADED: standby MDS failed to take over a rank</title><link>https://www.netdata.cloud/guides/ceph/ceph-fs-degraded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-fs-degraded/</guid><description>&lt;h1 id="ceph-fs_degraded-standby-mds-failed-to-take-over-a-rank">Ceph FS_DEGRADED: standby MDS failed to take over a rank&lt;/h1>
&lt;p>&lt;code>FS_DEGRADED&lt;/code> fires when at least one CephFS rank is &lt;code>failed&lt;/code> or &lt;code>damaged&lt;/code> and a standby did not promote. Clients can usually still reach the filesystem through surviving ranks, but you are running without the failover reserve the MDS cluster was sized to provide.&lt;/p>
&lt;p>&lt;code>FS_DEGRADED&lt;/code> is the precursor to &lt;code>MDS_ALL_DOWN&lt;/code>. If the last active rank fails before you restore a healthy standby, CephFS becomes fully unavailable. The playbook classifies &lt;code>FS_DEGRADED&lt;/code> active for more than 120 seconds as a TICKET. If CephFS is a primary storage interface, treat 120 seconds as the upper bound on response time, not a soft target.&lt;/p></description></item><item><title>Ceph health detail: mapping ceph_health_detail checks to a cause</title><link>https://www.netdata.cloud/guides/ceph/ceph-health-detail/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-health-detail/</guid><description>&lt;h1 id="ceph-health-detail-mapping-ceph_health_detail-checks-to-a-cause">Ceph health detail: mapping ceph_health_detail checks to a cause&lt;/h1>
&lt;p>&lt;code>ceph_health_detail&lt;/code> is the bridge between the umbrella status an alert fires on (&lt;code>ceph_health_status&lt;/code>: 0=HEALTH_OK, 1=HEALTH_WARN, 2=HEALTH_ERR) and the specific fault you have to fix. Each health check is a separate gauge with &lt;code>name&lt;/code>, &lt;code>severity&lt;/code>, and &lt;code>message&lt;/code> labels; value &lt;code>1&lt;/code> means active, &lt;code>0&lt;/code> means inactive. The &lt;code>name&lt;/code> label is the check code (&lt;code>OSD_FULL&lt;/code>, &lt;code>PG_AVAILABILITY&lt;/code>, &lt;code>MON_CLOCK_SKEW&lt;/code>, etc.) and is what you build alert routing, dashboards, and post-incident timelines around.&lt;/p></description></item><item><title>Ceph HEALTH_ERR: reading the umbrella status and finding the real fault</title><link>https://www.netdata.cloud/guides/ceph/ceph-health-err/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-health-err/</guid><description>&lt;h1 id="ceph-health_err-reading-the-umbrella-status-and-finding-the-real-fault">Ceph HEALTH_ERR: reading the umbrella status and finding the real fault&lt;/h1>
&lt;p>&lt;code>ceph_health_status == 2&lt;/code> is the most severe top-level status Ceph reports, and one of the most over-paged signals in production. The reason is structural: HEALTH_ERR is an umbrella aggregation. It tells you that one or more child health checks crossed into ERR severity. It does not tell you which subsystem failed, whether I/O is actually blocked, or whether the condition will self-resolve when PGs finish peering.&lt;/p></description></item><item><title>Ceph HEALTH_WARN: which warnings are noise and which are structural</title><link>https://www.netdata.cloud/guides/ceph/ceph-health-warn/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-health-warn/</guid><description>&lt;h1 id="ceph-health_warn-which-warnings-are-noise-and-which-are-structural">Ceph HEALTH_WARN: which warnings are noise and which are structural&lt;/h1>
&lt;p>HEALTH_WARN is an umbrella status, not a single condition. It fires during normal recovery after an OSD restart, and it also fires when the cluster is one step from data loss. Both look identical if you only watch the top-level status. The common mistake is blanket-silencing WARN because it fires too often during recovery, then missing the structural warnings that signal real danger.&lt;/p></description></item><item><title>Ceph LARGE_OMAP_OBJECTS: the RGW bucket-index OMAP storm and resharding</title><link>https://www.netdata.cloud/guides/ceph/ceph-large-omap-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-large-omap-objects/</guid><description>&lt;h1 id="ceph-large_omap_objects-the-rgw-bucket-index-omap-storm-and-resharding">Ceph LARGE_OMAP_OBJECTS: the RGW bucket-index OMAP storm and resharding&lt;/h1>
&lt;p>The &lt;code>LARGE_OMAP_OBJECTS&lt;/code> health warning fires when a deep scrub finds a RADOS object carrying more OMAP keys than the configured threshold. On clusters running the RADOS Gateway (RGW), the most common trigger is the bucket-index shard: a single shard that has accumulated too many entries because a bucket holds millions of objects with too few index shards.&lt;/p>
&lt;p>Once a shard crosses the threshold, the symptoms cluster around two areas. RGW clients see slow LIST responses and slow multipart coordination on the affected bucket. The OSD hosting the shard shows elevated commit latency, slow ops, and in the worst case BlueStore RocksDB pressure that resembles a compaction stall. The OSD usually remains &lt;code>up+in&lt;/code>, so cluster-level health stays at WARN rather than ERR, which makes the problem easy to overlook until a user complains about a stuck &lt;code>ListObjects&lt;/code> call.&lt;/p></description></item><item><title>Ceph MDS_ALL_DOWN: CephFS is completely unavailable</title><link>https://www.netdata.cloud/guides/ceph/ceph-mds-all-down/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mds-all-down/</guid><description>&lt;h1 id="ceph-mds_all_down-cephfs-is-completely-unavailable">Ceph MDS_ALL_DOWN: CephFS is completely unavailable&lt;/h1>
&lt;p>MDS_ALL_DOWN means no active Metadata Server (MDS) rank exists for a CephFS filesystem. Every CephFS client depending on that filesystem blocks on metadata operations. This is a hard outage for CephFS, not a degradation. The health check &lt;code>ceph_health_detail{name=&amp;quot;MDS_ALL_DOWN&amp;quot;}&lt;/code> goes active the moment the Monitor has no active rank to assign for that filesystem.&lt;/p>
&lt;p>The metadata itself is journaled in a RADOS pool. Unless MDS_DAMAGED is also firing, the metadata is intact. The outage is availability, not loss. Recovery means restoring at least one active MDS, after which clients reconnect and resume.&lt;/p></description></item><item><title>Ceph MDS_CACHE_OVERSIZED: cache above limit and the cap recall that follows</title><link>https://www.netdata.cloud/guides/ceph/ceph-mds-cache-oversized/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mds-cache-oversized/</guid><description>&lt;h1 id="ceph-mds_cache_oversized-cache-above-limit-and-the-cap-recall-that-follows">Ceph MDS_CACHE_OVERSIZED: cache above limit and the cap recall that follows&lt;/h1>
&lt;!-- TODO: verify the canonical health-check name. Ceph sources use MDS_HEALTH_CACHE_OVERSIZED; the shorter MDS_CACHE_OVERSIZED form is used throughout this article as operator shorthand. The MDS_CLIENT_RECALL check name should also be verified against the running version. -->
&lt;p>&lt;code>MDS_CACHE_OVERSIZED&lt;/code> fires when an active Metadata Server daemon&amp;rsquo;s in-memory inode and capability cache crosses &lt;code>mds_cache_memory_limit&lt;/code> * &lt;code>mds_health_cache_threshold&lt;/code>. It is almost always workload-driven: a client has touched enough files in a short enough window that the MDS is caching more metadata than its budget allows.&lt;/p></description></item><item><title>Ceph MDS_DAMAGED: metadata journal or cache corruption</title><link>https://www.netdata.cloud/guides/ceph/ceph-mds-damaged/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mds-damaged/</guid><description>&lt;h1 id="ceph-mds_damaged-metadata-journal-or-cache-corruption">Ceph MDS_DAMAGED: metadata journal or cache corruption&lt;/h1>
&lt;p>MDS_DAMAGED means the CephFS Metadata Server has found damaged metadata, either in its journal or in on-disk structures read from the metadata pool, and has deliberately refused to continue serving the rank. CephFS may be partially or fully unavailable, and recovery is not the usual automatic failover path. A standby that takes over would replay the same suspect journal, so the cluster parks the rank until a human intervenes.&lt;/p></description></item><item><title>Ceph MON_CLOCK_SKEW: clock drift between monitors and election churn</title><link>https://www.netdata.cloud/guides/ceph/ceph-mon-clock-skew/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mon-clock-skew/</guid><description>&lt;h1 id="ceph-mon_clock_skew-clock-drift-between-monitors-and-election-churn">Ceph MON_CLOCK_SKEW: clock drift between monitors and election churn&lt;/h1>
&lt;p>The &lt;code>MON_CLOCK_SKEW&lt;/code> health check fires when the leader monitor detects clock drift beyond &lt;code>mon_clock_drift_allowed&lt;/code> (default 0.05 seconds, 50 milliseconds) on any monitor in the quorum. It raises &lt;code>HEALTH_WARN&lt;/code>, not &lt;code>HEALTH_ERR&lt;/code>, and on its own it does not stop client I/O. But it is the precursor to a class of failure that does: repeated Paxos elections, slow map distribution, and, if the skew grows, monitor quorum loss.&lt;/p></description></item><item><title>Ceph MON_DOWN: a monitor out of quorum and reduced redundancy</title><link>https://www.netdata.cloud/guides/ceph/ceph-mon-down/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mon-down/</guid><description>&lt;h1 id="ceph-mon_down-a-monitor-out-of-quorum-and-reduced-redundancy">Ceph MON_DOWN: a monitor out of quorum and reduced redundancy&lt;/h1>
&lt;p>&lt;code>MON_DOWN&lt;/code> fires when one or more monitor daemons are not part of the active quorum. The common case is a 3-monitor cluster with one monitor gone: quorum still holds with 2 of 3, but the cluster has lost redundancy and tolerates zero further monitor loss before consensus collapses. The Prometheus Ceph mixin surfaces this as &lt;code>CephMonDown&lt;/code> (warning) and escalates to &lt;code>CephMonDownQuorumAtRisk&lt;/code> (critical) when the number of down monitors equals the minimum quorum count.&lt;/p></description></item><item><title>Ceph monitor election storm: monitors that cannot hold a stable quorum</title><link>https://www.netdata.cloud/guides/ceph/ceph-mon-election-storm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mon-election-storm/</guid><description>&lt;h1 id="ceph-monitor-election-storm-monitors-that-cannot-hold-a-stable-quorum">Ceph monitor election storm: monitors that cannot hold a stable quorum&lt;/h1>
&lt;p>A Ceph monitor election storm is what happens when the MON cluster cannot complete and hold an election. Each round of Paxos leader election starts, partially completes, then restarts before the new leader can commit any map updates. The election epoch counter climbs, the leader name changes moment to moment, and &lt;code>ceph -s&lt;/code> itself starts taking several seconds to return because even reading the current map requires a responsive leader.&lt;/p></description></item><item><title>Ceph monitor quorum lost: the cluster can no longer update its maps</title><link>https://www.netdata.cloud/guides/ceph/ceph-mon-quorum-lost/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-mon-quorum-lost/</guid><description>&lt;h1 id="ceph-monitor-quorum-lost-the-cluster-can-no-longer-update-its-maps">Ceph monitor quorum lost: the cluster can no longer update its maps&lt;/h1>
&lt;p>Ceph monitor quorum loss is a PAGE condition. Without a majority of MONs agreeing through Paxos, the cluster cannot commit any map update: no OSD up/down transitions, no PG state changes, no pool edits, no CRUSH adjustments. Existing clients keep running on cached maps for a while, but new client connections fail immediately, and as soon as those cached maps go stale, in-flight I/O stalls.&lt;/p></description></item><item><title>Ceph monitoring checklist: the signals every production cluster needs</title><link>https://www.netdata.cloud/guides/ceph/ceph-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-monitoring-checklist/</guid><description>&lt;h1 id="ceph-monitoring-checklist-the-signals-every-production-cluster-needs">Ceph monitoring checklist: the signals every production cluster needs&lt;/h1>
&lt;p>This checklist defines the signals a production Ceph cluster needs, organized by monitoring maturity. Each level is a superset of the previous one; higher-level signals rely on lower-level context to distinguish real failures from normal churn. The four levels are survival, operational, mature, and expert. You cannot skip levels in practice.&lt;/p>
&lt;p>Two caveats apply across all levels. First, &lt;code>ceph_health_status&lt;/code> is an umbrella, not a complete picture: HEALTH_OK does not guarantee performance, and HEALTH_WARN covers both expected churn (active recovery) and structural problems (nearfull, noout trap, scrub inconsistency). Drill into &lt;code>ceph_health_detail&lt;/code> before treating WARN as noise. Second, per-OSD and per-pool metrics matter more than cluster averages. A cluster at 60% average capacity with one OSD at 85% is closer to trouble than the average suggests.&lt;/p></description></item><item><title>Ceph monitoring maturity model: from survival to expert</title><link>https://www.netdata.cloud/guides/ceph/ceph-monitoring-maturity-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-monitoring-maturity-model/</guid><description>&lt;h1 id="ceph-monitoring-maturity-model-from-survival-to-expert">Ceph monitoring maturity model: from survival to expert&lt;/h1>
&lt;p>Ceph&amp;rsquo;s health surface is unusually broad for a storage system. A cluster can report HEALTH_OK while a single OSD runs at 20x the latency of its peers, while the BlueStore DB partition spills to slow media, or while the PG autoscaler splits placement groups under live client load. The gap between &amp;ldquo;is the cluster up&amp;rdquo; and &amp;ldquo;is the cluster observable enough to operate&amp;rdquo; is where most preventable outages live.&lt;/p></description></item><item><title>Ceph nearfull: the 85% warning that decides whether the cluster can heal</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-nearfull/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-nearfull/</guid><description>&lt;h1 id="ceph-nearfull-the-85-warning-that-decides-whether-the-cluster-can-heal">Ceph nearfull: the 85% warning that decides whether the cluster can heal&lt;/h1>
&lt;p>&lt;code>OSD_NEARFULL&lt;/code> or &lt;code>POOL_NEAR_FULL&lt;/code> in &lt;code>ceph health detail&lt;/code> means &lt;code>HEALTH_WARN&lt;/code>. Clients are still reading and writing, and nothing looks broken yet. The nearfull ratio (default 0.85) is not a polite reminder to plan storage. It is the point where Ceph warns it is running out of the spare space it needs to heal itself.&lt;/p>
&lt;p>One OSD failure at 85% can push surviving OSDs past backfillfull (0.90), at which point backfills refuse to start and recovery stalls. If another OSD fails in that window, you are left with degraded PGs that cannot be recovered, and the next stop is &lt;code>OSD_FULL&lt;/code> at 95% where all client writes return ENOSPC.&lt;/p></description></item><item><title>Ceph noout flag left set: the most common preventable outage</title><link>https://www.netdata.cloud/guides/ceph/ceph-noout-flag-set/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-noout-flag-set/</guid><description>&lt;h1 id="ceph-noout-flag-left-set-the-most-common-preventable-outage">Ceph noout flag left set: the most common preventable outage&lt;/h1>
&lt;p>The noout flag is the single most common source of preventable Ceph outages. An operator sets it before maintenance to stop Ceph from marking down OSDs as out, then forgets to unset it. The cluster keeps serving I/O, health stays at HEALTH_WARN (not ERR), and nothing visible breaks. But recovery is now disabled by policy. The next OSD failure stacks on top of the first, and degraded PGs that should have healed days ago are still degraded.&lt;/p></description></item><item><title>Ceph norecover and nobackfill: recovery intentionally, or accidentally, stopped</title><link>https://www.netdata.cloud/guides/ceph/ceph-norecover-nobackfill/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-norecover-nobackfill/</guid><description>&lt;h1 id="ceph-norecover-and-nobackfill-recovery-intentionally-or-accidentally-stopped">Ceph norecover and nobackfill: recovery intentionally, or accidentally, stopped&lt;/h1>
&lt;p>The symptom is familiar: PGs are stuck in &lt;code>degraded&lt;/code> or &lt;code>undersized&lt;/code> states, the cluster is &lt;code>HEALTH_WARN&lt;/code>, but recovery throughput is zero. OSD load, network, and capacity all look normal. The cause is often two cluster-wide flags sitting in the OSD map: &lt;code>norecover&lt;/code> and &lt;code>nobackfill&lt;/code>. These flags are legitimate tools for protecting client I/O during recovery storms or maintenance, and a common source of &amp;ldquo;forgotten flag&amp;rdquo; incidents alongside &lt;code>noout&lt;/code>.&lt;/p></description></item><item><title>Ceph OSD commit and apply latency: reading per-OSD latency outliers</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-latency-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-latency-high/</guid><description>&lt;h1 id="ceph-osd-commit-and-apply-latency-reading-per-osd-latency-outliers">Ceph OSD commit and apply latency: reading per-OSD latency outliers&lt;/h1>
&lt;p>Two metrics tell you more about per-OSD health than almost anything else in Ceph: &lt;code>ceph_osd_commit_latency_ms&lt;/code> and &lt;code>ceph_osd_apply_latency_ms&lt;/code>. They are per-OSD gauges exported by the manager&amp;rsquo;s Prometheus module, labeled by &lt;code>ceph_daemon&lt;/code>, and they measure the OSD&amp;rsquo;s internal I/O time, not the latency your clients experience end-to-end. A cluster can show healthy aggregate latency while one OSD quietly runs 5x slower than its peers of the same device class. The clients whose objects land on that OSD see tail latency spikes; everyone else sees normal performance. Cluster-wide averages hide this. Per-OSD comparison surfaces it.&lt;/p></description></item><item><title>Ceph OSD down: telling a dead disk apart from a network blip</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-down/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-down/</guid><description>&lt;h1 id="ceph-osd-down-telling-a-dead-disk-apart-from-a-network-blip">Ceph OSD down: telling a dead disk apart from a network blip&lt;/h1>
&lt;p>&lt;code>OSD_DOWN&lt;/code> fires. &lt;code>ceph_osd_up&lt;/code> flipped to 0. The 600-second countdown to OUT and recovery has begun.&lt;/p>
&lt;p>Your first job: figure out whether this is a dead disk (act now, plan a replacement) or a network blip (wait, verify, let the OSD come back). Acting on the wrong diagnosis wastes disk and network I/O on a needless backfill, or worse, leaves a failing disk in service past the point where SMART was already warning you.&lt;/p></description></item><item><title>Ceph OSD flapping: OSDs cycling up and down and the peering storm that follows</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-flapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-flapping/</guid><description>&lt;h1 id="ceph-osd-flapping-osds-cycling-up-and-down-and-the-peering-storm-that-follows">Ceph OSD flapping: OSDs cycling up and down and the peering storm that follows&lt;/h1>
&lt;p>OSD flapping is a failure cascade. One OSD misses heartbeats, peers mark it down, its PGs start peering and recovering elsewhere, the OSD comes back, peering reverses, and the cycle repeats. Each flap mints a new OSD map epoch that every OSD in the cluster must process. The peering overhead from a single flapping OSD can slow dozens of healthy OSDs enough that they also miss heartbeats, and the cascade spreads.&lt;/p></description></item><item><title>Ceph OSD fullness imbalance: one OSD full while the cluster average looks fine</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-fullness-imbalance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-fullness-imbalance/</guid><description>&lt;h1 id="ceph-osd-fullness-imbalance-one-osd-full-while-the-cluster-average-looks-fine">Ceph OSD fullness imbalance: one OSD full while the cluster average looks fine&lt;/h1>
&lt;p>Cluster writes are blocked. &lt;code>ceph status&lt;/code> shows &lt;code>HEALTH_ERR&lt;/code> with &lt;code>OSD_FULL&lt;/code> active. But &lt;code>ceph df&lt;/code> reports the cluster at 65% utilized. Both are correct.&lt;/p>
&lt;p>The Ceph full ratio (default 0.95) is enforced per-OSD, not cluster-wide. When any single OSD crosses that threshold, Ceph refuses writes for every PG that OSD serves. Because CRUSH distributes PGs across OSDs, one full OSD can block writes to a large fraction of PGs even when ninety-nine other OSDs have ample free space.&lt;/p></description></item><item><title>Ceph OSD heartbeat timeouts: the osd_heartbeat_grace precursor to flapping</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-heartbeat-timeout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-heartbeat-timeout/</guid><description>&lt;h1 id="ceph-osd-heartbeat-timeouts-the-osd_heartbeat_grace-precursor-to-flapping">Ceph OSD heartbeat timeouts: the osd_heartbeat_grace precursor to flapping&lt;/h1>
&lt;p>Ceph OSDs declare each other down based on a simple rule: if a peer does not respond to heartbeat pings within &lt;code>osd_heartbeat_grace&lt;/code> (default 20 seconds), it is reported to the monitors as unresponsive. Two peers from different failure domains must agree before the monitor marks the OSD down. This is the mechanism that turns a transient stall into an OSD state change, and repeated near-misses against this 20-second window are the most reliable leading indicator of OSD flapping.&lt;/p></description></item><item><title>Ceph OSD up/down vs in/out: the four states and mon_osd_down_out_interval</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-up-down-in-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-up-down-in-out/</guid><description>&lt;h1 id="ceph-osd-updown-vs-inout-the-four-states-and-mon_osd_down_out_interval">Ceph OSD up/down vs in/out: the four states and mon_osd_down_out_interval&lt;/h1>
&lt;p>Most Ceph operations references describe an OSD as &amp;ldquo;down&amp;rdquo; as if it were a single state. It is not. An OSD carries two independent flags: &lt;code>up&lt;/code>/&lt;code>down&lt;/code> (is the daemon alive?) and &lt;code>in&lt;/code>/&lt;code>out&lt;/code> (does CRUSH place data on it?). Combined, that produces four states, and the most dangerous one, &lt;code>down+in&lt;/code>, is invisible if you only look at one flag.&lt;/p>
&lt;p>The two flags are linked by a clock. After an OSD goes &lt;code>down&lt;/code>, the monitors wait &lt;code>mon_osd_down_out_interval&lt;/code> (default 600 seconds) before automatically flipping it to &lt;code>out&lt;/code>. That 10-minute window is the gap between &amp;ldquo;OSD stopped&amp;rdquo; and &amp;ldquo;recovery starts.&amp;rdquo; That timer, and the flags on either side of it, are the vocabulary every recovery, flapping, and noout runbook assumes.&lt;/p></description></item><item><title>Ceph OSD_FULL: all writes stopped at the 95% full ratio</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-full/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-full/</guid><description>&lt;h1 id="ceph-osd_full-all-writes-stopped-at-the-95-full-ratio">Ceph OSD_FULL: all writes stopped at the 95% full ratio&lt;/h1>
&lt;p>The cluster suddenly stops accepting writes. Client applications report ENOSPC errors. &lt;code>ceph status&lt;/code> returns &lt;code>HEALTH_ERR&lt;/code>. &lt;code>ceph health detail&lt;/code> shows &lt;code>OSD_FULL&lt;/code> active. Reads still succeed, but every write, update, and delete fails cluster-wide.&lt;/p>
&lt;p>This is a hard stop, not a throttle. Ceph refuses all write operations once any OSD crosses the configured &lt;code>full_ratio&lt;/code> (default 0.95). CRUSH spreads every PG across multiple OSDs, so a single full OSD can block writes to hundreds of PGs even when cluster-average utilization looks moderate.&lt;/p></description></item><item><title>Ceph osd_memory_target: cache eviction, RSS growth, and OSD OOM kills</title><link>https://www.netdata.cloud/guides/ceph/ceph-osd-memory-target/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-osd-memory-target/</guid><description>&lt;h1 id="ceph-osd_memory_target-cache-eviction-rss-growth-and-osd-oom-kills">Ceph osd_memory_target: cache eviction, RSS growth, and OSD OOM kills&lt;/h1>
&lt;p>An OSD repeatedly killed by the kernel OOM killer, or a host where OSDs flap up and down shortly after systemd restarts them, very often traces back to one knob: &lt;code>osd_memory_target&lt;/code>. The same knob set too low for the working set produces a quieter failure: read latency climbs on HDD-backed OSDs as BlueStore evicts onodes and RocksDB block-cache pages the workload actually needs.&lt;/p></description></item><item><title>Ceph PG degraded: fewer replicas than the pool size, and when it matters</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-degraded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-degraded/</guid><description>&lt;h1 id="ceph-pg-degraded-fewer-replicas-than-the-pool-size-and-when-it-matters">Ceph PG degraded: fewer replicas than the pool size, and when it matters&lt;/h1>
&lt;p>A degraded placement group in Ceph has fewer copies of some objects than the pool&amp;rsquo;s configured &lt;code>size&lt;/code>. When an OSD goes down or is removed, every PG that had a replica on that OSD drops below target and enters the &lt;code>degraded&lt;/code> state. The cluster can still serve I/O as long as the surviving replica count is at or above &lt;code>min_size&lt;/code>, but redundancy is reduced until recovery rebuilds the missing copies.&lt;/p></description></item><item><title>Ceph PG down: no surviving replica for reads or writes</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-down/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-down/</guid><description>&lt;h1 id="ceph-pg-down-no-surviving-replica-for-reads-or-writes">Ceph PG down: no surviving replica for reads or writes&lt;/h1>
&lt;p>A placement group in the &lt;code>down&lt;/code> state has no replica that can serve I/O. Reads and writes to objects in that PG fail. Clients see EIO or ENODEV, and &lt;code>ceph health detail&lt;/code> reports &lt;code>PG_AVAILABILITY&lt;/code> with one or more PGs flagged &lt;code>down&lt;/code>. Data is unavailable, not just degraded.&lt;/p>
&lt;p>A PG can briefly pass through &lt;code>down&lt;/code> during peering after an OSD failure, before activating on a surviving replica. The 300-second sustain on &lt;code>sum(ceph_pg_down) &amp;gt; 0&lt;/code> filters that transient window. Once a PG has been &lt;code>down&lt;/code> past the sustain, no OSD in the acting set can serve it, and the cluster will not heal it without operator action.&lt;/p></description></item><item><title>Ceph PG incomplete: placement groups that cannot serve I/O</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-incomplete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-incomplete/</guid><description>&lt;h1 id="ceph-pg-incomplete-placement-groups-that-cannot-serve-io">Ceph PG incomplete: placement groups that cannot serve I/O&lt;/h1>
&lt;p>An &lt;code>incomplete&lt;/code> placement group means the PG cannot find enough authoritative data to serve reads or writes. This is a data-availability failure, and it does not self-resolve the way a transient &lt;code>peering&lt;/code> or &lt;code>recovering&lt;/code> state does.&lt;/p>
&lt;p>Alert on &lt;code>sum(ceph_pg_incomplete) &amp;gt; 0&lt;/code> sustained for more than 300 seconds, summed across all pools. The 300 second sustain filters out cold-start peering after a cluster-wide restart, which typically completes within 60-120 seconds. Anything still &lt;code>incomplete&lt;/code> after five minutes is genuinely stuck.&lt;/p></description></item><item><title>Ceph PG inconsistent (OSD_SCRUB_ERRORS): scrub found replica divergence</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-inconsistent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-inconsistent/</guid><description>&lt;h1 id="ceph-pg-inconsistent-osd_scrub_errors-scrub-found-replica-divergence">Ceph PG inconsistent (OSD_SCRUB_ERRORS): scrub found replica divergence&lt;/h1>
&lt;p>A scrub or deep-scrub finished comparing replicas for a placement group and found they disagree. The cluster surfaces this as &lt;code>OSD_SCRUB_ERRORS&lt;/code> (often paired with &lt;code>PG_DAMAGED&lt;/code>) and the affected PG sits in &lt;code>active+clean+inconsistent&lt;/code>. Client reads still succeed because Ceph serves them from a consistent replica, but at least one copy in the acting set is corrupt.&lt;/p>
&lt;p>The danger is not the symptom. Reads work, and Ceph did what it was designed to do: detect silent divergence. The danger is that the corruption was found, not fixed, and the window during which an uncorrupted replica survives is your margin of safety. If the OSD holding the good copy fails before you repair, the object becomes unreadable or unwritable.&lt;/p></description></item><item><title>Ceph PG stale: the monitor has not heard from the PG's OSDs</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-stale/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-stale/</guid><description>&lt;h1 id="ceph-pg-stale-the-monitor-has-not-heard-from-the-pgs-osds">Ceph PG stale: the monitor has not heard from the PG&amp;rsquo;s OSDs&lt;/h1>
&lt;p>A &lt;code>stale&lt;/code> placement group means the monitor cluster has stopped trusting the last status it received for that PG. The acting primary OSD that should be reporting state has gone silent, so the MON cannot confirm whether the PG is active, recovering, or unavailable. The recorded state is preserved but flagged as untrusted.&lt;/p>
&lt;p>This differs from &lt;code>down&lt;/code>. A &lt;code>down&lt;/code> PG means the cluster has positively confirmed that no replica can serve I/O. A &lt;code>stale&lt;/code> PG means the cluster does not know the current state because the reporting chain broke. Both can co-occur, but the response differs: &lt;code>down&lt;/code> is confirmed replica loss; &lt;code>stale&lt;/code> is a communication or reporting failure.&lt;/p></description></item><item><title>Ceph PG undersized: fewer copies than the pool wants to place</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-undersized/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-undersized/</guid><description>&lt;h1 id="ceph-pg-undersized-fewer-copies-than-the-pool-wants-to-place">Ceph PG undersized: fewer copies than the pool wants to place&lt;/h1>
&lt;p>A Ceph cluster reports &lt;code>ceph health detail&lt;/code> listing PGs in an &lt;code>undersized&lt;/code> state. The cluster serves I/O at reduced redundancy. The warning does not resolve on its own and recovery stalls. A structural block prevents CRUSH from placing the configured number of replicas.&lt;/p>
&lt;p>Unlike &lt;code>peering&lt;/code> or &lt;code>recovering&lt;/code>, &lt;code>undersized&lt;/code> is not transient. The acting set has fewer OSDs than the pool&amp;rsquo;s configured &lt;code>size&lt;/code> (the replication factor for replicated pools, or the k+m sum for erasure-coded pools). Ceph runs the PG at reduced redundancy because CRUSH cannot find enough distinct failure domains to satisfy the rule. The fix is rarely to wait. It requires changing capacity, topology, or the CRUSH rule.&lt;/p></description></item><item><title>Ceph PG_NOT_DEEP_SCRUBBED: scrub verification debt and undetected bit rot</title><link>https://www.netdata.cloud/guides/ceph/ceph-not-scrubbed-in-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-not-scrubbed-in-time/</guid><description>&lt;h1 id="ceph-pg_not_deep_scrubbed-scrub-verification-debt-and-undetected-bit-rot">Ceph PG_NOT_DEEP_SCRUBBED: scrub verification debt and undetected bit rot&lt;/h1>
&lt;p>&lt;code>PG_NOT_DEEP_SCRUBBED&lt;/code> means Ceph&amp;rsquo;s proactive integrity check is falling behind. Deep scrub is the only mechanism that reads every byte of every object on every replica and verifies byte-for-byte consistency. When PGs miss their deep-scrub window repeatedly, silent corruption from bit rot, DRAM errors, firmware bugs, and incomplete writes after power loss accumulates without any signal.&lt;/p>
&lt;p>The companion check &lt;code>PG_NOT_SCRUBBED&lt;/code> covers the lighter daily scrub, which compares object metadata across replicas. Both checks surface through &lt;code>ceph health detail&lt;/code> and the &lt;code>ceph_health_detail&lt;/code> Prometheus metric exposed by the MGR module. There is no per-PG &amp;ldquo;overdue&amp;rdquo; gauge in the standard metrics pipeline, which is why scrub debt often goes unmonitored until someone runs &lt;code>ceph -s&lt;/code> and sees a &lt;code>HEALTH_WARN&lt;/code> they do not recognize.&lt;/p></description></item><item><title>Ceph PGs stuck peering: the slow peering loop after a mass restart</title><link>https://www.netdata.cloud/guides/ceph/ceph-pg-peering-stuck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-pg-peering-stuck/</guid><description>&lt;h1 id="ceph-pgs-stuck-peering-the-slow-peering-loop-after-a-mass-restart">Ceph PGs stuck peering: the slow peering loop after a mass restart&lt;/h1>
&lt;p>After a full cluster power cycle, mass OSD restart, or wide maintenance event, peering should finish within a minute or two. When it does not, &lt;code>ceph -s&lt;/code> shows a long list of PGs in &lt;code>peering&lt;/code> or &lt;code>peering+activating&lt;/code>, the count is not decreasing, and client I/O for those PGs is hung. HEALTH_WARN or HEALTH_ERR can sit there for 20, 30, or 60 minutes with no visible progress.&lt;/p></description></item><item><title>Ceph recovery stalled: degraded PGs that are not healing</title><link>https://www.netdata.cloud/guides/ceph/ceph-recovery-stalled/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-recovery-stalled/</guid><description>&lt;h1 id="ceph-recovery-stalled-degraded-pgs-that-are-not-healing">Ceph recovery stalled: degraded PGs that are not healing&lt;/h1>
&lt;p>&lt;code>ceph -s&lt;/code> shows &lt;code>HEALTH_WARN&lt;/code> or &lt;code>HEALTH_ERR&lt;/code>, the cluster reports non-zero &lt;code>degraded&lt;/code> or &lt;code>undersized&lt;/code> placement groups, and clients still appear served. The degraded PG count is not climbing, which feels like progress. It is not. A flat degraded count with zero recovery rate is one of the most dangerous states a Ceph cluster can sit in: nothing is healing, and the operator assumes the system is working through it.&lt;/p></description></item><item><title>Ceph recovery storm: rebuild traffic starving client I/O</title><link>https://www.netdata.cloud/guides/ceph/ceph-recovery-storm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-recovery-storm/</guid><description>&lt;h1 id="ceph-recovery-storm-rebuild-traffic-starving-client-io">Ceph recovery storm: rebuild traffic starving client I/O&lt;/h1>
&lt;p>A Ceph recovery storm occurs when the cluster&amp;rsquo;s self-healing machinery starves the workloads it is supposed to serve. After an OSD failure, host loss, or bulk OSD addition, recovery and backfill traffic floods the same disks, network links, and OSD CPU that client I/O depends on. Client latency climbs 10x to 100x, applications time out, and retries add more load on top of the recovery stream.&lt;/p></description></item><item><title>Ceph RGW failed requests: aborted request rate and what it actually counts</title><link>https://www.netdata.cloud/guides/ceph/ceph-rgw-failed-requests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-rgw-failed-requests/</guid><description>&lt;h1 id="ceph-rgw-failed-requests-aborted-request-rate-and-what-it-actually-counts">Ceph RGW failed requests: aborted request rate and what it actually counts&lt;/h1>
&lt;p>&lt;code>ceph_rgw_failed_req&lt;/code> is one of the most commonly misread RADOS Gateway metrics. Operators see &amp;ldquo;failed&amp;rdquo; in the name and assume it counts HTTP 4xx and 5xx responses. It does not. It counts requests where the client connection was aborted before the response completed. That distinction changes who you page, where you look, and which signals you correlate with.&lt;/p>
&lt;h2 id="what-it-is-and-why-it-matters">What it is and why it matters&lt;/h2>
&lt;p>&lt;code>ceph_rgw_failed_req&lt;/code> is a per-instance counter exposed by each RGW daemon, scraped from the admin socket and labeled with &lt;code>instance_id&lt;/code> (alongside &lt;code>ceph_daemon&lt;/code>, &lt;code>instance&lt;/code>, &lt;code>job&lt;/code>). Its sibling counter is &lt;code>ceph_rgw_req&lt;/code>, the total request count. The operational signal is the ratio between the two: a sustained failed-request rate above 5% of total traffic for more than 5 minutes is the playbook&amp;rsquo;s TICKET condition.&lt;/p></description></item><item><title>Ceph RGW garbage-collection backlog: deleted data still consuming space</title><link>https://www.netdata.cloud/guides/ceph/ceph-rgw-gc-backlog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-rgw-gc-backlog/</guid><description>&lt;h1 id="ceph-rgw-garbage-collection-backlog-deleted-data-still-consuming-space">Ceph RGW garbage-collection backlog: deleted data still consuming space&lt;/h1>
&lt;p>You deleted several terabytes of S3 objects, but &lt;code>ceph df&lt;/code> shows raw usage barely moving. The cluster is approaching nearfull and the write freeze is coming. The deletes returned 204 to clients, so they succeeded from the S3 layer&amp;rsquo;s perspective, but the underlying RADOS objects are still on disk, queued behind the RADOS Gateway garbage collector.&lt;/p>
&lt;p>This is one of the quietest contributors to &amp;ldquo;the cluster is full but we deleted everything&amp;rdquo;. RGW does not free object data inline on delete. It marks the head object as deleted, enqueues the data objects (tail segments, multipart parts) for asynchronous garbage collection, and relies on a background GC thread on each gateway to drain the queue. When that thread stops making progress, deleted data keeps consuming capacity indefinitely.&lt;/p></description></item><item><title>Ceph RGW GET/PUT latency: S3 request latency and queue length</title><link>https://www.netdata.cloud/guides/ceph/ceph-rgw-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-rgw-latency/</guid><description>&lt;h1 id="ceph-rgw-getput-latency-s3-request-latency-and-queue-length">Ceph RGW GET/PUT latency: S3 request latency and queue length&lt;/h1>
&lt;p>When users report slow S3 GET or PUT responses, the RGW daemon is rarely the root cause. RADOS Gateway is a stateless HTTP frontend that translates REST calls into RADOS object operations. Its observed latency is dominated by the time those underlying operations take, plus whatever queuing happens when the gateway has more in-flight work than it can drain.&lt;/p>
&lt;p>The RGW perf counters expose two distinct kinds of signal: per-operation latency accumulators (&lt;code>ceph_rgw_op_get_obj_lat_sum/_count&lt;/code> and &lt;code>ceph_rgw_op_put_obj_lat_sum/_count&lt;/code>) for the S3 operations themselves, plus queue gauges (&lt;code>ceph_rgw_qlen&lt;/code> and &lt;code>ceph_rgw_qactive&lt;/code>) that show whether requests are piling up inside the daemon. Treating those signals together is the difference between &amp;ldquo;S3 is slow&amp;rdquo; and &amp;ldquo;S3 is slow because one OSD hosting a bucket index shard is in OMAP collapse.&amp;rdquo;&lt;/p></description></item><item><title>Ceph RGW orphaned multipart uploads: space that disappears from view</title><link>https://www.netdata.cloud/guides/ceph/ceph-rgw-multipart-orphans/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-rgw-multipart-orphans/</guid><description>&lt;h1 id="ceph-rgw-orphaned-multipart-uploads-space-that-disappears-from-view">Ceph RGW orphaned multipart uploads: space that disappears from view&lt;/h1>
&lt;p>Pool capacity climbs toward nearfull but bucket listings and &lt;code>radosgw-admin bucket stats&lt;/code> cannot account for it. The obvious explanations (client growth, snapshots, OMAP bloat) do not fit. This pattern is frequently caused by orphaned multipart upload parts in the RADOS Gateway (RGW) data pool.&lt;/p>
&lt;p>S3 multipart uploads create a manifest, upload parts into the bucket&amp;rsquo;s data pool, then call &lt;code>CompleteMultipartUpload&lt;/code> to assemble the final object. When that final step never happens, when the client retries uploads of the same key, or when RGW aborts an upload incompletely, the individual parts remain in RADOS. They occupy raw space but no live bucket index entry references them.&lt;/p></description></item><item><title>Ceph slow requests (SLOW_OPS): operations blocked past osd_op_complaint_time</title><link>https://www.netdata.cloud/guides/ceph/ceph-slow-requests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-slow-requests/</guid><description>&lt;h1 id="ceph-slow-requests-slow_ops-operations-blocked-past-osd_op_complaint_time">Ceph slow requests (SLOW_OPS): operations blocked past osd_op_complaint_time&lt;/h1>
&lt;p>&lt;code>ceph_healthcheck_slow_ops&lt;/code> greater than zero means operations on the cluster have crossed &lt;code>osd_op_complaint_time&lt;/code> (default 30s) and are stuck, not merely slow. The &lt;code>SLOW_OPS&lt;/code> health check surfaces them as a warning, and the metric itself is a live gauge pulled from &lt;code>ceph health detail&lt;/code>.&lt;/p>
&lt;p>Slow ops are a symptom of something downstream blocking I/O: a failing disk, a saturated BlueStore RocksDB DB, network timeouts between OSDs, or heavy deep-scrub on HDD during a maintenance window. The right first move is to read where in the pipeline each slow op is stuck before changing any config.&lt;/p></description></item><item><title>Ceph too many PGs per OSD: mon_max_pg_per_osd, peering cost, and sizing</title><link>https://www.netdata.cloud/guides/ceph/ceph-too-many-pgs-per-osd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-too-many-pgs-per-osd/</guid><description>&lt;h1 id="ceph-too-many-pgs-per-osd-mon_max_pg_per_osd-peering-cost-and-sizing">Ceph too many PGs per OSD: mon_max_pg_per_osd, peering cost, and sizing&lt;/h1>
&lt;p>PG count per OSD is one of the few Ceph sizing decisions with direct cost in both directions. Too many PGs per OSD means more memory and CPU spent on peering, recovery scans, and PG log maintenance across more logical units. Too few means CRUSH cannot spread data evenly, producing hotspots on specific OSDs while others sit idle.&lt;/p>
&lt;p>&lt;code>mon_max_pg_per_osd&lt;/code> (default 250&lt;!-- TODO: verify whether default was 200 before Luminous 12.2.10 -->) is the cluster&amp;rsquo;s failsafe against runaway PG counts. When an OSD approaches this number, Ceph raises &lt;code>TOO_MANY_PGS&lt;/code> and blocks new pool creation, &lt;code>pg_num&lt;/code> increases, and replication factor changes. This is a guard rail, not a performance target. The existing cluster keeps serving I/O; only topology changes that would add PGs are blocked.&lt;/p></description></item><item><title>Ceph unfound objects: the cluster cannot locate a surviving copy</title><link>https://www.netdata.cloud/guides/ceph/ceph-unfound-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-unfound-objects/</guid><description>&lt;h1 id="ceph-unfound-objects-the-cluster-cannot-locate-a-surviving-copy">Ceph unfound objects: the cluster cannot locate a surviving copy&lt;/h1>
&lt;p>When a placement group enters &lt;code>recovery_unfound&lt;/code> or &lt;code>backfill_unfound&lt;/code>, the cluster has objects it knows should exist but cannot locate on any OSD that is currently up and in. &lt;code>ceph health detail&lt;/code> surfaces this as the &lt;code>OBJECT_UNFOUND&lt;/code> check, and the cluster-wide gauge &lt;code>ceph_num_objects_unfound&lt;/code> rises above zero. Every known replica or erasure-coded chunk is on an OSD that is down, destroyed, or has not yet been probed.&lt;/p></description></item><item><title>How Ceph actually works in production: a mental model for operators</title><link>https://www.netdata.cloud/guides/ceph/ceph-how-it-works-in-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/ceph/ceph-how-it-works-in-production/</guid><description>&lt;h1 id="how-ceph-actually-works-in-production-a-mental-model-for-operators">How Ceph actually works in production: a mental model for operators&lt;/h1>
&lt;p>Most Ceph incidents become legible the moment you stop reasoning about RBD, CephFS, and RGW as separate products and start reasoning about one system: RADOS placing objects on OSDs. The three client interfaces are thin translations. Underneath them, every write is an object, every object lives in a placement group, and every placement group is mapped to a set of OSDs by a deterministic algorithm.&lt;/p></description></item></channel></rss>