Queue Monitor
What it monitors
- Depth – number of pending jobs in each queue
- Failed count – jobs in the failed jobs table or dead-letter list
- Oldest job age – how long the oldest waiting job has been sitting
Supported drivers
redis– queries queue lengths from Redis directlydatabase– queries thejobsandfailed_jobstables
Configuration
'queues' => [ 'enabled' => true, 'watch' => [], // empty = auto-discover all queues 'depth_alert_threshold' => 1000, 'wait_time_alert_seconds' => 300,],To watch specific queues only:
'watch' => ['default', 'emails', 'notifications'],Alert conditions
An alert fires when any watched queue exceeds depth_alert_threshold jobs or wait_time_alert_seconds wait time. The alert auto-resolves when the queue drains.
Per-app queue thresholds (SaaS)
On Crontinel SaaS, you can override the depth threshold per app and per queue from the app settings page. This is useful when different apps have naturally different queue volumes.
The lookup order for thresholds is:
- Per-queue override (
queue_thresholds.{queue_name}) - Per-app default (
queue_thresholds.default) - Global config value (
depth_alert_threshold, default 1000)
The same settings page has three optional thresholds. Each is off while blank, so an app gets no new alerts until you set one.
| Setting | Alerts when |
|---|---|
| Oldest job age (seconds) | The oldest waiting job in any queue is older than this |
| Failed jobs (count) | A queue’s failed job count is above this |
| Horizon failures per minute | Horizon’s failed jobs per minute is above this |
Each alert resolves when the value drops back under its threshold. Queue and Horizon numbers come from the Laravel package.
Related
- Horizon monitor: supervisor and paused-state checks for Horizon-managed queues
- Cron monitor: scheduled commands that dispatch the jobs
- Alert channels: where a depth or wait-time alert goes
- Configuration reference: every
queueskey and its default - Billing and plans: hosted ingest allowances
- Troubleshooting: queue monitor showing no data