It’s 9pm. Do you know where your children are? Well now it’s 2025. Do you know the uptime of your sites?
There are a hundred ways to get alerted about your site, to know if it’s responsive, to know if the content is correct. There are some amazing applications that can integrate with your phone and wake you up in the middle of the night.
That’s great. Of course, when you’re a small collection of people, or maybe a tiny company, or even a solo developer, you may not want to spend money (even $7/month for UptimeRobot’s second tier). Heck, you may not want to use a 3rd party service for whatever reason.
Now what?

Welcome to the land of self hosting your own uptime monitors.
The Criteria
Before we get to the part where I tell you what I’m using, I want to talk about the criteria.
It absolutely must be hosted on a different server than my website! Period. End of story. I have a dedicated server I use to host all of them, except one, and I sneaky have that one monitor the others.
I want to know if the site …
- is up and returning the right HTTP code (200)
- loads within an acceptable timeframe (different per site)
- returns the right content (I call this the ‘hack checker’ but it’s also great for checking JSON)
And what I want it to do …
- Alert me
- Make a ticket (if needed)
- Have a public status page
- Have a private back end is (optional)
- Allow for custom domains (i.e.
status.ipstenu.com)
Not one single service does all of this. Not the self-hosted ones either. None of them do all the things I need and want. The biggest problem is alerting.
I want alerts in Slack, Discord, and I would love an app that busts through Do Not Disturb mode. For self hosted tools, the app is a long shot. For everything else, I have to figure out web hooks, which isn’t too bad.
But knowing this? What did I end up using?
Services I Use (and Used)
Okay this is where I get weirder. I will note, all of these allow for notification.
| Service | Monitors | Status Page | Backend |
|---|---|---|---|
| Gatus | Uptime Response Time | Yes | No |
| HealthChecks.io | Cron Jobs | No | Yes |
| OneUptime | Uptime Response Time Metrics The Kitchen Sink | Yes | Yes |
| Statping-ng | Uptime Response Time | Yes | Yes |
| Tianji | Uptime Response Time Metrics Servers (and Docker) Request Timeline | Yes | Yes |
| Upptime* | Uptime Response Time | Yes | Yes |
| Uptime Kuma | Uptime | Yes | Yes |
Technically Upptime is not truly self hosted. It’s on GitHub.
I’m actually using all of those except Statping-ng (which is the only one with its own iOS app). The reason for that is I couldn’t get the custom CSS on Statping-ng to work, and while I didn’t list it as a criterium, it is something I care about. Branding matters. I want things to look like they belong.
Uptime Upsides & Downtime Decisions
Now there are downsides to them all. And in fact, after using them, I had a small update to my criteria in that I need it to also show a history of outages.
Essentially, all of these are 4 stars out of 5, except Statping-ng, and that is probably user error.
Gatus
The sucky thing about Gatus, which is a beautiful tool, is that I have to edit my config.yaml file, and since it’s in a Docker service, I have to restart that for every change. That means you have to edit, restart, test, rinse and repeat. I hate that. I don’t want everyone to have shell access!
This is also only a public page.
That said, it has an API so I can use it to show data on the back end of (say) my WP site. Also it has one of the more robust implementations to check specifics out of any of these. I have it checking my sites not just for uptime, but also for page content.
If Gatus gave me a backend for control and customizable (like custom domains) then it might take over for simplicity.
HealthChecks.io
This is a unitasker. It does cron and it does it well. The downside is that it’s a unitasker. It does cron and it does it well. The UX is simple and efficient, and there’s a secret back end for the systems. You can even hook WordPress itself into it for alerts!
OneUptime
I want to love this. It has everything you could possibly need… And it destroyed my 6-core server with 16G memory to the point that it was over 250 load! And this is after I did tuning.
It’s a massive memory and system hog. Also? The interface was very confusing. It took me a while to figure out the nuances of ‘This means the site is up and good, that means it’s not’ and could really be served by a UX overhaul. Also like Tijani, it could be well served by disabling features you don’t use.
Statping-ng
I mentioned I’m not using this anymore. The sole reason is it gave me fits when I tried to get it to let me edit CSS with my Docker setup. Other people had that problem too.
I wanted to love it, especially for the App, but in the end it just feels like a more ‘company’ version of Uptime Kuma.
Tianji
The name means Heavenly Opportunity or Strategy. This one is the nerdy developer tool to the nth degree. It can replace Google Analytics with its own website tracker (even a JS event tracker), monitor servers with a shell script (and by default, it monitors the server it’s on), and even make status pages complete with custom URLs. Technically I could replace HealthChecks.io with it, but since it lumps all my monitors together, I’m less fond.
While it does everything and the kitchen sink, that’s also the downside. I’d love to be able to disable things like App Tracking. I don’t have an app. I don’t need that.
Upptime
Technically this is not self hosted. Upptime is a Github Template which calls a service, which runs regular actions to check websites being up. If the site is down, it opens a Github issue. Site comes back up and the issue is closed. It even leaves a history of incidents.
The only thing I dislike is you can’t tell it to show timezones. While I know that looking at it, if it says 10:00 something happened, it means my time zone. But that really needs to be clearer.
Uptime Kuma
Kuma means bear. It’s a little bear who watches! I’ve mentioned this before. Uptime Kuma is still, hands down, the best for a simple, self hosted, status page. Not only can it track websites, it can pass curl headers in an easy to understand UX so I can be alerted if something changes on a specific API.
While you can make maintenance posts for Uptime Kuma, they don’t get saved so you lose the history. Also the customization options are pretty slim.
The Verdict?
The verdict is it depends what you need to monitor uptime, and how you want to be alerted.
Uptime Kuma is perfect if you want a simple status system with alerts. And HealthChecks.io is perfect for cron. But in the time since I started this post and now, my clear winner for my needs is … Tianji!
Gatus’ lack of a backend UX means that even though it’s so easy to write the checks, it’s just not enough for me. Uptime Kuma’s limited maintenance features loses out, and once you’ve got Tijani, you can drop HealthChecks (even though the latter has a better UX).
So here’s where I’m at:
- Upptime – LezWatch.TV uses this for tracking pretty much everything we need. It includes some ‘admin’ checks that I may move to …
- Tijani – Everything else I need to watch lives here. That means my servers (plural) send data back so I know if any of them are down. Don’t worry, it’s on it’s own server.
It’s not perfect, but because everyone’s needs are subtly different, multiple tools are the way to go.


Leave a Reply