Blog · Uptime

Uptime monitoring and error tracking in one tool

An uptime monitor tells you the site is down. An error tracker tells you why. Keeping them in two tools means two dashboards, two sets of alerts, and a lot of tab switching at 3 a.m.

Three tools for one question

A typical small team ends up with an error tracker, a separate uptime monitor, and maybe a third service for cron jobs - plus a status page from yet another vendor. Each one is fine on its own. Together they answer the same question - is my app working? - from three dashboards that don't know about each other.

When the API goes down, the uptime tool pages you. The error tracker fills with connection errors from the front end. Neither links to the other, and you piece the story together by hand.

What a good uptime check does

The point of an uptime monitor is to wake you up for real outages and never for a dropped packet. In BugCatch each HTTP monitor works like this:

BehaviourValue
Check intervalEvery 5 minutes
Request timeout10 seconds
Retries before marking down3, spaced 5 seconds apart
Uptime windowRolling 24 hours

A URL is only reported down after the first check and all three retries fail. Response time is recorded on every check, so you can see a service getting slower before it falls over.

SSL certificates and domains

Turn on checkSsl and every check also reads the certificate's expiry date. You get one email a day once it has 30 days or less left, with the exact day count. checkDomain does the same for the domain registration - useful because a certificate can auto-renew while nobody notices the domain itself is about to lapse.

Cron jobs: the monitor that waits for you

Some things can't be checked from the outside: a nightly backup, a queue worker, an export that runs every hour. For those, the job checks in instead. If BugCatch doesn't hear from it on time, it alerts - the "dead man's switch" pattern.

No SDK is needed. Add one line to the end of the job:

# crontab: run the backup at 02:00, then check in
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://api.bugcatch.app/cron/YOUR_MONITOR_ID/ping

Set the expected interval and a grace period. A job that should ping every hour, with the default 5-minute grace, is reported down if 66 minutes pass without a ping. There are also /start and /fail endpoints if you want run durations or an explicit failure.

Cron monitor reference

A status page your users can check

Each project gets a public page at bugcatch.app/status/your-slug. You choose which uptime and cron monitors appear on it and give them public names - prod-health-check-v3 can read "API". When something breaks, post an incident and update it as you go: investigating, identified, monitoring, resolved.

It's the page you link to instead of answering the same question in five DMs.

Why it helps to have it all in one place

  • One set of alerts. Downed monitors, new issues and threshold alerts each have their own cooldown, so one bad afternoon doesn't turn into fifty emails.
  • The cause is next to the symptom. When a monitor goes down, the errors your app reported in the same minutes are in the same project.
  • One bill. Uptime and cron monitors share one limit on your plan: 3 on Starter, 20 on Pro, unlimited on Business.
  • On your phone. The BugCatch mobile app pushes monitor and issue alerts, with quiet hours per device.

Setting it up

Open your project, go to Monitors, and add the URL you want checked - usually a health endpoint such as /health rather than the home page. Add a cron monitor for each scheduled job, then pick which ones go on the status page. Monitors are available from the Starter plan (€4 a month), and every paid plan starts with a 14-day Pro trial.