[ GUIDE ]

How to monitor Laravel in production

The five layers every production Laravel app needs. What to monitor, what to skip, and the tool decisions that matter.

QUICK ANSWER

What do I need to monitor in a production Laravel app?

Five layers: (1) exceptions with fingerprinted grouping and alerts, (2) slow SQL queries with per-pattern p95 trending, (3) queue workers and per-class failure rates, (4) scheduled task invocations with missed-run detection, (5) per-route latency with p95 and percentile drilldown. Tool options range from free (Telescope for dev, rolling your own for production) to from $5/month (NightOwl) to enterprise ($100-500+/month for Datadog, New Relic).

Updated · 2026-04-13

Layer 1 — Exceptions

The minimum-viable production monitoring. Every uncaught exception needs to surface somewhere within minutes — not days.

What you want per exception:

  • Grouping by fingerprint (10,000 occurrences of the same exception should be one issue)
  • Full stack trace with request context (URL, user, input)
  • First seen / last seen / occurrence count per group
  • Alert channel (Slack, Discord, Email) with rate limiting to prevent spam during incidents
  • Status management (open / resolved / ignored) to track triage

→ Exception tracking guide

Layer 2 — Slow queries

SQL is the number-one source of Laravel performance pain. Monitoring requires per-pattern aggregation, not per-query logs.

What you want:

  • Query fingerprinting (bind-parameter normalization so 10K executions roll up into one pattern)
  • Per-pattern p95 duration over any time range
  • N+1 detection across real traffic (not just local dev)
  • Correlation to the route/request that fired each query

→ Slow query guide · N+1 detection

Layer 3 — Queue workers and jobs

Queued work is where silent failures live. Users don't see the error — the job just doesn't run. Essential signals:

  • Failure rate per job class (not aggregate)
  • p95 runtime per job class
  • Queue lag — time from dispatch to start
  • Worker health — are workers processing? Any crashes?

→ Queue monitoring · Failed job monitoring

Layer 4 — Scheduled tasks

The easiest thing to forget. If cron stops running, you might not notice for days.

  • Invocation history (did it run? when?)
  • Duration per task (growing durations = trouble)
  • Missed-run detection (scheduler itself stopped)
  • Dead-man's-switch alert — alert when no tasks have run in N minutes

→ Scheduled task monitoring

Layer 5 — Request latency

Average latency lies. You want p95 per route pattern, with trending.

  • p50, p95, p99 per route pattern
  • Time-series trending (regressions on deploy)
  • Request drill-down — for a slow request, see every DB query and external call
  • Error rate per route (separate from exception tracking — 5xx as a metric)

→ Slow endpoints · p95 latency

What NOT to prioritize early

Things that look important but aren't where most teams spend their first monitoring dollar:

  • Real-user monitoring (RUM) — browser-side latency. Useful eventually, overkill for monolithic Laravel apps early on.
  • Distributed tracing — only matters if you have multiple services. One Laravel app = request-level tracing is enough.
  • Infrastructure metrics — CPU, disk, memory. Your hosting provider's dashboards cover this.
  • Synthetic transaction monitoring — scripted browser replays. Valuable for specific user journeys but lots of setup.

Tool recommendation by team size

Team Tools Monthly cost
Solo devNightOwl Hobby or Nightwatch Cloud + UptimeRobot free$0-5
Small team (2-10)NightOwl Team $15 + BetterUptime $29$44
Agency (multi-client)NightOwl Agency $69 (unlimited apps)$69
Enterprise (compliance)NightOwl BYOD + ELK self-host + Datadog for infra$500+

THE EASY WAY

NightOwl covers all five layers in one install

Exceptions, queries, jobs, scheduled tasks, requests, cache, mail, notifications, outgoing HTTP — every Laravel watcher in one dashboard, all in your own PostgreSQL.

bash
composer require nightowl/agent
php artisan nightowl:install

From $5/month flat. 14-day free trial.

Frequently asked questions

What do I need to monitor in a production Laravel app?

Five layers cover 95% of what matters: (1) exceptions with fingerprinted grouping and alert channels, (2) slow SQL queries with pattern-level p95 trending, (3) queue workers, attempts, and per-class failure rates, (4) scheduled task invocations with missed-run detection, (5) per-route latency with p95 trending. Logs and outgoing HTTP are secondary layers. Infrastructure-level uptime is table stakes — covered by a separate uptime tool.

How do I monitor Laravel in production cheaply?

Laravel Telescope is free but dev-only. Flare starts at $9/mo Hobby (single user/project, 10K errors) and covers exceptions only — you still need something for queries, jobs, and schedules. The cheapest full-APM option is NightOwl from $5/mo flat (Hobby, 1 app) or $15/mo Team (3 apps) with BYOD Postgres; it doesn't scale with traffic. Self-hosting OpenTelemetry + Grafana is free in dollars but expensive in ops time.

Can I monitor Laravel without installing a third-party tool?

Partially. Laravel ships plenty of hooks — DB::listen, event listeners for queue/notification/mail events, the scheduler's onSuccess/onFailure callbacks. You can write everything to your database and build dashboards with Livewire or Filament. It works, but you're committing to maintain a monitoring product alongside your actual product.

What's the first thing I should monitor?

Exceptions. If an exception fires in production and nobody sees it, you have zero visibility. Start with either the free Flare tier or a basic NotifyOnException Slack channel, then add performance and queue monitoring once you have baseline error coverage.

How do I know if my Laravel monitoring is actually working?

Trigger a synthetic error in staging or behind a feature flag (a controlled exception) and verify it surfaces in your monitoring within a minute or two. Do the same for a slow query (add a SELECT pg_sleep(2)) and a failing queued job. Any tool that can't reliably surface synthetic failures within its expected latency window isn't ready for production.

Should I use logs or APM for Laravel production monitoring?

Both. Logs capture free-text events — good for auditing and ad-hoc debugging. APM captures structured per-request telemetry — good for aggregation and trending. They answer different questions. A tool like NightOwl does both; or you can run an APM plus a log aggregator like Loki or Better Stack.

What's the difference between monitoring and observability?

Monitoring answers pre-defined questions: 'is the /checkout route slow?'. Observability lets you ask arbitrary questions after the fact: 'which users experienced high latency on Tuesday between 2 and 4 PM?'. Classic APMs lean monitoring; OpenTelemetry + high-cardinality trace backends lean observability. For most Laravel teams, monitoring is sufficient.

How long should I retain Laravel monitoring data?

Minimum 14 days for trend comparisons (week-over-week debugging). 30-90 days covers most post-mortems. SOC 2 and similar require 365 days for audit logs (a subset of all monitoring data). BYOD storage like NightOwl's Postgres model lets you keep as much as your database has room for — unlimited in principle.

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