[ GUIDE ]

Laravel Horizon alternative for non-Redis queues

Horizon is Redis-only. Here are the real options when your queue driver is database, SQS, Beanstalkd, or a mix.

QUICK ANSWER

What's the best Laravel Horizon alternative?

For real-time Redis-only views, Horizon is unbeaten and free. For non-Redis queues (database, SQS, Beanstalkd, RabbitMQ) or multi-driver setups, NightOwl is the most Laravel-native alternative — it records every job attempt across all drivers with class, duration, status, retry count, and exception, grouped by job class with historical trending. Inspector.dev and AppSignal also cover queue monitoring across drivers.

Updated · 2026-04-13

What Horizon actually does

Horizon is a Redis-backed real-time dashboard for Redis queues. It provides:

  • Live queue depth per queue
  • Throughput (jobs/minute) per queue
  • Worker process status
  • Failed jobs list with retry
  • Per-job-class runtime metrics (recent window)
  • Pending-job wait-time snapshot

It's tightly coupled to Redis — the data structures it relies on (sorted sets, hashes) are Redis-native. That's why it doesn't work with other drivers.

Option A — DIY queue monitoring

Listen to Laravel's queue events and write every job attempt to a database table:

app/Providers/EventServiceProvider.php

php
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobFailed;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\DB;

Event::listen(function (JobProcessed $event) {
    DB::table('job_attempts')->insert([
        'job_class' => $event->job->resolveName(),
        'queue' => $event->job->getQueue(),
        'connection' => $event->connectionName,
        'status' => 'processed',
        'attempted_at' => now(),
    ]);
});

Event::listen(function (JobFailed $event) {
    DB::table('job_attempts')->insert([
        'job_class' => $event->job->resolveName(),
        'queue' => $event->job->getQueue(),
        'status' => 'failed',
        'exception' => $event->exception->getMessage(),
        'attempted_at' => now(),
    ]);
});

Build a simple Livewire dashboard on top. Works, but now you own: the schema, the retention policy, the aggregation queries, the UI, and the on-call for when the monitoring itself breaks. Cheap in dollars, expensive in time.

Option B — Full APM with cross-driver queue monitoring

Laravel's nightwatch package records every job attempt automatically across all drivers. NightOwl consumes that data and surfaces it as a proper queue monitoring dashboard:

  • Per-job-class count, p95 duration, failure rate
  • Per-queue throughput and lag (dispatch-to-start time)
  • Per-attempt detail with full exception context
  • Retry visibility — see every attempt, not just the terminal state
  • Alerts on failure-rate spikes or queue-lag growth

The tradeoff vs Horizon: APMs are near-real-time (seconds of lag), not instant. For live "is the queue draining right now" views, Horizon on Redis remains unmatched. For historical trending and cross-driver coverage, APMs win.

When to keep using Horizon

If you're on Redis and only need real-time views, stick with Horizon — it's free and purpose-built. Add a tool like NightOwl when you need:

  1. Historical data beyond Redis retention
  2. Queue monitoring integrated with request, query, and exception monitoring
  3. Alerting that doesn't require extending Horizon yourself
  4. Multi-driver coverage if parts of your stack use SQS or database queues

THE EASY WAY

NightOwl records every job attempt across every queue driver

Works with database, Redis, SQS, Beanstalkd, or any Laravel queue driver. Per-class dashboards show throughput, p95 duration, and failure rate over time. Click into a class to see every attempt with full exception context. Complements Horizon if you're on Redis; replaces it if you're not.

bash
composer require nightowl/agent
php artisan nightowl:install

From $5/month flat. Data in your PostgreSQL.

Frequently asked questions

What is Laravel Horizon?

Horizon is Laravel's first-party dashboard for Redis queues. It provides real-time views of queue depth, throughput, job runtime, worker status, and failed jobs — all backed by Redis as the data store. It's free, MIT-licensed, and official. It only works with Redis queues.

Why look for a Laravel Horizon alternative?

Three common reasons: (1) your queue driver isn't Redis — Horizon doesn't work with database, SQS, Beanstalkd, or RabbitMQ, (2) you want long-term historical data — Horizon's data lives in Redis with limited retention, (3) you want queue monitoring integrated with request, query, and exception monitoring instead of in a separate dashboard. NightOwl covers all three gaps.

Does Horizon work with SQS or database queues?

No. Horizon is Redis-only by design — it uses Redis data structures for its real-time views. If you're on SQS, database, Beanstalkd, or RabbitMQ queues, Horizon won't work. You need either a different monitoring tool or a migration to Redis.

Can I use Horizon and NightOwl together?

Yes — they're not exclusive. Horizon gives you the real-time Redis view; NightOwl gives you long-term historical queue data alongside request, query, and exception monitoring. Teams on Redis often keep Horizon for the live dashboard and add NightOwl for production-grade APM.

Does Horizon alert on failed jobs?

Not natively. Horizon surfaces failed jobs in its dashboard, but alerting requires extending it yourself — for example, listening to the Illuminate\Queue\Events\JobFailed event and dispatching notifications. Full APMs typically ship alerting out of the box.

What's the cheapest Horizon alternative for non-Redis queues?

Rolling your own — a database table that records every job attempt via the JobProcessed/JobFailed events, plus a simple Laravel view on top. That's free in dollars but costs maintenance time. The commercial option is NightOwl from $5/month, which records every job attempt across all drivers automatically.

Does Horizon show queue latency (time from dispatch to start)?

Yes, in its 'Pending' view per queue. It shows current wait time for the oldest pending job, which is a real-time snapshot rather than a trend. For historical queue latency (time-to-start over time), you need an APM that records per-job timestamps — see our queue-latency guide.

Is there a Horizon-like dashboard for SQS queues?

Not from the Laravel team. AWS's own SQS console shows queue depth and throughput but not per-job detail. Third-party options include NightOwl (works across all queue drivers) and rolling your own on top of SQS's CloudWatch metrics. Inspector.dev and AppSignal also cover SQS queue monitoring.

PRICING

Flat pricing. No event caps. No per-seat fees.

14-day free trial, no credit card. Your PostgreSQL, your data.

HOBBY

$5 /month

1 app · 14 days lookback · all Laravel events

TEAM

$15 /month

Up to 3 connected apps · unlimited environments · all Laravel events

AGENCY

$69 /month

Unlimited apps · unlimited agent instances · same flat rate at any traffic

Related