Skip to main content
RunBook Academy

Proxmox VEXXII · Operating as a Business ServiceChecklists

Operational checklists: daily, weekly, monthly, quarterly, annual

Foundation⏱ ~20 minpvecmpvesm

What you'll learn

  • Define an operational checklist for each cadence, with a command behind every line
  • Distinguish a check that can fail from one that cannot, and discard the second kind
  • Automate the daily check so that a human only sees exceptions
  • Recognise checklist theatre and the false confidence it produces

Prerequisites

None — start here.

Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12

Not yet marked complete on this device.

Why this matters in production

Without regular checks, problems accumulate until they become incidents. A daily 5-minute check catches what automation misses.

Daily

5 minutes. The first operator on shift:

  • Check the cluster dashboard for HEALTH_OK.
  • Check recent backup status.
  • Check the alerts inbox.
  • Glance at capacity warnings.

Written so each one can fail:

Read-only / Safethe daily check, with an expected answer for every line
set -euo pipefail
FAIL=0
note() { echo "CHECK-FAIL: $*"; FAIL=1; }

# 1. Quorum. Expected: Quorate: Yes, total votes equal to expected votes.
pvecm status | grep -q 'Quorate:.*Yes' || note 'cluster is not quorate'

# 2. Every node online. Expected: no node missing from the membership.
expected_nodes=3
seen=$(pvecm nodes | awk 'NR>3' | wc -l)
[ "$seen" -eq "$expected_nodes" ] || note "only $seen of $expected_nodes nodes in membership"

# 3. Storage. Expected: every configured storage active.
pvesm status | awk 'NR>1 && $3 != "active" {print}' | grep -q . \
&& note 'a storage is not active' || true

# 4. Ceph, where present. Expected: HEALTH_OK, or a documented HEALTH_WARN.
if command -v ceph >/dev/null; then
ceph health | grep -q '^HEALTH_OK' || note "ceph: $(ceph health)"
fi

# 5. Backups. Expected: no failed task in the last 24 hours.
pvesh get /cluster/tasks --output-format json \
| grep -o '"status":"[^"]*"' | grep -v '"status":"OK"' | grep -q . \
&& note 'a cluster task ended in a non-OK state in the recent window' || true

# 6. HA. Expected: no service in an error state.
if command -v ha-manager >/dev/null; then
ha-manager status | grep -qi 'error' && note 'an HA service is in error' || true
fi

exit "$FAIL"

Weekly

30 minutes. Includes:

  • Review backup verification results.
  • Review Ceph HEALTH and capacity.
  • Review cluster alerts from the past week.
  • Confirm monitoring notifications work (fire a test).
  • Verify the on-call rotation.

Monthly

2 hours. Includes:

  • Review the workload inventory against reality.
  • Review capacity trends; plan additions.
  • Run a DR tabletop exercise.
  • Review change requests from the past month.
  • Update runbooks based on recent incidents.

Quarterly

Half day. Includes:

  • Capacity review; trigger procurement if utilisation > 70 %.
  • Review and update the hardening checklist.
  • Review and test the DR plan.
  • Review access controls (admin accounts, RBAC, TFA).
  • Update the production reference architecture document.

Annual

1-2 days. Includes:

  • Full DR exercise (live drill, not just tabletop).
  • Review Proxmox subscriptions and support contracts.
  • Hardware lifecycle review (replacement schedule).
  • Review the course curriculum (yes, this very course).
  • Compliance audit if applicable.

The cadence

flowchart LR
  A[Daily 5min] --> B[Weekly 30min]
  B --> C[Monthly 2h]
  C --> D[Quarterly 0.5day]
  D --> E[Annual 1-2d]
  E --> A

Production considerations

The checks that only a human can do

Automation covers the daily cadence well and covers the longer cadences badly, because the questions get less mechanical as the interval lengthens.

CadenceAutomatableNeeds a person
DailyQuorum, storage, Ceph health, task failures, HA stateNothing, if the script is good
WeeklyVerify-job results, backup freshness per group, capacity trendWhether last week’s alerts were the right alerts
MonthlyInventory reconciliation, tag complianceWhether a capacity trend needs procurement, whether a runbook is still true
QuarterlyCertificate expiry, account and token ageWhether the DR plan still matches the architecture
AnnualSubscription and support expiry, hardware ageWhether the platform is still the right shape for the business

The pattern is that automation answers is it as configured and a human is needed for is it configured correctly. Both matter and only one of them scales.

Common mistakes

  • Checks with no defined expected outcome, which cannot fail and therefore mean nothing.
  • “I’ll do it later”, after which no check happens.
  • A checklist that grows and is never pruned, until completing it honestly costs more than the time available.
  • Automating the daily check and not alerting on it failing to run, so silence is ambiguous.
  • Verifying backups and never restoring one.
  • An annual restore test, which is too infrequent for the skill to survive.
  • Skipping quarterly and annual reviews under pressure, which is exactly when the platform is drifting fastest.

Key takeaways

  • Daily 5 min, weekly 30 min, monthly 2 h, quarterly 0.5 day, annual 1–2 d.
  • Every line needs a command and an expected answer, or it is not a check.
  • Automate the daily cadence, exit non-zero on failure, and alert separately on the check not running.
  • Automation answers is it as configured; a person is needed for is it configured correctly.
  • Restore a real guest quarterly and time it against your published RTO.
  • Prune checks that have never failed; a short list is followed and a long one is faked.

Knowledge check

Knowledge check · 5 questions

  1. Q1. Which of these is written as a check that can actually fail?

  2. Q2. A daily check script runs from cron and exits non-zero on failure, with output suppressed on success. What else is needed for it to be trustworthy? Select all that apply.

  3. Q3. A PBS verification job confirms that a backup will restore successfully.

  4. Q4. A team notices its daily checklist is being ticked without being performed. What is most likely to fix it?

  5. Q5. Why should a full restore test be quarterly rather than annual?

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