A VPS rarely fails without warning. Disks fill up over weeks, memory leaks grow slowly, and load creeps up as traffic grows. Health monitoring catches these trends early, so you fix them on your schedule instead of during an outage. You don’t need a big monitoring stack to start: a few commands, an uptime checker, and simple alerts cover most risks.
The metrics that matter
| Metric | Healthy | Warning signs |
|---|---|---|
| CPU usage | Varies with load | Sustained 90–100% |
CPU steal (st) |
Near 0% | Consistently above ~10% |
| Load average | Below the number of vCPUs | Above vCPU count for long periods |
| Memory | “available” well above zero | Low available + swap in heavy use; OOM kills |
| Disk space | < 80% used | > 90%: services start failing at 100% |
Disk I/O wait (wa) |
Low single digits | High iowait, slow queries |
| Network | Within plan limits | Saturated bandwidth, packet loss, unexpected spikes |
| Services | Running, responding | Restarts, failed units, errors in logs |
| Uptime from outside | 200 OK, fast | Timeouts, 5xx errors |
Quick health check (2 minutes)
uptime # load averages
free -h # memory and swap
df -h # disk space
df -i # inodes (can run out before space does)
vmstat 1 5 # CPU: us, sy, id, wa, st
top -o %CPU # or htop: top processes
systemctl --failed # failed services
journalctl -p err -b | tail # errors since boot
dmesg -T | tail # kernel messages (OOM kills, disk errors)
See htop, the df command, and load average explained.
Monitor from outside: uptime checks
Internal metrics can’t tell you if the site is reachable for users. Add external checks:
- HTTP(S) checks of your main pages (status code and response time);
- TCP checks for other services (SSH, mail, game servers);
- TLS certificate expiry checks.
Uptime Kuma is easy to self-host on a second small server, so it keeps working when the main one fails. See Uptime Kuma monitoring and uptime monitoring tools.
Monitoring tools by effort
| Effort | Tool | What you get |
|---|---|---|
| Minimal | Uptime Kuma + a disk-space cron alert | Downtime and disk alerts |
| Low | Netdata | Real-time dashboards, hundreds of metrics, built-in alerts. See Netdata monitoring |
| Medium | Prometheus + node_exporter + Grafana | Long-term history, custom dashboards and alert rules. See Grafana and Prometheus monitoring |
| Medium | Zabbix | Agent-based monitoring with templates and SNMP for network devices. See SNMP monitoring on Linux |
A simple disk-space alert
If you only add one alert, make it disk space:
#!/bin/bash
# /usr/local/bin/disk-alert.sh
THRESHOLD=85
df -P -x tmpfs -x devtmpfs | awk 'NR>1 {gsub("%","",$5); if ($5 > T) print $6, $5"%"}' T=$THRESHOLD | \
while read mount use; do
echo "Disk $mount at $use on $(hostname)" | mail -s "Disk alert $(hostname)" [email protected]
done
sudo chmod +x /usr/local/bin/disk-alert.sh
echo "*/30 * * * * root /usr/local/bin/disk-alert.sh" | sudo tee /etc/cron.d/disk-alert
Sending mail requires a working mail setup. A webhook to Slack, Discord or Telegram with curl works just as well. See crontab guide.
Alert thresholds that work
| Alert | Suggested threshold |
|---|---|
| Site down | 2–3 failed checks in a row |
| Disk usage | 85% warning, 95% critical |
| Memory available | < 10% for 10 minutes |
| CPU steal | > 15% for 15 minutes |
| Load | > 2 × vCPUs for 15 minutes |
| Certificate expiry | < 14 days |
| Failed systemd units | Any |
Alert on things that need action. Too many noisy alerts get ignored. See alerting best practices.
Logs are health data too
Errors in application, web server and system logs often appear before outages. Rotate logs so they don’t fill the disk, and scan them for spikes in errors. See log management and logrotate.
Weekly checklist
- Disk usage and growth trend
- Pending security updates (
apt list --upgradable) - Failed services and recurring errors in logs
- Backups ran, and a test restore works occasionally
- Resource trends: is RAM or CPU steadily climbing?
- Certificates and domain renewals
When the metrics say “upgrade”
If CPU, RAM or disk stay near their limits after you’ve optimized (caching, tuning, cleanup), it’s time for a bigger plan. Upgrades on VPS.DO are done by opening a support ticket. See when to upgrade your VPS and VPS performance troubleshooting.
Quick reference
| Check | Command |
|---|---|
| Load | uptime |
| Memory | free -h |
| Disk | df -h, df -i |
| CPU / steal / iowait | vmstat 1 5 |
| Failed services | systemctl --failed |
| Errors | journalctl -p err -b |
Related: CPU and RAM monitoring and observability basics.