Skip to main content
Metrics type: Key MetricsCategory: Backup

At a glance

The number of hours since the last successful _snapshot completed against a registered snapshot repository. This is your recovery-point clock. If a node fails catastrophically, an index is corrupted, or someone runs a bad delete-by-query, the snapshot is what you restore from, and this card tells you how much data sits between your last good backup and now. A green reading means your backup schedule is running; a red reading means snapshots have silently stopped, which is the kind of failure nobody notices until the day they need to restore.

Calculation

The card finds the most recent successful snapshot and subtracts its end time from the current time:
Elasticsearch records each snapshot’s start_time_in_millis and end_time_in_millis; the engine uses the end time, because a snapshot only protects data once it has finished writing all shard segments to the repository. A snapshot that started two hours ago but is still IN_PROGRESS does not reset the clock: it has not completed, so it cannot yet be restored from. PARTIAL snapshots (where some shards succeeded but others failed, typically because a shard was unavailable at snapshot time) are treated cautiously. The engine surfaces the most recent full SUCCESS as the headline age and flags any newer PARTIAL separately, because restoring from a partial means accepting that some shards will be missing. If the connector is configured with multiple repositories, the headline is the freshest successful snapshot across all of them, on the assumption that any one valid repository satisfies the recovery-point requirement. The age is computed at read time, not cached, so the gauge ticks upward continuously and crosses the 72-hour threshold the moment the data genuinely ages past it, rather than at the next scheduled poll.

Worked example

A platform team backs up a production Elasticsearch cluster to an S3 repository via an SLM policy scheduled daily at 01:00 UTC, retaining 14 daily snapshots. The recovery-point objective agreed with the business is 24 hours. Snapshot taken on 20 Apr 26 at 10:00 BST (09:00 UTC): The headline reads 32 hours, amber against the team’s 24-hour RPO and approaching the 72-hour hard alarm. The clock should read about 8 hours (last night’s 01:00 snapshot plus the morning), so the fact that it reads 32 means last night’s snapshot never completed. The on-call DBA’s read:
The root cause was an expired IAM role on the S3 bucket: SLM had been failing silently for two nights, with each failure logged but no one watching the log. The card surfaced the gap before it crossed three days. Had it gone unnoticed for a week, a restore would have rolled the cluster back seven days, an unacceptable data loss for the business. Three takeaways for an ops team:
  1. Replicas are not a backup. A three-replica cluster survives node loss but not a bad delete_by_query, an index corruption, or an accidental index deletion. Only a repository snapshot protects against those, which is why this card exists separately from cluster-health cards.
  2. Silent SLM failure is the real risk. Backups rarely break loudly. They break when credentials expire, a bucket fills, or a policy is edited wrong, and the only symptom is the age quietly climbing. Alerting on age, not on “did the job run”, catches every variant.
  3. Set the threshold to your RPO. The default 72-hour alarm is generous. If the business expects at most 24 hours of data loss, tighten the alert threshold so the card pages well before three days have passed.

Sibling cards

Reconciling against the source

Where to look in Elasticsearch’s own tooling:
GET /_snapshot/{repository}/_all lists every snapshot with state, start_time, and end_time; the freshest SUCCESS is the headline. GET /_snapshot/_status shows any snapshot currently in progress and its per-shard completion. GET /_slm/policy/{policy_id} returns last_success, last_failure, and next_execution for an SLM-managed schedule, the fastest way to see why the clock stopped advancing. GET /_slm/stats gives policy-level success and failure counts over time. On Elastic Cloud, Stack Management -> Snapshot and Restore shows snapshot history and SLM status in Kibana; on AWS OpenSearch, snapshots are managed via the _snapshot API the same way, with automated snapshots visible in the console.
Why our number may legitimately differ from the repository listing: Cross-connector reconciliation: snapshot freshness has no ecom equivalent, but a stale snapshot raises the stakes of every other risk signal. If Unassigned Shards is non-zero while this card is red, escalate: you have both an active data-loss risk and a poor recovery point at the same time.

Known limitations / FAQs

My cluster has three replicas. Do I still need snapshots? Yes. Replicas protect against hardware and node failure, but they faithfully copy logical operations, including a bad delete_by_query, an accidental index deletion, or application-level corruption. Those propagate to every replica instantly. Only a point-in-time snapshot lets you roll back to before the mistake. Replicas are availability; snapshots are recoverability. The age keeps climbing even though my SLM policy is enabled. Why? “Enabled” is not “succeeding”. Check GET /_slm/policy/{policy_id} and read last_failure. The usual causes are expired repository credentials (S3/GCS/Azure), a full or quota-capped bucket, a repository that became unreachable, or a policy edited so its index pattern matches nothing. The policy can stay enabled and fail every night. A snapshot is currently in progress. Why has the age not reset? Because it has not completed. A snapshot only becomes a valid restore point once it finishes writing all shard segments to the repository. The card uses the end time of the last successful snapshot; an IN_PROGRESS snapshot resets the clock only when it transitions to SUCCESS. What is a PARTIAL snapshot and does it count? A PARTIAL snapshot completed but some shards failed, usually because a shard was unavailable when the snapshot ran. It is restorable, but the failed shards will be missing on restore. The card anchors the headline age to the last full SUCCESS and flags any newer partial separately, so you are not lulled into thinking a partial is a complete backup. How do I take an emergency snapshot right now? Run POST /_snapshot/{repository}/{snapshot_name}?wait_for_completion=true, or if SLM is configured, POST /_slm/policy/{policy_id}/_execute to trigger the policy immediately. Watch it reach SUCCESS and the card resets to near zero. Are snapshots full copies every time? They seem too fast. No, snapshots are incremental at the segment level. The first snapshot to a repository copies everything; each subsequent snapshot only copies new or changed Lucene segments and references the rest. This is why a daily snapshot of a multi-terabyte index can complete in minutes, and why deleting old snapshots does not always free much space. Should I tighten the 72-hour threshold? If your business recovery-point objective is shorter than three days, yes. Set the alert threshold in the Alert Rules tab to slightly above your snapshot interval (for daily snapshots, around 26 to 30 hours) so the card pages on the first missed run rather than waiting three days.

Tracked live in Vortex IQ Nerve Centre

Last Snapshot Age (hours) is one of hundreds of KPI pulses Vortex IQ tracks across Elasticsearch and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.