I’ve used Uptime Kuma for three or whatever years. It has worked well in the background, but recently I decided to look into alternatives because I never really liked the complexity of configuring Kuma or the user interface if I’m being honest.
I didn’t have to look long to find the perfect replacement. Gatus
is wonderfully simple, written in Go (which is obviously a positive), configured with a simple yaml file and stays out of the way until it needs my attention.
Why I moved away from Uptime Kuma
I didn’t have any huge issues with Uptime Kuma, I simply had some free time and wanted to improve my self-hosted stack in a little way. To list a few issues:
- The dashboard isn’t easy to quickly scan because it opens the first entry by default and only shows all entries (ie the real overview) in a smaller list on the left.
- I don’t look forward to having to configure a new monitor or doing any advanced configuration because it’s usually a headache because of how confusing it can be (loads of settings all packed into a small page). Which leads me to putting it off for ages (never doing it and having an old unmanaged config pretty much).
- I don’t enjoy it.
Gatus solves all my (tiny, i guess) issues
Gatus addresses all of the issues I was having with Uptime Kuma.
- The dashboard gives me everything I want, which is a quick overview of all the services I’m monitoring. Nothing else, just straight to real business, and If I ever want the full detailed view (rarely), I can still click into a single service to see that.
- Quickly configuring the server with the
yamlconfig file is a breeze, especially once it’s setup. It even reloads automatically. - I enjoy using and hosting Gatus.
Check it out
If you use Uptime Kuma and or are looking for monitoring software, I highly recommend Gatus. I’m sure you don’t need a configuration guide because as I’ve said, It’s wonderfully simple, but I’ll leave you with a taste of how easy it is.
Using docker compose, you can set this simple file up:
services:
gatus:
image: twinproduction/gatus:v5.35.0
ports:
- "8080:8080"
volumes:
- ./config:/config
# Data volume only necessary if using persistent storage.
- ./data:/data
environment:
# Pass credentials (etc) and use them in your config very easily!
ALERT_AUTH: ${ALERT_AUTH}
And now for the Gatus config, you can see how simple it is to setup persistent storage with sqlite, a maintenence period and your first endpoint to monitor. The README is your friend!
storage:
type: sqlite
path: /data/data.db
alerting:
custom:
url: "https://my.custom.endpoint/for/monitoring"
headers:
Authorization: ${ALERT_AUTH}
Content-Type: "application/json"
method: "POST"
body: |
{
"message": "[ALERT_TRIGGERED_OR_RESOLVED]: ([ENDPOINT_GROUP]) *[ENDPOINT_NAME]* - [ALERT_DESCRIPTION] - [RESULT_ERRORS]",
"kind": "gatus"
}
default-alert:
description: "health check failed"
send-on-resolved: true
failure-threshold: 2
success-threshold: 1
maintenance:
start: 05:00
duration: 1h
endpoints:
- name: Log
group: media
url: "https://log.sbond.co/"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h"
alerts:
- type: custom
I’m using a custom http request for my alerts, but if you are using one of the many first-party alerting providers, the Gatus README describes in detail how all them can be configured.
The templating of alerting messages is also a very nice feature.
I love a good README and Gatus doesn’t disappoint!
Project links: