Your site went down at 03:14. You have the alert. Now you want the logs from 03:14.
That is the gap self-hosted uptime monitoring closes, and it is the only reason to consider running your own instead of using a hosted checker. So let us be straight about the trade first, because it is a serious one.
Uptime Robot checks from outside your infrastructure, from several places in the world. Central Logging checks from your own server, from one place.
That difference has three consequences, and none of them are small.
If external verification is the point of the exercise, use Uptime Robot. Their free tier covers a lot of sites, and a monitor that shares a failure domain with the thing it monitors is not a real monitor.
Read on if you want checks and history on your own disk, next to your logs, with no per-monitor pricing.
| Uptime Robot | Central Logging | |
|---|---|---|
| Vantage point | Multiple external regions | Your own server, one location |
| Check interval | Per plan | Per monitor: 1, 2, 5 or 10 minutes |
| Monitor count | Per plan | Unlimited |
| Alerts on HTTP status code | Yes | No — see below |
| Alerts on connection failure | Yes | Yes |
| Keyword monitoring | Yes | Yes |
| TLS expiry alerts | Yes | Yes, 7 days out |
| Public status pages | Yes | No |
| SMS / phone / email alerts | Yes | No — Slack, Telegram, Pushover |
| Log aggregation | No | Yes |
| Cron monitoring | No | Yes |
| Pricing | Free tier, then paid plans | $187 once |
Add a monitor with a name and a URL, and pick a check frequency of one, two, five or ten minutes. The scheduler wakes every minute and runs whichever monitors are due. Each check stores:
Details in website monitoring.
Three things, and it is worth knowing exactly which three.
Connection errors. The request failed to complete — DNS failure, refused connection, timeout, TLS handshake failure. You get an alert, and a recovery alert when it comes back.
Keyword state changes. You nominate a string and say whether its presence or its absence is the problem. The alert fires when that state flips.
TLS certificates expiring within seven days. Throttled to once a day so it nags without spamming. This one quietly earns its keep — expired certificates cause more outages than most people admit.
A server that answers with 500 Internal Server Error has not failed to connect. The check records the 500, and no alert fires.
That is a real limitation compared to Uptime Robot, and it is fixable in about thirty seconds with a keyword check.
Pick a string that appears on a healthy page and nowhere on an error page — a nav item, a footer, an element only rendered when the database is reachable:
URL: https://app.example.com/
Keyword: Sign in
Alert When: not_exists
Now a 500, a blank white page, a maintenance page and a hijacked DNS record all trip the same alarm, because none of them contain “Sign in”. This is a better health check than a status code anyway — it tests that the page rendered, not just that something answered.
Better still, point the monitor at a health endpoint that only returns its magic string when its dependencies are up. Then one keyword check covers your database, your queue and your third-party API.
The alert says the site was unreachable at 03:14. In Central Logging, so are the logs.
Same server, same UI, same clock. Search the log source for that window:
SELECT timestamp, msg
FROM logs
WHERE timestamp BETWEEN strftime('%s', '2026-08-07 03:10:00')
AND strftime('%s', '2026-08-07 03:20:00')
ORDER BY timestamp;
Or set an alert rule that watches for the error itself and tells you before the uptime check does. A rule that fires on connection-pool exhaustion catches the outage while it is still building. Rules are evaluated every five minutes.
One caveat on that query: timestamp is when the server received the line, not when your application emitted it. They are close in normal operation and can drift apart when a host has been offline and its agent catches up. Where exact ordering matters, parse your own timestamp out of msg.
This is not a page arguing you should cancel Uptime Robot.
The sensible arrangement for most small teams is one external checker watching your two or three most important URLs — including the Central Logging server itself — and Central Logging watching everything else from inside, where it can also see the logs.
The external checker answers “is it up from the internet”. The internal one answers “and what went wrong”. Different questions.
Use Uptime Robot if you need external verification, a public status page, SMS or phone alerts, or on-call escalation.
Use Central Logging if you are already running it for logs, if you want more monitors than a plan allows, or if the first thing you do after an uptime alert is go looking for the logs.
The free download is the complete product, not a trial. Add one monitor with a keyword check and see how it reads.
14-day refund if you buy and it does not fit. Deploy has the setup.
💌 Get notified on new features and updates