Skip to content
← All posts

Launching Laravel Queue Monitor

Full queue visibility without Horizon or Redis. Laravel Queue Monitor tracks every job on any driver — database, SQS, Beanstalkd — with one composer require and a migration. No infrastructure requirements beyond your existing database.

· 4 min read · Sylvester Damgaard
Launching Laravel Queue Monitor

I released cboxdk/laravel-queue-monitor v1.2.0 today. Full queue job visibility for any Laravel application — no Horizon, no Redis required. If your app has a database connection, you have monitoring.

The problem

Queue monitoring in Laravel has always meant Horizon, and Horizon means Redis. If you run database queues, SQS, or Beanstalkd, you get nothing. No job tracking, no failure history, no retry visibility. A job fails at 3am and your only signal is a row in the failed_jobs table.

Even with Horizon, you get aggregate dashboards — throughput, wait times, recent jobs. You don't get individual job tracking with retry chains, exception history, or the ability to replay a failed job from its stored payload. And you definitely don't get per-job CPU time and memory usage. Nobody does that.

Any driver, one migration

Queue Monitor hooks into Laravel's native queue events — the same events every driver fires. Database, Redis, SQS, Beanstalkd, custom drivers. It doesn't care what moves the jobs. It just listens and records.

bash
composer require cboxdk/laravel-queue-monitor
php artisan vendor:publish --tag="queue-monitor-config"
php artisan migrate

That's it. Monitoring starts automatically. Every job dispatched after this point is tracked with a UUID, full lifecycle timestamps, server identification, and worker type detection.

Queue Monitor overview dashboard showing job count, success rate, failed jobs, average duration, and throughput chart
The overview dashboard. Key metrics, recent jobs, queue health, and throughput at a glance.

What you see

For every job:

  • Full lifecycle — queued → processing → completed/failed/timeout. Exact timestamps for each transition.

  • Retry chains — when a job fails and retries, each attempt is linked. See the full history of a job across attempts.

  • Exception traces — full stack traces stored per attempt. No more digging through log files to find what failed.

  • Per-job CPU and memory — actual CPU time in milliseconds and peak memory in MB for every single job. Not averages, not estimates — measured per execution. Also tracks worker memory limits and file descriptors. Powered by laravel-queue-metrics.

  • Replay — full payload stored (up to 64KB). Re-dispatch any failed job from the API, CLI, or programmatically.

Queue Monitor jobs list with status filters, queue selection, and sortable columns showing job class, status, queue, duration, and timestamps
The jobs list. Filter by status, queue, date range, or search. Every column sortable.
Queue Monitor job detail page showing payload, CPU time, memory usage, duration, and retry timeline with linked attempts
Individual job detail. Payload, metrics, retry timeline with full exception traces per attempt.

Three ways to access it

Web dashboard at /queue-monitor — overview, job list with filtering, per-job detail pages, analytics, and health checks. Every view is deep-linkable.

Queue Monitor analytics dashboard showing job class distribution donut chart, per-queue statistics table, per-server statistics, and failure patterns
Analytics view. Job class distribution, per-queue and per-server statistics, failure patterns.

Terminal dashboardphp artisan queue-monitor:dashboard launches a k9s-style TUI. Six views, keyboard navigation, status and queue filters, job drill-down. Built for SSH sessions — no browser, no port forwarding.

REST API — 14 endpoints for listing, filtering, replaying, and deleting jobs. Paginated with automatic sensitive payload redaction. Build your own dashboards or integrate with existing tooling.

Works with Horizon too

If you do use Horizon, Queue Monitor doesn't replace it — it complements it. Horizon gives you queue management and real-time throughput. Queue Monitor adds individual job tracking with retry chains, exception history, and replay. When Horizon is present, Queue Monitor automatically picks up supervisor data and workload metrics. Same for Queue Autoscale — scaling events and SLA tracking appear automatically when installed.

Queue Monitor health dashboard showing health score of 100 with six passing health checks
Health checks. Overall health score with individual check status for database, queue activity, stale jobs, queue size, queue routing, and storage.
Queue Monitor infrastructure dashboard showing worker overview, queue capacity table, SLA compliance at 100%, and autoscale activity counters
Infrastructure view. Worker overview, queue managers, queue capacity, SLA compliance, and autoscale activity.

The queue stack

This completes the Cbox queue observability stack:

  1. Queue Metrics — aggregate metrics, health scores, Prometheus export

  2. Queue Monitor — individual job tracking, replay, analytics

  3. Queue Autoscale — predictive scaling based on queue depth and SLA targets

Each works standalone. Install them together and they integrate automatically.

Full documentation: laravel-queue-monitor docs.