Skip to content
AgentThread
Open Source#self-hosted#monitoring#uptime#docker#open-source#status-page

Uptime Kuma: Self-Hosted Monitoring and Status Pages Without the Monthly Fee

An open-source monitoring tool that tells ops managers, founders, and freelancers when their website or service is down, with no Pingdom bill attached.

AgentThread10 min read
Share

Your website is down. A customer noticed before you did. That is the scenario that uptime monitoring exists to prevent, and it is why services like Pingdom have charged $15 to $50 per month for decades. Uptime Kuma is an open-source project that does the same job on a VPS (a virtual private server, a rented slice of a remote computer you control) you already pay for, at a cost of $0 in software fees.

It checks your sites and services on a 20-second interval, shows you a live dashboard with response time charts, and alerts you through more than 90 notification channels the moment something stops responding. A public status page (a webpage your users can visit to see whether your systems are operational) is built in. The project has 89,623 stars on GitHub and 169 million Docker (software that packages the app into a container you run on any server) pulls, which puts it well past the "interesting experiment" threshold into "people rely on this in production."

FactValue
What it isA self-hosted monitoring and status page tool
Built byLouis Lam and open-source contributors
LicenseMIT (free to use, modify, and deploy commercially)
PlatformsAny Linux server or Windows 10+; runs inside Docker on any host (VPS, home server, cloud VM)
RequiresDocker (recommended), or Node.js 20.4+ with PM2 for non-container installs
Install methodOne Docker command; running in under 10 minutes
VerdictThe right tool for anyone paying for hosted monitoring who already has a server, or who runs Coolify, Caprover, or any self-hosted stack

What Uptime Kuma actually is

Uptime Kuma is a monitoring agent that you run on your own infrastructure. Once it is running, it periodically checks each service you configure and records whether the check succeeded. When a check fails, it fires an alert through whatever notification channel you set up. When the service comes back, it fires a recovery alert.

The checks cover more ground than simple website pings. HTTP/HTTPS (the protocols web browsers use to fetch pages) monitoring is the most common use case: Uptime Kuma hits your URL and reports whether it got a valid response. TCP (a connection type used by databases, mail servers, and other non-web services) checks let you monitor a database port or an API that does not speak HTTP. DNS (the system that translates domain names like "yoursite.com" into server addresses) record checks catch situations where your domain configuration breaks. Docker container monitoring integrates directly with the Docker daemon (the background service that manages containers) to watch whether individual containers are running. Push monitoring flips the model: instead of Uptime Kuma reaching out to check your service, your service sends a heartbeat (a timed signal confirming it is still alive) to Uptime Kuma at a defined interval. If the heartbeat stops arriving, an alert fires. That pattern is useful for background workers, cron jobs (scheduled tasks that run at set intervals), and any process that does not expose a port.

Certificates get monitored automatically for HTTP checks: Uptime Kuma tracks the SSL certificate (the cryptographic credential that enables the padlock in browser URLs) expiry date and alerts you before it expires.

The status page feature lets you build a public-facing page showing whether your services are up. You pick which monitors to display, add a custom domain, and the page updates in real time as monitor states change. This replaces the third-party status page products that typically cost $20 to $50 per month on top of your monitoring bill.

What you get after installing it

The dashboard is a single-page app that loads fast and updates in real time over a WebSocket (a persistent two-way connection between your browser and the server, so the page refreshes itself without you doing anything).

Each monitor you configure shows a color-coded status bar, a response time chart, and the last few incidents. The bar represents the last 24 hours of check results in 10-minute blocks so you can see patterns at a glance: a solid block of red at 3 AM means there was an outage; scattered yellow means intermittent slowness.

Monitor types available out of the box:

  • HTTP/HTTPS with optional keyword matching (checks whether a specific word appears in the response body, useful for confirming your app is actually serving real content rather than an error page)
  • HTTP/HTTPS with JSON Query (checks a specific value in a structured data response, useful for services that publish a health status at a URL)
  • TCP port checks
  • Ping (a test that checks whether a server is reachable at the network level)
  • DNS record monitoring
  • Docker container status
  • Push (heartbeat) monitoring
  • Steam game server status
  • WebSocket (a connection type used by real-time applications like chat and live dashboards)

Notifications connect to 90+ channels. Telegram, Discord, Slack, and email via SMTP (a standard protocol for sending email) are the most common setups. PagerDuty, OpsGenie, Pushover, Gotify, webhooks (automatic notifications sent to another service when something happens), and Microsoft Teams are all supported. Each monitor can have multiple notification methods, so you can get a Telegram message for every alert and a PagerDuty page only for your critical services.

Maintenance windows let you schedule planned downtime so alerts do not fire during a deploy or a database migration.

Two-factor authentication (a login method that requires a second verification step beyond your password) is available for the dashboard.

Prometheus metrics export is available via a URL endpoint. Prometheus is an open-source tool that collects statistics from many services and stores them so you can build charts and dashboards. If you already run a Grafana dashboard (a tool for visualizing server and application data), Uptime Kuma can feed data into it.

The install experience

The fastest path is a single Docker command:

docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

Docker is software that packages the app and all its dependencies into a container you run on any server without installing Node.js, a database, or any other dependency manually. The --restart=always flag tells Docker to bring the container back up automatically if the server reboots. The -v uptime-kuma:/app/data part creates a persistent volume (a named storage location that survives container restarts and upgrades) so your configuration and monitor history are not lost when you update the image.

After the command runs, open http://your-server-ip:3001 in a browser. A setup wizard asks you to create an admin account. That is the entire install. Adding your first monitor takes about 30 seconds: click "Add New Monitor," pick the type, enter the URL or host, set the check interval, pick a notification channel, and save.

Docker Compose (a tool for defining multi-container setups in a single YAML file) is the recommended approach for production. The official compose.yaml file in the repository adds a health check and makes upgrades cleaner. You download the file, run docker compose up -d, and the container starts in the background.

Non-Docker install requires Node.js 20.4 or newer, Git (the version control system used to clone the project code), and PM2 (a process manager that keeps Node.js applications running in the background and restarts them on crash). This path is more involved and suited for situations where Docker is not available.

One operational note worth knowing: Uptime Kuma does not officially support NFS (a network file system type used in some shared storage setups). Use a local directory or a named Docker volume for the data path. Using NFS can cause database corruption.

Reverse proxy (a traffic router that sits in front of your applications and handles incoming HTTPS connections) setup is documented in the wiki for Nginx, Apache, and Caddy. If you are already running Coolify or Caprover to manage your self-hosted stack, Uptime Kuma appears in the one-click service catalog in both tools, so the Docker command runs for you.

Where it fits and what to compare it to

Uptime Kuma fills the space between "no monitoring" and "paying $15 to $50 per month for a hosted service." If you already have a server, the software cost is zero.

Better Stack (formerly Better Uptime) at betterstack.com is the most common hosted alternative for small teams. The free tier covers 10 monitors. Adding 50 more monitors costs $25 per month. That is a reasonable price if you have no server to run self-hosted tools on, and Better Stack adds features like multi-location checks from different geographic regions (so you can confirm whether an outage is global or regional), AI-powered post-mortem analysis, and phone call alerts. If your monitoring needs are simple and you do not operate a server, Better Stack's free tier may be enough.

Pingdom is the enterprise end of the spectrum. It has been the standard for large sites for a long time and offers the most geographic check coverage, detailed transaction monitoring, and SLA reporting. Pricing starts around $15 per month for a basic plan and scales up quickly. It is the right choice for e-commerce businesses with SLA (service level agreement, a contractual uptime guarantee to customers) obligations, not for a founder running three services on a $10 VPS.

Uptime Robot is the closest hosted equivalent to Uptime Kuma in terms of simplicity. It has a free tier that covers 50 monitors with 5-minute check intervals. Uptime Kuma checks every 20 seconds by default, which is meaningfully faster for catching and alerting on short outages.

Gatus is another self-hosted monitoring tool with a similar feature set. It is configured entirely through a YAML file rather than a web UI, which some operators prefer for infrastructure-as-code workflows (defining and managing infrastructure through configuration files rather than manual clicks). Uptime Kuma's browser dashboard is easier to operate for non-engineers.

The decision is straightforward. If you run a server, Uptime Kuma is the default choice for monitoring. If you do not run a server and need monitoring for a handful of sites, Better Stack's free tier covers basic needs. If you need multi-region checks or SLA-grade features, a paid hosted service is the right trade-off.

Verdict

Install Uptime Kuma if you already have a VPS or are running any self-hosted stack. The Docker install takes under 10 minutes. You get 20-second check intervals, 90+ notification channels, a built-in status page, certificate monitoring, and Docker container health checks in a single tool that costs nothing to run beyond the server you already pay for.

Hold off if you have no server to put it on. Running a $6-per-month VPS purely to host Uptime Kuma is defensible, but at that point the gap between free server cost and Better Stack's free tier closes. The tipping point is when you already have a server running other things.

The 89,623-star count and 169 million Docker pulls reflect a project that people actually run in production, not just one they star and forget. The MIT license means there are no restrictions on commercial use. Louis Lam maintains the project actively and the GitHub issue tracker is responsive.

For anyone running a freelance client site, a SaaS product on a budget, or an internal tool on a rented server, Uptime Kuma removes "I didn't know it was down" from the list of things that can go wrong.

Related posts