Speedtest Tracker is the self-hosted solution that runs Ookla or LibreSpeed internet speed tests on a schedule and records the results in a database — giving you a historical record of your ISP's actual performance over time. It's how you prove your ISP is throttling you at 6 PM, document SLA violations, and catch degraded upload speeds before they affect your remote team. But Speedtest Tracker only delivers value if it's actually running its scheduled tests. Vigilmon monitors Speedtest Tracker's web interface, API endpoint, and scheduled job status so you catch failures before weeks of missing data make the trends meaningless.
What You'll Build
- An HTTP monitor for Speedtest Tracker web UI availability
- An API endpoint monitor for application liveness
- A scheduler heartbeat monitor to confirm tests are running on schedule
- SSL certificate monitoring for your Speedtest Tracker domain
Prerequisites
- A running Speedtest Tracker instance (e.g.,
https://speedtest.example.com) - HTTPS configured via reverse proxy
- A free account at vigilmon.online
Step 1: Verify Speedtest Tracker Web UI Availability
Speedtest Tracker serves its dashboard from the root path. A healthy response confirms the Laravel/PHP application is running:
curl -I https://speedtest.example.com
# Expected: HTTP/2 200
The root path returns the web dashboard with your historical speed test charts. A 502 Bad Gateway means the PHP-FPM process or the application container is down.
Step 2: Create a Vigilmon HTTP Monitor for Web Availability
- Log in to Vigilmon → Add Monitor → HTTP.
- URL:
https://speedtest.example.com. - Check interval: 60 seconds.
- Response timeout: 15 seconds.
- Expected status:
200. - Keyword:
Speedtest. - Label:
Speedtest Tracker Web UI. - Click Save.
Note on timeout: Speedtest Tracker is a PHP/Laravel application. On cold starts or under database load it can take several seconds to respond. A 15-second timeout prevents false positives from slow-but-healthy instances.
This monitor catches:
- PHP-FPM process crashes
- Database connection failures that cause Laravel to throw a 500 error
- Container OOM kills or restarts
- Reverse proxy misconfigurations that prevent traffic from reaching the application
Step 3: Monitor the API Endpoint for Application Liveness
Speedtest Tracker exposes a JSON API that serves data to its frontend charts. The /api/speedtest endpoint (or /api/speedtests in newer versions) returns a JSON array of recent results:
curl https://speedtest.example.com/api/speedtest
# Expected: HTTP 200 with JSON array
A typical response:
{"data":[{"id":1,"ping":12.4,"download":450.2,"upload":85.1,"created_at":"2026-06-30T10:00:00Z"}]}
- Add Monitor → HTTP.
- URL:
https://speedtest.example.com/api/speedtest. - Check interval: 5 minutes.
- Expected status:
200. - Keyword:
download. - Label:
Speedtest Tracker API. - Click Save.
Why monitor the API separately? Laravel can serve a maintenance page or cached error response with HTTP 200 while the database is down. A JSON response with speed test data confirms the full application stack — web server, PHP, and database — is functional.
Step 4: Set Up a Scheduler Job Heartbeat
This is the most important monitor for Speedtest Tracker. The entire value of the application depends on the Laravel task scheduler running periodic Ookla/LibreSpeed tests. If the scheduler stops — because the cron job inside the container dies, the container restarts and the schedule is lost, or the scheduler process itself fails — your database stops collecting data silently. No error is thrown; the web UI still loads. But the charts flatline.
Vigilmon's heartbeat monitor lets Speedtest Tracker's scheduler "check in" on each run, so you're alerted if it misses a scheduled check-in.
Configure the Heartbeat in Vigilmon
- Add Monitor → Heartbeat.
- Label:
Speedtest Tracker Scheduler. - Expected interval: Match your Speedtest Tracker schedule (e.g.,
3600seconds for hourly tests). - Grace period:
300seconds (5 minutes). - Click Save — Vigilmon provides a unique heartbeat URL, e.g.:
https://vigilmon.online/api/heartbeat/YOUR_UNIQUE_TOKEN
Configure Speedtest Tracker to Ping the Heartbeat
Add the following to your Speedtest Tracker environment configuration (.env or Docker environment):
SPEEDTEST_SCHEDULE="0 * * * *" # hourly — adjust to match your schedule
In your docker-compose.yml, add a custom scheduler command wrapper or use Speedtest Tracker's WEBHOOK_URL environment variable if your version supports it:
environment:
WEBHOOK_URL: "https://vigilmon.online/api/heartbeat/YOUR_UNIQUE_TOKEN"
If your version doesn't support WEBHOOK_URL, add the heartbeat ping to the scheduler cron inside the container:
# Inside the Speedtest Tracker container's cron job
/usr/bin/php /app/artisan speedtest:run && curl -fsS --retry 3 https://vigilmon.online/api/heartbeat/YOUR_UNIQUE_TOKEN
If the heartbeat monitor doesn't receive a ping within the expected interval plus grace period, Vigilmon fires an alert. This is the silent failure that no HTTP monitor catches — your UI looks fine, but weeks of data are missing.
Step 5: Monitor SSL Certificates
Speedtest Tracker is typically deployed on a home network or small office server where certificate renewal may not be fully automated. An expired certificate blocks browser access to your speed history exactly when you need to demonstrate ISP performance issues.
- Add Monitor → SSL Certificate.
- Domain:
speedtest.example.com. - Alert when expiry is within: 30 days.
- Alert again: 14 days, 7 days, 3 days, 1 day.
- Click Save.
Step 6: Configure Alerting
In Vigilmon under Settings → Notifications, configure your alert channels:
| Monitor | Trigger | Action |
|---|---|---|
| Web UI | Non-200 or keyword missing | Check container status; inspect PHP-FPM logs |
| API Endpoint | Non-200 or keyword missing | Check database connection; verify Laravel .env config |
| Scheduler Heartbeat | Missed check-in | Check cron inside container; restart scheduler; verify SPEEDTEST_SCHEDULE |
| SSL Certificate | < 30 days to expiry | Renew certificate; check ACME auto-renewal |
Alert after: 1 missed heartbeat for scheduler monitoring. A single missed scheduled test is already data loss.
Common Speedtest Tracker Failure Modes and What Vigilmon Catches
| Scenario | Vigilmon monitor | |---|---| | PHP-FPM crash | Web UI and API monitors fire | | Database connection failure | API returns 500; keyword check fails | | Scheduler cron missing after restart | Heartbeat monitor fires after first missed interval | | Ookla test binary fails silently | Heartbeat misses; web UI still loads — silent failure | | Container OOM kill | All monitors fire simultaneously | | SSL certificate expires | SSL monitor alerts at 30 days | | Disk full (results database grows large) | Write failures; API returns errors; keyword check fails | | Network interface down (can't run tests) | Scheduler may still run but tests fail; heartbeat depends on webhook support |
Speedtest Tracker is most valuable as a long-term historical record — but a gap in the data is invisible until you notice the chart ended two weeks ago. Vigilmon watches the web UI, API, scheduler heartbeat, and SSL certificate so you catch failures the moment they happen, not when you're building a case against your ISP.
Start monitoring Speedtest Tracker in under 5 minutes — register free at vigilmon.online.