whatwedo/monitor-bundle
whatwedo/monitor-bundle is a Symfony bundle for application health monitoring. Define checks, run them via console or HTTP endpoints, and review status in a dashboard to catch service failures and regressions early.
Architecture fit. whatwedo/monitor-bundle is a Symfony bundle, not a Laravel package. It registers itself via Symfony's kernel/bundle mechanism, depends on Symfony's DI container, event dispatcher, and HttpKernel, and exposes its checks through Symfony-flavored service tagging and configuration trees. In a Laravel application none of that bootstrapping exists, so this is not "install and wire into config/app.php" territory — there is no service provider, no facade, and no Laravel-native configuration surface. Treat it as a reference implementation of application health monitoring rather than a drop-in dependency for our stack.
Integration feasibility. Two realistic paths exist. First, stand up a small Symfony sidecar container (or microservice) alongside the Laravel app, expose the bundle's health/status endpoint there, and have it poll the Laravel app's /up (Laravel 11+) or a custom health controller plus infrastructure probes (DB, queue, Redis). Second, skip the bundle entirely and reimplement the same checks natively with spatie/laravel-health, Laravel's built-in health route, or a thin custom controller — which is almost certainly the lower-cost path. Directly requiring the bundle inside a Laravel HTTP request cycle is technically possible (Composer will pull it, and Symfony components ship with Laravel) but requires hand-building the container plumbing the bundle expects; that is fragile, undocumented for this use case, and not a supportable production pattern.
Technical risk. The dominant risk is framework mismatch, not code quality. Beyond that: 3 GitHub stars and 0 dependents means an effectively unproven audience, so we cannot borrow confidence from downstream usage. The bundle is maintained by whatwedo and the May 2025 release suggests active-ish care, but a single-vendor package at this adoption level carries bus-factor risk. The MIT license is permissive and low-risk legally. Additional risk: the bundle's health endpoint becomes an unauthenticated surface that leaks internal component names, versions, and dependency states — it must sit behind network policy or auth from day one. Finally, if we fork or wrap it, we own patch velocity for Symfony upgrades.
Key questions for the team. (1) Is the actual requirement a status endpoint, a dashboard, or alerting integration? The bundle mostly addresses the first two; alerting likely needs Prometheus/OpenTelemetry anyway. (2) Are we willing to operate a second runtime (PHP/Symfony sidecar) purely for monitoring? (3) Does our observability stack already have a health convention (Kubernetes probes, /up, existing APM agents) that makes this redundant? (4) Who owns the fork if we vendor it? (5) What is the concrete behavior we need that spatie/laravel-health plus a /up route cannot deliver?
Stack fit. Poor as a direct dependency on a Laravel codebase; acceptable as an isolated service. The bundle is architecturally at home in a Symfony monolith or a Symfony-based microservice fleet. For a mixed PHP estate where some services are Symfony and some are Laravel, it is credible as the Symfony-side standard, unifying health semantics across both if we also implement matching checks on the Laravel side.
Migration path. Recommended sequence: (a) do not add the bundle to the Laravel composer.json; (b) if the monitoring capability is genuinely needed, containerize it as a dedicated monitor service with its own Symfony skeleton app, registering checks that call out to the Laravel app and its dependencies over HTTP/TCP; (c) alternatively — and preferred — implement equivalent checks in Laravel using spatie/laravel-health or a custom /health controller that emits the same JSON contract the bundle would, so the contract is portable even if the code is not; (d) if the org later standardizes on Symfony for new services, the bundle can be adopted natively there without rework.
Compatibility. The bundle targets supported Symfony LTS lines; verify against the exact Symfony version in any sidecar. PHP version must match the rest of the fleet to avoid maintaining two base images. Because the Laravel app already ships several Symfony components (console, http-foundation, finder, etc.), there is version-range overlap to watch — but since we are not co-installing, this risk is confined to the sidecar. Container base image, healthcheck cadence, and log shipping should reuse existing platform standards rather than introducing bundle-specific conventions.
Sequencing. Week 1: confirm the requirement is not already satisfied by /up + APM. Week 2: prototype the JSON health contract locally in Laravel. Week 3: only if the contract proves insufficient, evaluate the sidecar. Decision gate before any production commitment: the sidecar must demonstrably add signal beyond existing tooling, or it is cut.
Maintenance. As a non-dependency, maintenance burden splits: the sidecar (if built) inherits the bundle's release cadence and Symfony upgrade treadmill; the Laravel side inherits only our own health controller, which is trivial. If the bundle is vendored or forked, we absorb security patching and Symfony compatibility work ourselves — a poor trade at 3 stars and 0 dependents. Budget for an annual review to confirm the package is still maintained; a single-vendor project this small can go quiet without notice.
Support. No commercial support, no community of scale, no Stack Overflow corpus. Our team's ability to debug is limited to reading the source — which is MIT and readable, so this is feasible, but it means every incident is a first-principles investigation rather than a search-and-find. Escalation path is "open a GitHub issue and wait." That is acceptable for a low-blast-radius status endpoint and unacceptable for anything on the critical alerting path.
Scaling. Health check endpoints scale horizontally with the app tier; the real scaling concern is poll frequency × number of services. If the sidecar polls dozens of services on a short interval, that becomes a fan-out bottleneck and a source of false positives under load. Cap polling concurrency, add jitter, and set timeouts aggressively. Do not let the monitor become the thing that pages you because the monitor is slow.
Failure modes. Enumerate them explicitly: (1) the health endpoint reports green while the app is functionally broken (checks too shallow — e.g., DB connection succeeds but migrations are stale); (2) it reports red for transient dependency blips, causing alert fatigue; (3) the unauthenticated endpoint is scraped by an attacker for version and topology disclosure; (4) the sidecar itself dies and monitoring silently stops — so the monitor must itself be monitored by something independent; (5) Symfony upgrade breaks the bundle and the sidecar stops booting, with no obvious signal. Each of these needs a mitigation written down before go-live, and (4) in particular is a classic self-referential monitoring blind spot.
Ramp-up. Low for anyone who knows Symfony; moderate for a Laravel-only team, who will need to learn bundle configuration, service tagging, and Symfony's DI conventions just to read the source. Realistically, the contract (what checks exist, what "healthy" means, what the JSON looks like) is learnable in a day; the internals are not worth the investment given we are not adopting them. Recommend the team learn health-check design as a discipline — thresholds, dependency classification, degraded-vs-down semantics — rather than learning this bundle specifically. That knowledge transfers; the bundle probably will not.
How can I help you explore Laravel packages today?