sandermuller / laravel-queue-insights
Self-hosted, driver-agnostic queue observability for Laravel. Per-class throughput, durations, failures, and live depth/in-flight/delayed metrics with a Livewire dashboard.
Package info
github.com/SanderMuller/laravel-queue-insights
pkg:composer/sandermuller/laravel-queue-insights
Requires
- php: ^8.3
- illuminate/console: ^11.0||^12.0||^13.0
- illuminate/contracts: ^11.0||^12.0||^13.0
- illuminate/notifications: ^11.0||^12.0||^13.0
- illuminate/queue: ^11.0||^12.0||^13.0
- illuminate/redis: ^11.0||^12.0||^13.0
- illuminate/support: ^11.0||^12.0||^13.0
Requires (Dev)
- aws/aws-sdk-php: ^3.0
- dg/bypass-finals: ^1.9
- driftingly/rector-laravel: ^2.3
- larastan/larastan: ^3.9.3
- laravel/boost: ^2.4.0
- laravel/horizon: ^5.29
- laravel/pao: ^1.0
- laravel/pint: ^1.29
- livewire/livewire: ^3.0 || ^4.0
- mockery/mockery: ^1.6
- mrpunyapal/peststan: ^0.2.10
- mrpunyapal/rector-pest: ^0.2.7
- nunomaduro/collision: ^8.0
- orchestra/testbench: ^9.0||^10.0||^11.0
- pestphp/pest: ^3.0||^4.0
- pestphp/pest-plugin-arch: ^3.0||^4.0
- pestphp/pest-plugin-laravel: ^3.0||^4.0
- phpstan/extension-installer: ^1.4.3
- phpstan/phpstan-deprecation-rules: ^2.0.4
- phpstan/phpstan-phpunit: ^2.0.16
- phpstan/phpstan-strict-rules: ^2.0.10
- predis/predis: ^2.2 || ^3.0
- rector/rector: ^2.4.1
- sandermuller/boost-skills: ^2.16
- sandermuller/package-boost-laravel: ^1.0
- sentry/sentry: ^4.23
- spaze/phpstan-disallowed-calls: ^4.10
- symplify/phpstan-extensions: ^12.0.2
- tomasvotruba/cognitive-complexity: ^1.1
- tomasvotruba/type-coverage: ^2.1
Suggests
- aws/aws-sdk-php: Required only when snapshotting SQS queues (mirrors illuminate/queue's own suggest).
- guzzlehttp/guzzle: Required only when the slack alert channel is enabled (provides the HTTP client used by `Illuminate\Http\Client\Factory`).
- illuminate/mail: Required only when the mail alert channel is enabled (provides the `mail.manager` binding).
- laravel-notification-channels/discord: Optional — extend `QueueAlertNotification::via()` to add Discord routing.
- laravel-notification-channels/microsoft-teams: Optional — extend `QueueAlertNotification::via()` to add Microsoft Teams routing.
- laravel-notification-channels/pagerduty: Optional — extend `QueueAlertNotification::via()` to add PagerDuty incident routing.
- laravel-notification-channels/telegram: Optional — extend `QueueAlertNotification::via()` to add Telegram routing.
- livewire/livewire: Required only to use the bundled dashboard route. Capture + snapshot run without it.
- sentry/sentry-laravel: Required only when the sentry alert channel is enabled (provides the initialised Sentry hub the channel captures into; wires the DSN from SENTRY_LARAVEL_DSN).
This package is auto-updated.
Last update: 2026-08-21 23:03:57 UTC
README
Laravel Queue Insights
Self-hosted queue observability for Laravel that doesn't care which driver you run. Queue depth, in-flight and delayed counts, enqueue-to-pickup wait time, per-class metrics, batches, chains, failures with their captured context, alerting, Prometheus metrics, and scheduler runs, all of it the same on SQS, Redis, database, and Laravel Cloud managed queues. No Horizon required, and no job data sent anywhere.
Everything goes into a bounded Redis keyspace that evicts itself. The dashboard is Livewire and Blade with no Filament or Nova coupling, so you can mount it in the admin layout you already have.
Live demo: queue-insights-demo.laravel.cloud — public preview on Laravel Cloud, seeded with realistic fixtures.
Installation
composer require sandermuller/laravel-queue-insights php artisan vendor:publish --tag=queue-insights-config
Requires PHP 8.3+, Laravel 11/12/13, Redis, and livewire/livewire 3 or 4 if you use the bundled
dashboard route. The service provider auto-discovers. See
Installation for the full
requirements and the environment knobs, and
UPGRADING.md when upgrading from an older release.
Usage
Every tile, alert detector, and Prometheus gauge reads from snapshots written by
queue-insights:snapshot. The package registers it on Laravel's scheduler with
->everyMinute()->withoutOverlapping(), so a host running php artisan schedule:work (or the
equivalent cron) is all it needs.
The dashboard mounts at /queue-insights when dashboard.enabled=true. Authorise it with a Gate:
// app/Providers/AuthServiceProvider.php Gate::define('viewQueueInsights', fn ($user) => $user->isAdmin());
Payload capture is off by default, and there are good reasons to leave it that way. Read Payload capture and SECURITY.md before turning it on.
Documentation
Read the full documentation at sandermuller.github.io/laravel-queue-insights. The source lives in docs/.
Getting started
- Why Queue Insights? — what it answers that
queue:workand afailed_jobstable do not, and the full feature list - Installation — requirements, the snapshot scheduler, environment knobs
- Payload capture — the three modes, the separate pending budget, custom sanitizers
Dashboard
- Dashboard — authorisation, multi-connection scoping, retry permissions and workflow, filtering
- Jobs, batches, and chains — wait time, the pending inspector, batch progress, chain lineage, job initiator
- Failure context — what is captured on failure, and the Sentry deep-link
- Theming and embedding — custom row markup, admin-layout embedding, dark mode, the cloud look
Operations
- Running workers — the
queue-insights:worksupervisor, its non-goals, shutdown grace tuning - Ops runbook — console commands, dashboard signals, driver quirks, key prefixes, Redis Cluster
- Alerting — nine detectors, cooldown, log / Slack / mail / Sentry channels, typed events, silencing
Integrations
- Horizon auto-discovery — supervisor queues and silenced jobs read from your Horizon config
- Connection aliasing — collapsing dispatcher/worker connection drift onto a canonical key
- Prometheus — the
/metricsendpoint, the metric catalogue, scheduler families, the push gateway - Scheduler observability — task snapshots, run records, missed and hung detection, retention
- Vapor and Laravel Cloud — what the managed platforms handle for you, and the few queues you list yourself
Reference
- Configuration reference — every key in
config/queue-insights.php, with defaults and what each one changes
Upgrading
See UPGRADING.md for migration steps between minor versions. Patch releases never require manual steps.
Changelog
See CHANGELOG.md and the GitHub releases page. The changelog is updated automatically on release publish — do not edit by hand.
Contributing
See CONTRIBUTING.md for local setup, the check commands, and how the Redis Cluster tests are run.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
MIT. See LICENSE.
