Open source, AGPL-3.0
Uptime monitoring and status pages you actually own.
Watch HTTP, TCP and DNS endpoints from as many regions as you care to run. Publish a status page your customers can read during an outage. Get told in Slack. Host the whole thing yourself, on hardware you control, for about the price of nothing.
No account required to self-host. docker compose up and you have the whole stack.
What it does
Scoped deliberately. Everything here works; nothing here is a roadmap item.
HTTP, TCP and DNS checks
HTTP probes record a full timing breakdown — DNS, connect, TLS handshake, time to first byte, transfer — so a slow endpoint tells you which phase got slow.
Probe from several regions
Run a checker wherever you like; each reports under its own region. Decide per monitor whether down means any region, a majority, or all of them.
Status pages
A 90-day uptime tracker, incident history and scheduled maintenance. Custom domain, your own CSS, optional password, RSS feed and SVG badges.
Slack alerts that survive Slack
Notifications are written to an outbox in the same transaction as the state change, then delivered with retry and backoff. Slack being down delays alerts; it never loses them.
Heartbeats for jobs
Give a cron job a URL to ping. Miss the window by more than its grace period and it opens an incident like any other monitor.
Workspaces and audit logs
Admin, editor and viewer roles per workspace. Every admin action is recorded, immutably, with who did it and to what.
How it fits together
Five services do the monitoring. Run them on one box or spread them across providers — only the checker has to be a container.
| checker | Go binary. Runs the probes and posts results back. One per region. |
| api | Public read API, probe ingestion, Slack receiver. |
| web | The dashboard. Every admin write happens here. |
| status-page | The public page. Reads the API and nothing else. |
| notifier | Drains the outbox and delivers Slack messages. |
Run it yourself
Probe results go to ClickHouse, where a row costs about two bytes against roughly three hundred in Postgres. That is the difference between months of multi-region history fitting in a free-tier database and not — which is why a real deployment can sit on free tiers rather than a bill.
git clone github.com/imonirulislam/openmonitor
cd openmonitor
docker compose up --buildMigrations run on start. The one thing that can’t be serverless is the checker — TCP and DNS probes need real sockets and a chosen egress region — so it stays a container. The deployment guide has the rest.
Start watching something
Add a monitor, point a checker at it, and put the status page on your domain.