<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ceph Prometheus on Netdata</title><link>https://www.netdata.cloud/tags/ceph-prometheus/</link><description>Recent content in Ceph Prometheus on Netdata</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 22 Aug 2026 05:09:03 +0300</lastBuildDate><atom:link href="https://www.netdata.cloud/tags/ceph-prometheus/index.xml" rel="self" type="application/rss+xml"/><item><title>Best Ceph Monitoring Tools: 7 Options Ranked (2026)</title><link>https://www.netdata.cloud/resources/best-ceph-monitoring-tools/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/resources/best-ceph-monitoring-tools/</guid><description/></item><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;p&gt;A PG in &lt;code&gt;backfill_toofull&lt;/code&gt; is not making progress toward &lt;code&gt;active+clean&lt;/code&gt;. The source OSD has the data, CRUSH has chosen the target, but the target refuses the reservation because it is above &lt;code&gt;backfillfull_ratio&lt;/code&gt;. Client reads and writes still succeed; the redundancy gap is not closing.&lt;/p&gt;&#10;&lt;p&gt;The cluster is usually not at the hard &lt;code&gt;full&lt;/code&gt; ratio (0.95 default). It is at &lt;code&gt;backfillfull&lt;/code&gt; (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&gt;</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;p&gt;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&gt;osd_op_complaint_time&lt;/code&gt; (default 30 seconds) the OSD logs a slow op and the monitor raises &lt;code&gt;SLOW_OPS&lt;/code&gt;. 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&gt;</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;p&gt;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&gt;ceph -s&lt;/code&gt; reports &lt;code&gt;HEALTH_WARN&lt;/code&gt;, and &lt;code&gt;ceph health detail&lt;/code&gt; returns something like:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;BLUEFS_SPILLOVER&#10; 3 OSDs spilled over ~18 GiB metadata from &amp;#39;db&amp;#39; device&#10; (e.g. osd.12 spilled over 6.1 GiB metadata from &amp;#39;db&amp;#39; device)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;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&gt;slow_used_bytes&lt;/code&gt; goes nonzero, latency steps up by one to two orders of magnitude on the affected OSDs.&lt;/p&gt;</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;p&gt;An OSD fails on a cluster you have been running at 80% or higher. &lt;code&gt;ceph -s&lt;/code&gt; shows recovery starting, then &lt;code&gt;ceph health detail&lt;/code&gt; lists &lt;code&gt;OSD_NEARFULL&lt;/code&gt; and &lt;code&gt;BACKFILL_TOOFULL&lt;/code&gt;. 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&gt;&#10;&lt;p&gt;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&gt;</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;p&gt;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&gt;&#10;&lt;p&gt;&lt;code&gt;ceph_num_objects_degraded&lt;/code&gt; 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&gt;</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;p&gt;&lt;code&gt;ceph_health_status == 2&lt;/code&gt; 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&gt;&#10;&lt;p&gt;Treating the umbrella as the page to action creates two failure modes. First, it duplicates the more specific child signals (&lt;code&gt;OSD_FULL&lt;/code&gt;, PG down, MON quorum loss) that already have their own PAGE conditions with tighter gating, producing parallel escalations for the same incident. Second, it fires on transient cold-start states. A cluster-wide OSD restart will briefly push PGs through &lt;code&gt;peering&lt;/code&gt; and &lt;code&gt;incomplete&lt;/code&gt;, which trips HEALTH_ERR for tens of seconds before clearing. Operators who page on HEALTH_ERR without context spend their nights chasing ghosts.&lt;/p&gt;</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;p&gt;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&gt;&#10;&lt;p&gt;The trigger formula is &lt;code&gt;sum(ceph_mon_quorum_status) &amp;lt; floor(count(ceph_mon_quorum_status) / 2) + 1&lt;/code&gt;. For 3 MONs you need 2 in quorum. For 5 MONs you need 3. The standard alert sustain is 300 seconds, long enough to ride out a normal sub-second leader election and short enough to page before clients start timing out en masse.&lt;/p&gt;</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;p&gt;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&gt;&#10;&lt;p&gt;Two caveats apply across all levels. First, &lt;code&gt;ceph_health_status&lt;/code&gt; 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&gt;ceph_health_detail&lt;/code&gt; 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&gt;</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;p&gt;&lt;code&gt;OSD_DOWN&lt;/code&gt; fires. &lt;code&gt;ceph_osd_up&lt;/code&gt; flipped to 0. The 600-second countdown to OUT and recovery has begun.&lt;/p&gt;&#10;&lt;p&gt;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&gt;</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;p&gt;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&gt;</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;p&gt;The cluster suddenly stops accepting writes. Client applications report ENOSPC errors. &lt;code&gt;ceph status&lt;/code&gt; returns &lt;code&gt;HEALTH_ERR&lt;/code&gt;. &lt;code&gt;ceph health detail&lt;/code&gt; shows &lt;code&gt;OSD_FULL&lt;/code&gt; active. Reads still succeed, but every write, update, and delete fails cluster-wide.&lt;/p&gt;&#10;&lt;p&gt;This is a hard stop, not a throttle. Ceph refuses all write operations once any OSD crosses the configured &lt;code&gt;full_ratio&lt;/code&gt; (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&gt;</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;p&gt;A placement group in the &lt;code&gt;down&lt;/code&gt; 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&gt;ceph health detail&lt;/code&gt; reports &lt;code&gt;PG_AVAILABILITY&lt;/code&gt; with one or more PGs flagged &lt;code&gt;down&lt;/code&gt;. Data is unavailable, not just degraded.&lt;/p&gt;&#10;&lt;p&gt;A PG can briefly pass through &lt;code&gt;down&lt;/code&gt; during peering after an OSD failure, before activating on a surviving replica. The 300-second sustain on &lt;code&gt;sum(ceph_pg_down) &amp;gt; 0&lt;/code&gt; filters that transient window. Once a PG has been &lt;code&gt;down&lt;/code&gt; past the sustain, no OSD in the acting set can serve it, and the cluster will not heal it without operator action.&lt;/p&gt;</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;p&gt;An &lt;code&gt;incomplete&lt;/code&gt; 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&gt;peering&lt;/code&gt; or &lt;code&gt;recovering&lt;/code&gt; state does.&lt;/p&gt;&#10;&lt;p&gt;Alert on &lt;code&gt;sum(ceph_pg_incomplete) &amp;gt; 0&lt;/code&gt; 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&gt;incomplete&lt;/code&gt; after five minutes is genuinely stuck.&lt;/p&gt;</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;p&gt;A scrub or deep-scrub finished comparing replicas for a placement group and found they disagree. The cluster surfaces this as &lt;code&gt;OSD_SCRUB_ERRORS&lt;/code&gt; (often paired with &lt;code&gt;PG_DAMAGED&lt;/code&gt;) and the affected PG sits in &lt;code&gt;active+clean+inconsistent&lt;/code&gt;. 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&gt;&#10;&lt;p&gt;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&gt;</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;p&gt;&lt;code&gt;ceph_healthcheck_slow_ops&lt;/code&gt; greater than zero means operations on the cluster have crossed &lt;code&gt;osd_op_complaint_time&lt;/code&gt; (default 30s) and are stuck, not merely slow. The &lt;code&gt;SLOW_OPS&lt;/code&gt; health check surfaces them as a warning, and the metric itself is a live gauge pulled from &lt;code&gt;ceph health detail&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;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&gt;</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;p&gt;When a placement group enters &lt;code&gt;recovery_unfound&lt;/code&gt; or &lt;code&gt;backfill_unfound&lt;/code&gt;, the cluster has objects it knows should exist but cannot locate on any OSD that is currently up and in. &lt;code&gt;ceph health detail&lt;/code&gt; surfaces this as the &lt;code&gt;OBJECT_UNFOUND&lt;/code&gt; check, and the cluster-wide gauge &lt;code&gt;ceph_num_objects_unfound&lt;/code&gt; 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&gt;&#10;&lt;p&gt;Recovery of the affected PGs is blocked at the unfound object. Client reads and writes to those objects stall indefinitely rather than erroring out. The only paths forward are to bring back the missing data or to explicitly accept the loss.&lt;/p&gt;</description></item></channel></rss>