Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Monitoring Bundle Laravel Package

ongr/monitoring-bundle

A Symfony bundle that adds health-check endpoints to your application, letting external monitoring tools query the status of services and dependencies. Useful for wiring up availability checks and exposing readiness information to uptime systems and dashboards.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — the framing is wrong by one framework. Despite being catalogued here as a Laravel/PHP package, ongr/monitoring-bundle is a Symfony bundle. Its distribution model is a Bundle subclass registered into the Symfony kernel, a DI Extension to load services.yml/XML, tag-based discovery of check services, and a shipped routing.yml imported with a prefix (/_monitor). Laravel has no equivalent pipeline: no kernel bundle registration, no container extension loading, no YAML service tags, no bundle-provided routes. So the packaging — which is most of the package — is non-transferable. What does transfer is the small core: a check/monitor interface, an aggregator service that runs the registered checks, and a controller that collapses their results into a single HTTP status code. Those are a few hundred lines of plain PHP.

Integration feasibility — vendorable in days, installable in zero cases. composer require should be treated as off the table. The package is Symfony 2/3-era, so expect a composer.json pinned to PHP 7.x and old symfony/* constraints that will collide with a Laravel 10/11 (PHP 8.2+) graph; making it install means --ignore-platform-reqs or constraint relaxation, both of which are how dependency debt starts. As a read-and-reimplement exercise it is genuinely cheap — a two-day spike to read vendor/ongr/monitoring-bundle/ (the interface, the aggregator, the controller) plus three to five days to rebuild it Laravel-native with tests. That is a real but bounded cost, and it competes directly against spatie/laravel-health or Laravel's built-in health route, which cost approximately nothing.

Technical risk — provenance, not craftsmanship. The code is small and boring, which is good. The risk is that 1 star / 0 dependents / 1.75 score is the signature of an open-sourced internal tool nobody maintained. Consequences: no security response, no framework-version compatibility work, no issue triage — all of that becomes ours the moment it enters the dependency tree. Secondary risk is transitives: ONGR is an Elasticsearch-centric shop, so the bundle may drag in ES client bundles for a health check that should be a SELECT 1.

Key questions to answer in the spike.

  • Does it hard-require Elasticsearch or any ONGR transport package, or is the check contract dependency-free?
  • What is the last commit date and the actual supported PHP/Symfony range?
  • Is there a test suite, and does it test the aggregator's behaviour when a check throws rather than returns unhealthy?
  • Does the response body leak internals, or is it status-code-only?
  • What does this do that Laravel's health route + spatie/laravel-health + Pulse does not already do in ~50 lines we control?

Integration Approach

Stack fit. Poor as a dependency; adequate as a pattern to copy. The transferable design is narrow and correct: define a HealthCheck contract returning {status, message}, register implementations, aggregate, expose one route, return 200/503. That contract is the only artifact worth carrying across the framework boundary.

Migration path, in recommended order:

  1. Adopt the platform-native equivalent (default). Laravel 11's /up health route plus spatie/laravel-health covers checks and status codes; Pulse covers application metrics; Telescope covers local event inspection; Horizon covers queue liveness; Sentry or OpenTelemetry covers the rest. Zero ownership, maintained, already in the graph.
  2. Reimplement the pattern natively (fallback). One controller, one interface, one config file, one service provider binding tagged checks. This is the option to pick if the team specifically likes the bundled "single aggregated endpoint, one class per dependency" ergonomics.
  3. Fork and port (only under hard behavioural parity). Fork to an internal namespace, replace Bundle/Extension with a ServiceProvider, replace YAML parameters with config/health.php + env(), replace route imports with Route::get(). Never reference upstream again.

Compatibility. Do not add this to the main application's composer.json under any option. Spike in a scratch branch or throwaway project, and if a port proceeds, target the current PHP and Laravel versions explicitly — no legacy constraint shims. If an ONGR-based system already in the estate is the reason for interest, pin that system's version separately and keep the two graphs isolated.

Sequencing.

  1. Timeboxed 48-hour discovery spike: read source, answer the key questions, write a one-page go/no-go.
  2. Decision gate with engineering and platform owners — explicitly compare against option 1 and record why native tooling is or isn't sufficient.
  3. If port: build the interface + aggregator + route, add tests including the throwing-check path, publish config.
  4. Point a single consumer at it in staging — one load balancer or one Kubernetes readiness probe — for a sprint.
  5. Expand to production traffic only after the failure-mode checklist below is demonstrably satisfied.

Operational Impact

Maintenance. Full ownership, permanently. Upstream is effectively dead, so every PHP upgrade, every Laravel upgrade, and every CVE in the health-check path is ours to notice and fix. Budget it as a standing internal-package line item, or choose the native option and budget nothing.

Support. No docs, no community, no vendor. The internal README must state what each check means, what threshold flips it unhealthy, and who is paged — otherwise the endpoint's semantics live in one engineer's head. Bus factor is one until a second engineer has reviewed the implementation.

Scaling — this is where a health endpoint quietly becomes a load problem. Poll frequency multiplies fast: an LB polling every 5s across 20 replicas is 4 requests/second, each fanning out to database, cache, queue, and Elasticsearch checks. Mitigations: cache check results with a short TTL (10–30s), enforce a hard total budget (e.g. 2s) with per-check timeouts, run expensive checks from a single instance rather than every pod, and never let a health check do writes or unbounded queries. Also watch poll amplification during incidents — the moment a dependency degrades, every probe in the fleet hammers it simultaneously.

Failure modes.

  • Correlated failure amplification. One flaky dependency flips the aggregated status to 503, the load balancer drains every instance, and a partial degradation becomes a full outage. Mitigate by separating liveness (fail → restart) from readiness (fail → drain) from informational (never affects status), and by being conservative about what participates in readiness.
  • Timeout stacking. N checks × per-check timeout can exceed the probe's own timeout, producing spurious failures that look like application failure. Enforce a total budget below the shortest consumer timeout.
  • Silent green. A check that catches an exception and returns healthy — or a listener that silently stops firing after a framework upgrade — gives you a dashboard that looks fine while data is missing. Emit a self-metric (checks run vs. checks reported) and alert on the delta.
  • Information disclosure. A status endpoint that names internal hosts, versions, or returns stack traces is a recon surface. Bind it to the internal network or require auth; status code only in the body where possible.
  • Mutable checks. A health check that writes, warms, or migrates is not a health check; it is a side effect under a probe schedule.

Ramp-up. One engineer-sprint to spike, reimplement, test, and harden; a second sprint of observation before trusting it in production. Low technical ramp-up, non-trivial organisational ramp-up: you are accepting a permanent internal fork for a capability the platform now ships natively. Absent a specific requirement to match an existing ONGR system's health semantics, the correct TPM call is to close this evaluation at the discovery spike, adopt the native health/observability stack, and treat the bundle as a reference design only.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core