Guides/Use Cases

How to Monitor Celery Beat and Background Queue Workers

Updated June 14, 2026 5 min read

Background workers fail in two silent ways: the scheduler (Celery beat, sidekiq-cron) stops enqueuing periodic tasks, or the workers stop consuming the queue. Both leave the app looking healthy while work quietly piles up or vanishes.

Monitor a periodic task

Ping at the end of the task body so a successful run reports in:

from celery import shared_task
import requests

BASE = "https://api.cronguard.dev/v1/ping/<your-uuid>"

@shared_task
def refresh_reports():
    try:
        do_refresh()
        requests.get(BASE, timeout=10)
    except Exception:
        requests.get(BASE + "/fail", timeout=10)
        raise

Monitor the beat scheduler itself

Schedule a tiny heartbeat task every minute. If its ping stops, Celery beat is down — independent of any individual task:

app.conf.beat_schedule = {
    "heartbeat": {
        "task": "tasks.heartbeat",
        "schedule": 60.0,
    },
}

@shared_task
def heartbeat():
    requests.get("https://api.cronguard.dev/v1/ping/<your-uuid>", timeout=10)
Monitor the scheduler and the workers separately. A beat heartbeat tells you tasks are being enqueued; a per-task ping tells you they’re actually being processed.

Alerts you won’t miss

Send these pings to CronGuard and set the cadence. If a periodic task or the scheduler stops checking in, you get instant alerts across SMS, WhatsApp, Slack, Telegram and email. Free to start.

Stop losing sleep over silent failures

CronGuard alerts you within minutes when a scheduled job fails to check in. No agent to install. Free to start.

Start Monitoring Free