spatie/laravel-uptime-monitor
Powerful, easy-to-configure uptime monitor for Laravel that notifies you when sites go down and recover, plus warns before SSL certificates expire. Uses Laravel native notifications to support Slack, Telegram, mail, and more.
Architecture fit
MonitorFailed, SslExpiresSoon), pluggable response checkers, and a swappable monitor_model for extending the domain object.sync command since 2.1.0). For a product team this is the largest functional gap: on-call engineers and service owners cannot self-serve, and there is no system of record beyond the database table.Integration feasibility
composer require, publish config and migrations, register the uptime and certificate check commands on the scheduler, configure channels. A competent Laravel pair can reach a working proof-of-concept in under a day.timeout_per_site, retry_connection_after_milliseconds, concurrent_checks, additional_status_codes, additional_headers, request payload support (3.1.0), per-monitor response checkers (3.2.0), and fire_monitor_failed_event_after_consecutive_failures to suppress flap noise.uptime-monitor-app repository rather than deploying a new Laravel app purely to host this package.Technical risk
| Risk | Severity | Note |
|---|---|---|
| Monitor host shares fate with monitored systems | High | Mitigate with a dedicated, isolated host and a dead-man's-switch on the scheduler |
| No API / no UI | High (product) | Requires in-house admin build or a third-party add-on package |
| Laravel major-version support lag | Medium | L9/L10 support arrived via community PRs; expect a gap after each Laravel major |
| Notification delivery depends on queue workers | Medium | Silent alert loss if the worker is down; must be health-checked |
| MIT, no commercial SLA, no escalation path | Medium | Community issues only; unacceptable as sole paging path for Tier 0 |
| Metadata anomaly | Low | "Last release 2026-10-19" and "Dependents: 0" look like scraping artifacts — verify against Packagist and GitHub before relying on them |
| Check volume / data growth | Medium | 5-min interval across 1,000 monitors is ~288k check rows/day; needs retention policy |
Key questions
sync driver?Stack fit
Migration path
uptime-monitor config as code in the repo.sync command for bulk import from the incumbent vendor or from a config manifest.monitor_model if monitors need ownership metadata (team, tier, escalation policy, runbook URL). This requires a schema migration.Compatibility
UptimeResponseChecker implementations are the extension point for JSON-health-endpoint or body-content validation; the default LookForStringChecker is too coarse for most APIs.MonitorFailed, SslExpiresSoon) integrate with existing observability if we forward them to our internal event bus.Sequencing
Maintenance
resend_uptime_check_failed_notification_every_minutes, default 60) for alert fatigue, and periodically audit monitor coverage against the service catalog.Support
Scaling
concurrent_checks (default 10), timeout_per_site (10s), and retries. A 1,000-monitor fleet at a 5-minute cadence is well within a single modest host, but the check cycle must complete inside the interval — model this before promising 1-minute cadence.Failure modes (ranked by impact)
Ramp-up
How can I help you explore Laravel packages today?