VPS Server Monitoring with Netdata and Uptime Kuma

Know when your VPS has a problem before your users report it — that's the goal of good server monitoring. This guide introduces two industry-standard open source tools: Netdata for real-time server metrics, and Uptime Kuma for uptime monitoring with Telegram alerts. Both are free, self-hosted, and work together as a comprehensive monitoring stack.

Netdata vs Uptime Kuma: What Does Each Do?

These tools complement each other — use both:

Netdata

  • Real-time CPU, RAM, Disk, Network
  • Beautiful, easy-to-read dashboard
  • Detect performance issues
  • Alert when resources spike
  • Monitor processes, databases, Nginx

Uptime Kuma

  • Monitor URLs, TCP, HTTP(S)
  • Instant alert when site goes down
  • Public status page
  • Telegram, Email, Slack support
  • Ping, DNS, certificate expiry

Install Netdata on Ubuntu/Debian

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

After installation, access the dashboard at http://your-server-ip:19999

Secure Port 19999 with Nginx Reverse Proxy

Never expose port 19999 directly. Use Nginx as a reverse proxy with basic authentication:

server { listen 80; server_name monitor.yourdomain.com; location / { auth_basic "Netdata"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:19999; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # Create password htpasswd -c /etc/nginx/.htpasswd admin

Configure Netdata Alerts

Netdata ships with over 200 built-in alert rules, customizable in /etc/netdata/health.d/. Example CPU alert:

alarm: cpu_usage on: system.cpu lookup: average -3m percentage foreach cpu every: 10s warn: $this > 85 crit: $this > 95 summary: CPU usage is too high

Install Uptime Kuma with Docker

docker volume create uptime-kuma docker run -d \ --restart=always \ -p 3001:3001 \ -v uptime-kuma:/app/data \ --name uptime-kuma \ louislam/uptime-kuma:1

Access the dashboard at http://your-server-ip:3001 and create your admin account.

Install Without Docker (npm)

git clone https://github.com/louislam/uptime-kuma.git cd uptime-kuma npm run setup node server/server.js

Add Monitors in Uptime Kuma

Click Add New Monitor and configure:

Comparing Popular Monitoring Stacks

Before choosing a monitoring tool, compare the options available in the market to find the best fit for your project size and budget.

Tool Type Difficulty RAM Usage Best For
Netdata Real-time metrics Easy 50–100 MB General VPS
Uptime Kuma Uptime monitoring Easy 80–120 MB All sizes
Prometheus + Grafana Metrics + Dashboard Hard 300–500 MB Large teams
Zabbix Enterprise monitoring Very hard 500 MB+ Enterprise
Datadog Cloud-based SaaS Medium Agent ~50 MB Funded teams

Connect Netdata to Netdata Cloud (Optional)

Netdata offers a free Cloud tier that aggregates dashboards from multiple servers into a single view, with built-in alert management and ML-powered anomaly detection — especially useful when managing multiple VPS instances.

Claim Your Node to Netdata Cloud

After installing Netdata, run the following command to connect to your Cloud account:

netdata-claim.sh -token=YOUR_CLAIM_TOKEN \
  -rooms=YOUR_ROOM_ID \
  -url=https://app.netdata.cloud

Find your Token and Room ID in the app.netdata.cloud dashboard after signing up for free. Your node will appear in the Cloud dashboard within 1–2 minutes.

Benefits of Netdata Cloud

Set Up Telegram Notifications

  1. Open Telegram and search for @BotFather
  2. Type /newbot and follow the prompts to create your bot
  3. Copy the API Token provided
  4. Find your Chat ID using @userinfobot
  5. In Uptime Kuma: Settings → Notifications → Add → Telegram
  6. Enter your Bot Token and Chat ID

Create a Public Status Page with Uptime Kuma

Uptime Kuma includes a built-in public Status Page feature that lets your customers check system status on their own — reducing repetitive support inquiries and demonstrating operational transparency.

How to Create a Status Page

  1. In Uptime Kuma, click Status Page in the left menu
  2. Click New Status Page, set a name and slug such as status
  3. Select the monitors you want to display on the page
  4. Configure a Custom Domain such as status.yourdomain.com by pointing a DNS CNAME to your VPS
  5. Publish the Status Page and share the URL with your users

Nginx Proxy for Status Page

Add a CNAME record in your domain DNS, then configure Nginx to proxy traffic to Uptime Kuma on port 3001:

server {
    listen 80;
    server_name status.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Production VPS Monitoring Checklist

Before deploying any application on a production VPS, have a complete monitoring setup in place. This checklist covers the essential items every production server should have:

A complete monitoring setup enables your team to detect problems before customers notice them, significantly reducing Mean Time to Recovery. For VPS environments running 24 hours a day, fast response time is one of the key differentiators between professional operations and amateur deployments.

Simple CPU/RAM Alert via Bash Script

#!/bin/bash # /usr/local/bin/alert.sh CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d. -f1) RAM_FREE=$(free | awk '/Mem:/{printf "%.0f", $4/$2*100}') if [ "$CPU" -gt 90 ]; then curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \ -d chat_id="$CHAT_ID" \ -d text="ALERT: CPU Usage ${CPU}% on $(hostname)" fi if [ "$RAM_FREE" -lt 10 ]; then curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \ -d chat_id="$CHAT_ID" \ -d text="ALERT: Low RAM (only ${RAM_FREE}% free) on $(hostname)" fi

AsiaGB VPS starts at 500 THB/month. Run both Netdata and Uptime Kuma simultaneously with Full Root Access, SSD storage, and Docker support. Locations: Thailand (CSL) and Singapore (OVHcloud). 99% Uptime.

VPS Ready for Server Monitoring

VPS from 500 THB/month. Full Root Access, Docker, SSD. Thailand & Singapore locations, 99% Uptime.

View VPS Plans

View all affordable VPS Thailand plans →