The production control center for Laravel queues & jobs
See exactly what ran — with the parameters it ran with, whether it failed, and how long it took. Supervise & auto-scale workers on any driver, watch whole-app performance, and dispatch jobs or run commands by hand — from one self-contained dashboard.
$ composer require anousss007/vigilance $ php artisan vigilance:install $ php artisan migrate # open /vigilance — that's it.
Everything you need to run background work in production
Horizon, Telescope and Pulse each cover a slice. Vigilance brings the operationally important parts together — and works no matter which queue driver you use.
Driver-agnostic capture
Full queued → running → done/failed lifecycle for jobs, commands and the scheduler — on database, Redis, SQS, Beanstalkd or sync. One row per run, with parameters.
Worker supervisor
A Horizon-style supervisor that runs & auto-scales worker pools on any driver — balancing, autoscaling, graceful restarts. Chaos-tested across drivers, zero orphans.
Whole-app APM
Pulse-parity telemetry — servers, slow requests/queries/HTTP, cache, exceptions, per-user usage. Captures cheaply and flushes after the response, so zero request latency.
Request & job tracing
Per-request / per-job waterfalls of every query, cache op and outgoing call — with N+1 detection. Tail-sampled: only slow or failed traces are stored.
Manual control plane
Dispatch allowlisted jobs (with a form reflected from the constructor) and run artisan commands from the dashboard — every action audited. Off by default; secure to enable.
Error tracking & alerts
A fingerprinted Issues inbox over every layer — web, queue, command and browser errors — with stacktraces and context. Rule-based alerts route to mail / Slack / Discord / Teams / webhooks, persisted as incidents with MTTR.
Front-end & route performance
Per-route throughput, error rate, Apdex and exact p50 / p95 / p99 latency — plus Real User Monitoring of Core Web Vitals (LCP, INP, CLS, FCP, TTFB) from real visitors via a tiny beacon.
SLOs & error budgets
Track availability and latency objectives against an error budget, with a short-window burn-rate alert — so you hear about a budget you'll exhaust before it's gone.
Logs & custom metrics
A searchable log explorer that correlates every line to the trace that emitted it, and a one-line API (Vigilance::increment() / gauge()) for your own business KPIs on the dashboard.
Built for production, not just local debugging
Sampling decided at dispatch time, size caps, secret redaction, an optional dedicated DB connection and a crash-proof capture guard — so it stays cheap at scale.
| Capability | Horizon | Telescope | Vigilance |
|---|---|---|---|
| Queue drivers | Redis only | all | all (database · redis · sqs · beanstalkd · sync) |
| Job lifecycle | ✓ | ✓ | ✓ one row/run + parameters |
| Worker supervisor + autoscale | ✓ (Redis) | — | ✓ every driver |
| Artisan commands | — | view | ✓ capture & run |
| Scheduler monitoring | — | partial | ✓ late / failed / grace |
| Whole-app APM + route percentiles | — | — | ✓ Pulse-parity · p50/p95/p99 · Apdex |
| Manual dispatch / run from UI | — | — | ✓ allowlisted + audited |
| Error tracking (grouped issues) | — | view | ✓ web · queue · command · browser |
| Real User Monitoring | — | — | ✓ Core Web Vitals + JS errors |
| SLOs + error budgets | — | — | ✓ burn-rate alerts |
| Trace-correlated logs | — | view | ✓ searchable + linked to traces |
| Alerting channels | — | — | ✓ mail · Slack · Discord · Teams · webhooks · incidents |
| Release health / deploy gating | — | — | ✓ before/after regression guard + rollback alert |
| Anomaly detection | — | — | ✓ dynamic baselines |
| Production-oriented | ✓ | debug tool | ✓ sampled · capped · guarded |
A worker supervisor that runs everywhere
One vigilance:supervise process runs and auto-scales your worker pools — the way Horizon does for Redis, but for database, SQS and Beanstalkd too. Define supervisors per environment; each manages a pool per queue with load-based balancing.
- Autoscaling by backlog or time-to-clear, throttled by max-shift & cooldown.
- Graceful pause / continue / restart / terminate — even on Windows (cache control-plane + signals).
- Crash recovery — dead workers respawn; a live Workers dashboard shows pools & heartbeats.
// config/vigilance.php 'environments' => [ 'production' => [ 'payments' => [ 'connection' => 'redis', 'queue' => ['payments'], 'balance' => 'auto', 'min_processes' => 2, 'max_processes' => 10, 'max_time' => 3600, ], ], ],
# run the heartbeat on each app server php artisan vigilance:check # enable per-request / per-job tracing VIGILANCE_TRACING=true VIGILANCE_TRACING_SAMPLE=0 # keep only slow + failed
Performance visibility without the SaaS bill
Whole-app APM (servers, slow requests, queries, outgoing HTTP, cache, exceptions, per-user usage) plus deep per-request waterfalls — self-hosted, driver-agnostic, and engineered to be cheap at scale.
- Recorders capture in microseconds and flush after the response — zero request latency.
- Per-recorder sampling, thresholds & grouping keep storage bounded.
- An
Ingestexport seam fans the same feed out to an external APM.
Errors, RUM, SLOs, custom metrics & logs
One dashboard for the whole picture — every layer captured cheaply, flushed after the response, sampled and bounded. Read the full observability guide →
- Issues — a fingerprinted error inbox across web, queue, command & browser, with stacktrace and context.
- Routes & Web Vitals — per-route p50/p95/p99 + Apdex, and RUM of Core Web Vitals from real users.
- SLOs & incidents — error budgets with burn-rate alerts; fired alerts tracked as incidents with MTTR.
- Logs & custom metrics — searchable logs correlated to traces, plus a one-line business-metrics API.
- Release health — every deploy gets a before/after verdict; a bad release fires a rollback-ready alert and anomaly detection catches the rest.
// custom business metrics — anywhere in your app Vigilance::increment('signups'); Vigilance::gauge('cart_value', $cart->total()); // .env — turn on RUM, then drop @vigilanceRum in your layout head VIGILANCE_RUM=true VIGILANCE_LOGS=true # trace-correlated log explorer VIGILANCE_DISCORD_WEBHOOK=https://discord.com/api/webhooks/…
Up and running in three commands
Migrations auto-load and the stylesheet is bundled — no host build step, no extra infrastructure.
composer require anousss007/vigilance php artisan vigilance:install # publishes config + next steps php artisan migrate
Lock down the dashboard (local-only until you do) — via a gate, like Horizon:
use Illuminate\Support\Facades\Gate; Gate::define('viewVigilance', fn ($user) => $user->isAdmin());
Prefer a closure? Vigilance::auth(fn ($r) => …) works too. The dashboard then lives at /vigilance.
Sensible defaults, tunable for production
Everything lives in config/vigilance.php — fully documented inline. The defaults are safe out of the box; these are the knobs that matter at scale.
Sampling, caps & retention
Vigilance is bounded by design. Sample successful runs (failures are always kept), cap stored payloads, redact secrets and prune on a schedule — so monitoring never becomes the thing you have to monitor.
- Dispatch-time sampling — a sampled-out success costs zero DB writes.
- Secret redaction by key name before anything is stored.
- Dedicated DB connection to keep writes off your primary.
# .env — recommended production profile VIGILANCE_SAMPLE_RATE=0.1 # keep 10% of successes VIGILANCE_DB_CONNECTION=monitoring # optional dedicated conn VIGILANCE_RETENTION_DAYS=7 VIGILANCE_FAILED_RETENTION_DAYS=30 # keep failures longer VIGILANCE_TRACING=true # slow + errored only
// config/vigilance.php 'path' => 'vigilance', // dashboard URL 'middleware' => ['web'], // request stack 'control' => [ 'enabled' => false, // RCE — opt in 'jobs' => ['mode' => 'marker'], 'commands' => ['mode' => 'list', 'allow' => ['mail:*']], ], 'redact' => ['password', 'token', 'secret'],
Publish, theme & extend
The dashboard is a standalone Livewire UI — no Filament, no host build step. Publish what you want to own, pick the cards you want on the APM page, and forward telemetry anywhere.
-
vendor:publishthe config, views or migrations to customize them. - Compose the APM card list; recorders have per-card thresholds & sampling.
- Implement the
Ingestseam to fan telemetry out to an external APM.
Command reference
Setup & maintenance
vigilance:installPublish config & print next steps (--provider publishes the gate stub)vigilance:doctorDiagnose the install and surface common misconfigurationsvigilance:pruneDelete old runs and trim metric snapshotsvigilance:snapshotCapture a throughput / runtime / wait-time snapshotvigilance:schedule-syncSync defined scheduled tasks into monitorsvigilance:deployRecord a deployment marker (feeds release health)vigilance:sourcemapsUpload JS source maps so RUM browser errors are symbolicatedWorker supervision
vigilance:superviseRun & auto-scale your queue workers (replaces queue:work)vigilance:statusShow running supervisors and their workersvigilance:pause / continuePause / resume all supervisorsvigilance:restartGracefully restart all workers (e.g. after a deploy)vigilance:terminateGracefully stop the supervisor and its workersAPM & uptime
vigilance:checkCapture server stats + flush telemetry — the heartbeatvigilance:apm-workDrain buffered telemetry (Redis write-behind ingest)vigilance:healthPing configured uptime URLs; record availability + latencyGive your queues a control center.
Free, MIT-licensed, and self-contained. Install it in three commands and open /vigilance.