saeedvaziry/laravel-monitoring
Laravel Monitoring adds a simple dashboard for keeping an eye on your Laravel application and server health. Track key performance and health metrics, spot issues early, and get a clear view of production from within Laravel.
This release (1.4.3) is the first one that makes the package viable on a modern stack: Laravel 10 support is now official, and the shell arithmetic was moved off bc onto awk. If you evaluated the package before and bounced off version constraints or “works on my Mac, not in the container” behaviour, re-evaluate now.
Minimal path to a first useful result:
composer require and check composer why-not if the constraint refuses to resolve — the usual culprit is a transitive dependency pinned below Laravel 10, not this package.awk, confirm awk is present in every environment that runs it: local, CI, staging, production, and any Alpine/BusyBox container. It is on virtually every base image, but a scratch/distroless image or a hardened container with a trimmed filesystem will fail loudly at the worst possible time.Where to look when something is wrong: the config file for threshold evaluation, then the package’s log output, then the shell command it actually executed. The 1.4.3 fix was specifically in condition-based alerting, so that code path is the newest and least battle-tested part of the package.
Treat conditions as code, not config drift. This package’s value is entirely in its alerting conditions, and conditions rot silently. Keep them in version control, review changes to them in PRs, and name them after intent (disk-usage-warning, not check-3) so an alert at 03:00 is self-explanatory.
One condition, one actionable owner. The most common failure mode for condition-based alerting is a single catch-all channel where four different teams learn to ignore everything. Route each condition to the channel of the person who can fix it. If you cannot name that person, the condition should not exist.
Pair every condition with an explicit clear path. Since this release fixes condition alerting, re-verify both halves: that the alert fires when the threshold is crossed and that it resolves when the metric recovers. An alert that fires correctly but never clears is worse than no alert — it trains people to dismiss notifications. Test the recovery path in staging by forcing the metric back under threshold.
Use Laravel 10’s scheduling for the evaluation cadence, and keep the schedule boring. Run evaluations from the scheduler at a fixed interval rather than ad hoc. Pick a cadence slower than your metric’s natural noise (do not page on a single 5-second spike) and faster than the time it takes to become a real incident. Document the chosen interval next to the condition — future you will want to know why it is 2 minutes and not 30 seconds.
Layer it under your existing observability, not instead of it. This is a good fit for host-level or app-level checks you control from Laravel, and for internal notifications. It is not a replacement for an external uptime monitor — a process that runs inside the app cannot reliably tell you the app is down. Keep at least one check that lives outside your infrastructure.
Integration tip: route through Laravel’s notification layer where possible. If the package dispatches Laravel notifications, you inherit mail/Slack/webhook channels, Notifiable routing, and queueing for free. Favour that over bespoke curl-in-a-condition logic, which will not retry and will not be observable.
Roll it out per host, not globally. Enable on one production node, live with it for a week, tune thresholds against real data, then roll out. Thresholds guessed in advance are almost always wrong in both directions.
awk vs bc: the fix is real, but watch the edges. Moving arithmetic from bc to awk removes a dependency that minimal images lack — good news for Docker/Alpine deploys. The trade-off is that you are now depending on whichever awk implementation is installed (gawk, mawk, or BusyBox awk). BusyBox awk is POSIX-ish but not identical, particularly around number formatting and precision. If a threshold comparison behaves differently between your laptop and production, this is the first thing to check.bc. The package no longer requires it, but if you extended it with your own condition scripts that shell out to bc, those are untouched. Grep your custom scripts for bc before removing it from your image.LC_NUMERIC affecting decimal separators — is a classic cause of “works when I run it” failures.LC_ALL=C in the environment the evaluations run under and much of this class of bug disappears.bc call or the alerting behaviour now has to reconcile that manually.How can I help you explore Laravel packages today?