CeleryRadar watches your tasks, workers, queues, and Beat schedules continuously, so you'll know about a problem before your customers do.
CeleryRadar plugs into the brokers, schedulers, and notification destinations you already use, and alerts you on the things that actually break in production.
A task that retries twice and then succeeds still shows up green on most dashboards. That's also where the interesting bugs live.
If one of your tasks quietly retries twice every time before finishing, you'd never spot it from a success-rate number alone. They all sit at 99%. We pull retry rate out as its own column so the tasks limping across the finish line stop hiding.
| Task | Runs | Succeeded | Failed | Retries | Fail rate | Retry rate | Avg | p95 |
|---|---|---|---|---|---|---|---|---|
| send_invoice_email | 2,847 | 2,840 | 7 | 23 | 0.2% | 0.8% | 218ms | 412ms |
| sync_stripe_customers | 412 | 384 | 28 | 84 | 6.8% | 20.4% | 1,840ms | 4,220ms |
| process_webhook | 8,103 | 8,088 | 15 | 42 | 0.2% | 0.5% | 142ms | 287ms |
| compute_embeddings | 1,432 | 1,302 | 130 | 312 | 9.1% | 21.8% | 884ms | 2,104ms |
| rebuild_search_index | 6 | 6 | 0 | 0 | 0% | 0% | 14,920ms | 16,400ms |
Click any failed task and you get every attempt on one timeline: what worker picked it up, what error knocked it back, when Celery finally gave up. Beats piecing it together from log files on three different boxes.
Start free, upgrade when you outgrow it. No surprise charges.
celeryradar-sdk, call celeryradar_sdk.connect(api_key="<your-key>") in your Celery app config, and your first task event lands in the dashboard before the page reloads. No agents, no sidecars, no broker plugins.
django-celery-beat, and RedBeat.
capture_args=False to celeryradar_sdk.connect() and we'll only see task name, state, runtime, and exception type, never arguments or return values. Args and kwargs are also capped at 4KB per task and replaced with a "truncated" marker if oversized.