When your VPS costs $5/month, paying another $5–$15/month for a monitoring service defeats the purpose of being on a budget. The good news: you can set up comprehensive monitoring — disk space, CPU usage, memory, process health, and transfer limits — entirely with free, open-source tools. This guide walks through the five best free monitoring tools for a budget VPS, how to set each one up, and what alert thresholds to configure so you know about problems before they take your site offline.
1. Netdata: Real-Time Dashboard (Free, Runs on 512 MB RAM)
Netdata is the single best monitoring tool for a budget VPS. It shows CPU, memory, disk, network, and process-level metrics in real time with no configuration. It runs on a standalone agent that uses only 30–50 MB of RAM and 2–5% of a single CPU core.
Installation:
# One-line install (works on Ubuntu, Debian, CentOS)
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# Netdata starts immediately on port 19999
# Open http://your-vps-ip:19999 in your browser
What to watch: The “System Overview” tab shows live CPU, RAM, disk, and network. The “Applications” tab breaks down resource usage per process — useful for finding which WordPress plugin is leaking memory.
Alert configuration: Netdata comes with 200+ pre-configured alarms. The most important ones for a budget VPS:
- Disk space < 20% free → triggers a warning
- RAM usage > 80% → triggers a warning
- Outbound bandwidth > 80% of monthly allowance → triggers a critical alert
- Swap usage > 50% → triggers a warning (indicates RAM pressure)
To enable email alerts, run /etc/netdata/edit-config health_alarm_notify.conf, set SEND_EMAIL="YES", and configure your SMTP settings.
2. htop + Glances: Lightweight Terminal Monitors
For quick SSH checks, these two tools are essential:
htop — An interactive process viewer that shows CPU, memory, and swap usage per process, color-coded.
# Install
apt install htop -y
# Run
htop
# Press F6 to sort by MEM% — find memory hogs instantly
Glances — A more comprehensive terminal tool that shows CPU, RAM, disk, network, and running processes in a single screen. It also has a web server mode.
# Install
apt install glances -y
# Run in terminal
glances
# Run as web server on port 61208 (lightweight, 80 MB RAM)
glances -w
Glances uses about 80 MB of RAM in web server mode, which is noticeable on a 1 GB VPS. Use it only when you need the web interface, and stop the service when not in use.
3. Prometheus Node Exporter + Grafana (Advanced Setup)
If you want persistent metrics with historical charts, this is the gold standard — and it’s completely free. Node Exporter collects system metrics, Prometheus stores them, and Grafana displays them in dashboards.
Resource cost: Node Exporter uses ~15 MB RAM. Prometheus uses ~100–200 MB (runs on a separate VPS or the same one). Grafana uses ~100 MB. Total: ~250–350 MB if running on the same VPS.
Step-by-step setup (on the VPS you want to monitor):
# Install Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/
# Run as a service (creates systemd unit)
cat > /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl enable --now node_exporter
# Metrics available at http://your-vps-ip:9100/metrics
Available metrics (all free):
- node_filesystem_avail_bytes — disk space remaining
- node_memory_MemAvailable_bytes — available RAM
- node_cpu_seconds_total — CPU usage by mode
- node_network_receive_bytes_total — inbound bandwidth
- node_network_transmit_bytes_total — outbound bandwidth
- node_disk_read_bytes_total / node_disk_written_bytes_total — disk I/O
- node_load1 / node_load5 / node_load15 — system load averages
Setting up Prometheus and Grafana is beyond the scope of this guide, but the Grafana dashboard ID 1860 (“Node Exporter Full”) is a ready-made dashboard that imports in one click.
4. Simple Bash Script for Email Alerts (No Third-Party Services)
If you want the simplest possible alert system without installing any monitoring tool, use this bash script that checks your VPS health and sends email alerts via the built-in mail command:
#!/bin/bash
# /usr/local/bin/vps-health-check.sh
# Run this via cron every 15 minutes
THRESHOLD_DISK=80 # Alert if disk usage > 80%
THRESHOLD_MEM=85 # Alert if memory usage > 85%
THRESHOLD_LOAD=2.0 # Alert if load average > 2.0
EMAIL="[email protected]"
HOSTNAME=$(hostname)
# Check disk
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then
echo "Disk usage on $HOSTNAME is at ${DISK_USAGE}% — cleanup needed." | mail -s "ALERT: Disk full on $HOSTNAME" $EMAIL
fi
# Check memory
MEM_USAGE=$(free | awk '/Mem/ {printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
echo "Memory usage on $HOSTNAME is at ${MEM_USAGE}%." | mail -s "ALERT: High memory on $HOSTNAME" $EMAIL
fi
# Check load average
LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ')
if (( $(echo "$LOAD > $THRESHOLD_LOAD" | bc -l) )); then
echo "Load average on $HOSTNAME is $LOAD — possible resource exhaustion." | mail -s "ALERT: High load on $HOSTNAME" $EMAIL
fi
Set up cron:
chmod +x /usr/local/bin/vps-health-check.sh
# Add to crontab (run every 15 minutes)
echo "*/15 * * * * /usr/local/bin/vps-health-check.sh" | crontab -
This script uses zero additional RAM (it runs, checks, and exits). Configure it once and you get email alerts for disk, memory, and CPU load without any monitoring service running in the background.
5. Uptime Monitoring (Free External Services)
Internal monitoring only tells you about problems after they happen. For external monitoring that checks if your site is actually reachable from the internet, use one of these free services:
- UptimeRobot — Free tier: 5 monitors, 5-minute checks, email alerts. Checks HTTP, ping, port, and keywords.
- Better Uptime — Free tier: 10 monitors, 1-minute checks, email/SMS alerts. Includes status pages.
- Pingdom — Free tier: 1 monitor, 1-minute checks, email alerts. Limited to one URL.
- Checkly — Free tier: 50 API checks per month, browser checks. Good for testing transaction flows.
Set up at least two external monitors from different providers. If one goes down, the other still alerts you. Point them at your WordPress homepage and a specific API endpoint (like /wp-json/) to verify the whole stack is responding.
Putting It All Together: A Complete Free Monitoring Stack
Here is the recommended stack for a budget VPS, ordered by RAM usage from lowest to highest:
| Tool | RAM usage | What it monitors | Best for |
|---|---|---|---|
| Bash alert script (cron) | 0 MB (runs/exits) | Disk, RAM, load | Immediate email alerts |
| htop (on demand) | 0 MB (run when needed) | Per-process CPU/RAM | Quick SSH debugging |
| Netdata | 30–50 MB | Everything: real-time dashboard | Always-on visual monitoring |
| Node Exporter | 15 MB | System metrics (Prometheus format) | Historical data collection |
| UptimeRobot (external) | 0 MB on your VPS | HTTP reachability | External uptime checks |
Total RAM cost for always-on monitoring: 45–65 MB (Netdata + Node Exporter). That is less than 5% of a 2 GB VPS and well worth the visibility.
Alert Thresholds for a Budget VPS
Configure these alert thresholds based on typical budget VPS resources:
- Disk space: Alert at 80%. On a 20 GB disk, 80% = 16 GB used, 4 GB free. That gives you 1–2 weeks to clean up before hitting 95%.
- RAM usage: Alert at 80%. On 1 GB, 800 MB used means 200 MB free. Start investigating which process is consuming memory.
- Swap usage: Alert at 10%. Any swap activity on a 1 GB VPS means you are running out of physical RAM. Investigate immediately.
- Bandwidth: Alert at 80% of monthly allowance. If your plan has 1 TB transfer, alert at 800 GB. This gives you time to cache aggressively or reduce traffic before hitting overage charges.
- Load average: Alert when > 2.0 for 5 minutes. On a single-core VPS, a load of 2.0 means processes are waiting for CPU time. Investigate the cause.
Free monitoring is not a compromise — it is often more appropriate than paid tools for a budget VPS because it runs on the same hardware and gives you exactly the metrics that matter for your resource limits. Compare VPS plans that give you enough headroom for monitoring agents in the VPS comparison table, and set up your alerts today before a problem forces you to react.
